From fc703d62108ed1adef9400cb4a14fbc156f4bd97 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 21 Feb 2013 12:22:53 +0100 Subject: [PATCH] forget inspection scope caches on scopes change, restart daemon, etc (IDEA-101489) --- .../codeInspection/InspectionProfile.java | 2 ++ .../codeInspection/ex/ScopeToolState.java | 4 ++++ .../profile/DefaultProjectProfileManager.java | 2 +- .../ex/InspectionProfileImpl.java | 8 ++++++++ .../InspectionProjectProfileManager.java | 19 ++++++++++++++++++- 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/platform/lang-api/src/com/intellij/codeInspection/InspectionProfile.java b/platform/lang-api/src/com/intellij/codeInspection/InspectionProfile.java index 8bd4250ebc93..0ddf5937e5ab 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/InspectionProfile.java +++ b/platform/lang-api/src/com/intellij/codeInspection/InspectionProfile.java @@ -63,4 +63,6 @@ public interface InspectionProfile extends Profile { @NotNull String getDisplayName(); + + void scopesChanged(); } diff --git a/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java b/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java index dd6943013cad..50495a0fc9cb 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java +++ b/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java @@ -149,4 +149,8 @@ public class ScopeToolState { } return false; } + + public void scopesChanged() { + myScope = null; + } } \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/profile/DefaultProjectProfileManager.java b/platform/lang-api/src/com/intellij/profile/DefaultProjectProfileManager.java index 3fce519df4c9..d0b032a76dec 100644 --- a/platform/lang-api/src/com/intellij/profile/DefaultProjectProfileManager.java +++ b/platform/lang-api/src/com/intellij/profile/DefaultProjectProfileManager.java @@ -58,7 +58,7 @@ public abstract class DefaultProjectProfileManager extends ProjectProfileManager private final ApplicationProfileManager myApplicationProfileManager; private final Map myProfiles = new HashMap(); - private final DependencyValidationManager myHolder; + protected final DependencyValidationManager myHolder; private final List myProfilesListener = new ArrayList(); @NonNls private static final String PROJECT_DEFAULT_PROFILE_NAME = "Project Default"; diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java index 0cd2cca6ad66..103560466ea5 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java @@ -371,6 +371,14 @@ public class InspectionProfileImpl extends ProfileEx implements ModifiableModel, return isEditable() ? getName() : myEnabledTool; } + @Override + public void scopesChanged() { + for (ScopeToolState toolState : getAllTools()) { + toolState.scopesChanged(); + } + InspectionProfileManager.getInstance().fireProfileChanged(this); + } + @Override public void setEditable(final String displayName) { myEnabledTool = displayName; diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java index f134679f172b..306d83e9114f 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java @@ -36,6 +36,8 @@ import com.intellij.packageDependencies.DependencyValidationManager; import com.intellij.profile.DefaultProjectProfileManager; import com.intellij.profile.Profile; import com.intellij.psi.PsiElement; +import com.intellij.psi.search.scope.packageSet.NamedScopeManager; +import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.util.ui.UIUtil; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -62,10 +64,13 @@ import java.util.concurrent.ConcurrentHashMap; public class InspectionProjectProfileManager extends DefaultProjectProfileManager implements SeverityProvider, ProjectComponent, PersistentStateComponent { private final Map myName2Profile = new ConcurrentHashMap(); private final SeverityRegistrar mySeverityRegistrar; + private final NamedScopeManager myLocalScopesHolder; private TogglePopupHintsPanel myTogglePopupHintsPanel; + private NamedScopesHolder.ScopeListener myScopeListener; - public InspectionProjectProfileManager(final Project project, InspectionProfileManager inspectionProfileManager, DependencyValidationManager holder) { + public InspectionProjectProfileManager(final Project project, InspectionProfileManager inspectionProfileManager, DependencyValidationManager holder, NamedScopeManager localScopesHolder) { super(project, inspectionProfileManager, holder); + myLocalScopesHolder = localScopesHolder; mySeverityRegistrar = new SeverityRegistrar(); } @@ -194,6 +199,16 @@ public class InspectionProjectProfileManager extends DefaultProjectProfileManage } else { app.executeOnPooledThread(initInspectionProfilesRunnable); } + myScopeListener = new NamedScopesHolder.ScopeListener() { + @Override + public void scopesChanged() { + for (Profile profile : getProfiles()) { + ((InspectionProfile)profile).scopesChanged(); + } + } + }; + myHolder.addScopeListener(myScopeListener); + myLocalScopesHolder.addScopeListener(myScopeListener); } }); } @@ -223,6 +238,8 @@ public class InspectionProjectProfileManager extends DefaultProjectProfileManage app.executeOnPooledThread(cleanupInspectionProfilesRunnable); } HighlightingSettingsPerFile.getInstance(myProject).cleanProfileSettings(); + myHolder.removeScopeListener(myScopeListener); + myLocalScopesHolder.removeScopeListener(myScopeListener); } @Override