IDEA-121510 JSP: reindex: INRE through JspSpiUtil.isIncludedOrIncludesSomething(): check for JSP includes should be invoked from pass itself, because it involves some index processing.

This commit is contained in:
Dmitry Avdeev
2014-03-25 11:45:17 +04:00
parent bc95c5fc7e
commit 68ba599e31
2 changed files with 18 additions and 19 deletions
@@ -83,7 +83,6 @@ public class PostHighlightingPass extends ProgressableTextEditorHighlightingPass
private RefCountHolder myRefCountHolder;
private final PsiFile myFile;
@Nullable private final Editor myEditor;
private final boolean myUnusedImportEnabled;
@NotNull private final Predicate<PsiElement> myIsEntryPointPredicate;
private final int myStartOffset;
private final int myEndOffset;
@@ -104,12 +103,10 @@ public class PostHighlightingPass extends ProgressableTextEditorHighlightingPass
@Nullable Editor editor,
@NotNull Document document,
@NotNull HighlightInfoProcessor highlightInfoProcessor,
boolean unusedImportEnabled,
@NotNull Predicate<PsiElement> isEntryPoint) {
super(project, document, "Unused symbols", file, editor, file.getTextRange(), true, highlightInfoProcessor);
myFile = file;
myEditor = editor;
myUnusedImportEnabled = unusedImportEnabled;
myIsEntryPointPredicate = isEntryPoint;
myStartOffset = 0;
myEndOffset = file.getTextLength();
@@ -246,7 +243,7 @@ public class PostHighlightingPass extends ProgressableTextEditorHighlightingPass
}
}
}
if (myUnusedImportEnabled && myFile instanceof PsiJavaFile && HighlightingLevelManager.getInstance(myProject).shouldHighlight(myFile)) {
if (isUnusedImportEnabled(unusedImportKey)) {
PsiImportList importList = ((PsiJavaFile)myFile).getImportList();
if (importList != null) {
final PsiImportStatementBase[] imports = importList.getAllImportStatements();
@@ -264,6 +261,12 @@ public class PostHighlightingPass extends ProgressableTextEditorHighlightingPass
return errorFound;
}
protected boolean isUnusedImportEnabled(HighlightDisplayKey unusedImportKey) {
InspectionProfile profile = InspectionProjectProfileManager.getInstance(myProject).getInspectionProfile();
if (!profile.isToolEnabled(unusedImportKey, myFile)) return false;
return myFile instanceof PsiJavaFile && HighlightingLevelManager.getInstance(myProject).shouldHighlight(myFile);
}
@Nullable
private HighlightInfo processIdentifier(@NotNull PsiIdentifier identifier, @NotNull ProgressIndicator progress, @NotNull GlobalUsageHelper helper) {
if (SuppressionUtil.inspectionResultSuppressed(identifier, myUnusedSymbolInspection)) return null;
@@ -23,7 +23,6 @@ import com.intellij.codeInsight.daemon.HighlightDisplayKey;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightVisitorImpl;
import com.intellij.codeInspection.InspectionProfile;
import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection;
import com.intellij.codeInspection.unusedImport.UnusedImportLocalInspection;
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
@@ -84,32 +83,29 @@ public class PostHighlightingPassFactory extends AbstractProjectComponent implem
return create(file, document, null, highlightInfoProcessor);
}
private PostHighlightingPass create(@NotNull PsiFile file,
private PostHighlightingPass create(@NotNull final PsiFile file,
@NotNull Document document, Editor editor,
@NotNull HighlightInfoProcessor highlightInfoProcessor) {
HighlightDisplayKey unusedImportKey = HighlightDisplayKey.find(UnusedImportLocalInspection.SHORT_NAME);
InspectionProfile profile = InspectionProjectProfileManager.getInstance(file.getProject()).getInspectionProfile();
boolean importEnabled = isUnusedImportEnabled(unusedImportKey, file, profile);
final UnusedDeclarationInspection myDeadCodeInspection = (UnusedDeclarationInspection)profile.getUnwrappedTool(UnusedDeclarationInspection.SHORT_NAME, file);
HighlightDisplayKey myDeadCodeKey = HighlightDisplayKey.find(UnusedDeclarationInspection.SHORT_NAME);
final boolean myDeadCodeEnabled = profile.isToolEnabled(myDeadCodeKey, file);
return new PostHighlightingPass(myProject, file, editor, document, highlightInfoProcessor, importEnabled, new Predicate<PsiElement>() {
return new PostHighlightingPass(myProject, file, editor, document, highlightInfoProcessor, new Predicate<PsiElement>() {
@Override
public boolean apply(PsiElement member) {
return !myDeadCodeEnabled || myDeadCodeInspection.isEntryPoint(member);
}
});
}) {
@Override
protected boolean isUnusedImportEnabled(HighlightDisplayKey unusedImportKey) {
return super.isUnusedImportEnabled(unusedImportKey) && PostHighlightingPassFactory.isUnusedImportEnabled(file);
}
};
}
private static boolean isUnusedImportEnabled(HighlightDisplayKey unusedImportKey, @NotNull PsiFile file, InspectionProfile profile) {
boolean unusedImportEnabled = profile.isToolEnabled(unusedImportKey, file);
if (unusedImportEnabled && JspPsiUtil.isInJspFile(file)) {
final JspFile jspFile = JspPsiUtil.getJspFile(file);
if (jspFile != null) {
unusedImportEnabled = !JspSpiUtil.isIncludedOrIncludesSomething(jspFile);
}
}
return unusedImportEnabled;
private static boolean isUnusedImportEnabled(PsiElement file) {
final JspFile jspFile = JspPsiUtil.getJspFile(file);
return jspFile == null || !JspSpiUtil.isIncludedOrIncludesSomething(jspFile);
}
}