forget inspection scope caches on scopes change, restart daemon, etc (IDEA-101489)

This commit is contained in:
anna
2013-02-21 12:25:52 +01:00
parent 7a5fa9d451
commit fc703d6210
5 changed files with 33 additions and 2 deletions
@@ -63,4 +63,6 @@ public interface InspectionProfile extends Profile {
@NotNull
String getDisplayName();
void scopesChanged();
}
@@ -149,4 +149,8 @@ public class ScopeToolState {
}
return false;
}
public void scopesChanged() {
myScope = null;
}
}
@@ -58,7 +58,7 @@ public abstract class DefaultProjectProfileManager extends ProjectProfileManager
private final ApplicationProfileManager myApplicationProfileManager;
private final Map<String, Profile> myProfiles = new HashMap<String, Profile>();
private final DependencyValidationManager myHolder;
protected final DependencyValidationManager myHolder;
private final List<ProfileChangeAdapter> myProfilesListener = new ArrayList<ProfileChangeAdapter>();
@NonNls private static final String PROJECT_DEFAULT_PROFILE_NAME = "Project Default";
@@ -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;
@@ -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<Element> {
private final Map<String, InspectionProfileWrapper> myName2Profile = new ConcurrentHashMap<String, InspectionProfileWrapper>();
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