b8db1f8267a592c10474591a803515d5220038eb
[idea/community.git] / xml / impl / src / com / intellij / javaee / PsiExternalResourceNotifier.java
1 // Copyright 2000-2018 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 class PsiExternalResourceNotifier {
11   private final PsiManagerEx myPsiManager;
12   private final ExternalResourceManagerEx myExternalResourceManager;
13   private final DaemonCodeAnalyzer myDaemonCodeAnalyzer;
14
15   public PsiExternalResourceNotifier(PsiManagerEx psiManager, ExternalResourceManager externalResourceManager,
16                                      final DaemonCodeAnalyzer daemonCodeAnalyzer, Project project) {
17     myPsiManager = psiManager;
18     myExternalResourceManager = (ExternalResourceManagerEx)externalResourceManager;
19     myDaemonCodeAnalyzer = daemonCodeAnalyzer;
20     final ExternalResourceListener myExternalResourceListener = new MyExternalResourceListener();
21     myExternalResourceManager.addExternalResourceListener(myExternalResourceListener);
22     Disposer.register(project, new Disposable() {
23       @Override
24       public void dispose() {
25         myExternalResourceManager.removeExternalResourceListener(myExternalResourceListener);
26       }
27     });
28   }
29
30   private class MyExternalResourceListener implements ExternalResourceListener {
31     @Override
32     public void externalResourceChanged() {
33       myPsiManager.beforeChange(true);
34       myDaemonCodeAnalyzer.restart();
35     }
36   }
37 }