fix "IDEA-221944 Deadlock on opening second project" and support preloading for proje...
[idea/community.git] / xml / impl / src / com / intellij / javaee / PsiExternalResourceNotifier.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.javaee;
3
4 import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
5 import com.intellij.openapi.Disposable;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.util.Disposer;
8 import com.intellij.psi.impl.PsiManagerEx;
9
10 public final class PsiExternalResourceNotifier {
11   private final PsiManagerEx myPsiManager;
12   private final DaemonCodeAnalyzer myDaemonCodeAnalyzer;
13
14   public PsiExternalResourceNotifier(Project project) {
15     myPsiManager = PsiManagerEx.getInstanceEx(project);
16
17     ExternalResourceManagerEx externalResourceManager = ExternalResourceManagerEx.getInstanceEx();
18     myDaemonCodeAnalyzer = DaemonCodeAnalyzer.getInstance(project);
19     final ExternalResourceListener myExternalResourceListener = new MyExternalResourceListener();
20     externalResourceManager.addExternalResourceListener(myExternalResourceListener);
21     Disposer.register(project, new Disposable() {
22       @Override
23       public void dispose() {
24         externalResourceManager.removeExternalResourceListener(myExternalResourceListener);
25       }
26     });
27   }
28
29   private final class MyExternalResourceListener implements ExternalResourceListener {
30     @Override
31     public void externalResourceChanged() {
32       myPsiManager.beforeChange(true);
33       myDaemonCodeAnalyzer.restart();
34     }
35   }
36 }