summaryrefslogtreecommitdiff
path: root/platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java')
-rw-r--r--platform/analysis-api/src/com/intellij/analysis/AnalysisScope.java33
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) {