diff options
Diffstat (limited to 'platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java')
-rw-r--r-- | platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java b/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java index 893a7f3d30da..f7c4ca1bf274 100644 --- a/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java +++ b/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -80,8 +80,8 @@ public class AnalysisScope { private boolean mySearchInLibraries = false; @Type protected int myType; - private Set<VirtualFile> myVFiles; - protected Set<VirtualFile> myFilesSet; + private final Set<VirtualFile> myVFiles; // initial files and directories the scope is configured on + protected Set<VirtualFile> myFilesSet; // set of files (not directories) this scope consists of. calculated in initFilesSet() protected boolean myIncludeTestSource = true; @@ -92,6 +92,7 @@ public class AnalysisScope { myModule = null; myScope = null; myType = PROJECT; + myVFiles = null; } public AnalysisScope(@NotNull Module module) { @@ -101,6 +102,7 @@ public class AnalysisScope { myScope = null; myModule = module; myType = MODULE; + myVFiles = null; } public AnalysisScope(@NotNull Module[] modules) { @@ -110,6 +112,7 @@ public class AnalysisScope { myElement = null; myScope = null; myType = MODULES; + myVFiles = null; } public AnalysisScope(@NotNull PsiDirectory psiDirectory) { @@ -119,6 +122,7 @@ public class AnalysisScope { myScope = null; myElement = psiDirectory; myType = DIRECTORY; + myVFiles = null; } public AnalysisScope(@NotNull PsiFile psiFile) { @@ -128,6 +132,7 @@ public class AnalysisScope { myModules = null; myScope = null; myType = FILE; + myVFiles = null; } public AnalysisScope(@NotNull SearchScope scope, @NotNull Project project) { @@ -138,6 +143,7 @@ public class AnalysisScope { myScope = scope; myType = CUSTOM; mySearchInLibraries = scope instanceof GlobalSearchScope && ((GlobalSearchScope)scope).isSearchInLibraries(); + myVFiles = null; } public AnalysisScope(@NotNull Project project, @NotNull Collection<VirtualFile> virtualFiles) { @@ -212,10 +218,11 @@ public class AnalysisScope { } public boolean contains(@NotNull PsiElement psiElement) { - return contains(psiElement.getContainingFile().getVirtualFile()); + VirtualFile file = psiElement.getContainingFile().getVirtualFile(); + return file != null && contains(file); } - public boolean contains(VirtualFile file) { + public boolean contains(@NotNull VirtualFile file) { if (myFilesSet == null) { if (myType == CUSTOM) { // optimization @@ -289,6 +296,7 @@ public class AnalysisScope { @Override public Boolean compute() { if (!myIncludeTestSource && projectFileIndex.isInTestSourceContent(fileOrDir)) return false; + if (isInGeneratedSources(fileOrDir, myProject)) return false; return ((GlobalSearchScope)myScope).contains(fileOrDir); } }).booleanValue(); @@ -424,7 +432,7 @@ public class AnalysisScope { return indicator == null || !indicator.isCanceled(); } - protected static boolean shouldHighlightFile(PsiFile file) { + protected static boolean shouldHighlightFile(@NotNull PsiFile file) { return ProblemHighlightFilter.shouldProcessFileInBatch(file); } @@ -451,11 +459,14 @@ public class AnalysisScope { final Project project = dir.getProject(); final PsiManager psiManager = PsiManager.getInstance(project); final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex(); + //we should analyze generated source files only if the action is explicitly invoked for a directory located under generated roots + final boolean processGeneratedFiles = isInGeneratedSources(dir.getVirtualFile(), project); VfsUtilCore.iterateChildrenRecursively(dir.getVirtualFile(), VirtualFileFilter.ALL, new ContentIterator() { @Override @SuppressWarnings({"SimplifiableIfStatement"}) public boolean processFile(@NotNull final VirtualFile fileOrDir) { if (!myIncludeTestSource && index.isInTestSourceContent(fileOrDir)) return true; + if (!processGeneratedFiles && isInGeneratedSources(fileOrDir, project)) return true; if (!fileOrDir.isDirectory()) { return AnalysisScope.processFile(fileOrDir, visitor, psiManager, needReadAction); } @@ -481,6 +492,7 @@ public class AnalysisScope { return myType; } + @NotNull public String getDisplayName() { switch (myType) { case CUSTOM: @@ -515,12 +527,14 @@ public class AnalysisScope { return ""; } + @NotNull private static String getPresentableUrl(@NotNull final PsiFileSystemItem element) { final VirtualFile virtualFile = element.getVirtualFile(); assert virtualFile != null : element; return virtualFile.getPresentableUrl(); } + @NotNull public String getShortenName(){ switch (myType) { case CUSTOM: @@ -589,9 +603,7 @@ public class AnalysisScope { } public void invalidate(){ - if (myType != VIRTUAL_FILES) { - myFilesSet = null; - } else { + if (myType == VIRTUAL_FILES) { for (Iterator<VirtualFile> i = myVFiles.iterator(); i.hasNext();) { final VirtualFile virtualFile = i.next(); if (virtualFile == null || !virtualFile.isValid()) { @@ -599,6 +611,9 @@ public class AnalysisScope { } } } + else { + myFilesSet = null; + } } public boolean containsSources(boolean isTest) { |