fix "IDEA-221944 Deadlock on opening second project" and support preloading for proje...
[idea/community.git] / platform / core-impl / src / com / intellij / psi / impl / PsiManagerEx.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.psi.impl;
3
4 import com.intellij.openapi.Disposable;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import com.intellij.openapi.vfs.VirtualFileFilter;
8 import com.intellij.psi.PsiManager;
9 import com.intellij.psi.impl.file.impl.FileManager;
10 import org.jetbrains.annotations.NotNull;
11 import org.jetbrains.annotations.TestOnly;
12
13 /**
14  * @author peter
15  */
16 public abstract class PsiManagerEx extends PsiManager {
17   public static PsiManagerEx getInstanceEx(Project project) {
18     //noinspection SSBasedInspection
19     return (PsiManagerEx)getInstance(project);
20   }
21
22   public abstract boolean isBatchFilesProcessingMode();
23
24   @TestOnly
25   public abstract void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter, @NotNull Disposable parentDisposable);
26
27   public abstract boolean isAssertOnFileLoading(@NotNull VirtualFile file);
28
29   /**
30    * @param runnable to be run before <b>physical</b> PSI change
31    */
32   public abstract void registerRunnableToRunOnChange(@NotNull Runnable runnable);
33
34   /**
35    * @param runnable to be run before <b>physical</b> or <b>non-physical</b> PSI change
36    */
37   public abstract void registerRunnableToRunOnAnyChange(@NotNull Runnable runnable);
38
39   public abstract void registerRunnableToRunAfterAnyChange(@NotNull Runnable runnable);
40
41   @NotNull
42   public abstract FileManager getFileManager();
43
44   public abstract void beforeChildAddition(@NotNull PsiTreeChangeEventImpl event);
45
46   public abstract void beforeChildRemoval(@NotNull PsiTreeChangeEventImpl event);
47
48   public abstract void beforeChildReplacement(@NotNull PsiTreeChangeEventImpl event);
49
50   public abstract void beforeChange(boolean isPhysical);
51
52   public abstract void afterChange(boolean isPhysical);
53 }