skip batch inspections on the library sources

This commit is contained in:
anna
2012-04-12 13:17:43 +02:00
parent faa005bfb9
commit 113cc924dd
4 changed files with 31 additions and 15 deletions

View File

@@ -21,7 +21,6 @@
package com.intellij.analysis;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
@@ -111,17 +110,6 @@ public class JavaAnalysisScope extends AnalysisScope {
super.initFilesSet();
}
@Override
protected boolean shouldHighlightFile(PsiFile file) {
final boolean shouldHighlight = super.shouldHighlightFile(file);
if (!shouldHighlight) return false;
if (file.getFileType() == StdFileTypes.JAVA) {
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null && ProjectRootManager.getInstance(file.getProject()).getFileIndex().isInLibrarySource(virtualFile)) return false;
}
return shouldHighlight;
}
@Override
protected void accept(@NotNull final PsiElementVisitor visitor, final boolean needReadAction) {
if (myElement instanceof PsiPackage) {

View File

@@ -17,6 +17,8 @@ package com.intellij.codeInsight.daemon;
import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
@@ -26,4 +28,18 @@ public class JavaProblemHighlightFilter extends ProblemHighlightFilter {
public boolean shouldHighlight(@NotNull PsiFile psiFile) {
return psiFile.getFileType() != StdFileTypes.JAVA || !CollectHighlightsUtil.isOutsideSourceRoot(psiFile);
}
@Override
public boolean shouldProcessInBatch(@NotNull PsiFile psiFile) {
final boolean shouldHighlight = shouldHighlightFile(psiFile);
if (shouldHighlight) {
if (psiFile.getFileType() == StdFileTypes.JAVA) {
final VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile != null && ProjectRootManager.getInstance(psiFile.getProject()).getFileIndex().isInLibrarySource(virtualFile)) {
return false;
}
}
}
return shouldHighlight;
}
}

View File

@@ -368,8 +368,8 @@ public class AnalysisScope {
return indicator == null || !indicator.isCanceled();
}
protected boolean shouldHighlightFile(PsiFile file) {
return ProblemHighlightFilter.shouldHighlightFile(file);
protected static boolean shouldHighlightFile(PsiFile file) {
return ProblemHighlightFilter.shouldProcessFileInBatch(file);
}
public boolean containsModule(Module module) {

View File

@@ -35,12 +35,24 @@ public abstract class ProblemHighlightFilter {
*/
public abstract boolean shouldHighlight(@NotNull PsiFile psiFile);
public boolean shouldProcessInBatch(@NotNull PsiFile psiFile) {
return shouldHighlight(psiFile);
}
public static boolean shouldHighlightFile(@Nullable final PsiFile psiFile) {
return shouldProcess(psiFile, true);
}
public static boolean shouldProcessFileInBatch(@Nullable final PsiFile psiFile) {
return shouldProcess(psiFile, false);
}
private static boolean shouldProcess(PsiFile psiFile, boolean onTheFly) {
if (psiFile == null) return true;
final ProblemHighlightFilter[] filters = EP_NAME.getExtensions();
for (ProblemHighlightFilter filter : filters) {
if (!filter.shouldHighlight(psiFile)) return false;
if (onTheFly ? !filter.shouldHighlight(psiFile) : !filter.shouldProcessInBatch(psiFile)) return false;
}
return true;