summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2014-09-05 20:11:06 -0700
committerTor Norbye <tnorbye@google.com>2014-09-08 18:48:01 +0000
commitc810bbf46e7246636afe1d18947a460cedc5d24d (patch)
tree23752441df6fcaa7ca934c1353b15af595a85db0
parentfb5a02906f644d044eb0286bf27d413ba0e05216 (diff)
downloadidea-c810bbf46e7246636afe1d18947a460cedc5d24d.tar.gz
Don't run inspections in extracted AAR folders
Most "outputs" (such as build/intermediates/) are marked as generated source roots, which means IntelliJ won't scan those folders for warnings. However, AAR libraries are extracted into special build folders (currently build/intermediates/exploded-aar) which are *not* marked as generated; that's necessary such that those folders are scanned (for indexing purposes), handled as potential go-to-declaration targets (since resource files there can contain for example themes extended in the user's application). Therefore, by default, IntelliJ will analyze all the files in the exploded AAR folders. When you have large libraries like appcompat or play services, this not only takes a lot of extra time to analyze. You also end up with a lot of errors in files you can't edit. For example, with appcompat, you end up with over 700 spelling mistake warnings, and with play services, you end up with over a hundred unused namespace warnings, and over a hundred tag has no children warnings! Therefore, this CL tweaks the batch analysis runner which iterates over PSI files to skip files that are found to be within an AAR folder. This removes all the false positives and speeds up code analysis quite significantly! Change-Id: I3dfdd663689a9d75de0318b03e5c4d8c3c6c30f6 (cherry picked from commit 771f728d65f218292649115c1130de00b8c37ec4)
-rw-r--r--platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java
index 695c2a72d200..9bbaa278d207 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java
@@ -310,6 +310,21 @@ public class GlobalInspectionContextImpl extends GlobalInspectionContextBase imp
});
}
+ // Android Studio: Is the given file a file we should ignore during batch inspections?
+ private static final String EXPLODED_AAR = "exploded-aar";
+ private static boolean isIgnoredFile(@NotNull PsiFile psiFile) {
+ VirtualFile file = psiFile.getVirtualFile();
+ while (file != null) {
+ if (EXPLODED_AAR.equals(file.getName())) {
+ return true;
+ } else {
+ file = file.getParent();
+ }
+ }
+
+ return false;
+ }
+
@Override
protected void runTools(@NotNull AnalysisScope scope, boolean runGlobalToolsOnly) {
final InspectionManagerEx inspectionManager = (InspectionManagerEx)InspectionManager.getInstance(getProject());
@@ -343,6 +358,33 @@ public class GlobalInspectionContextImpl extends GlobalInspectionContextBase imp
throw new ProcessCanceledException();
}
+ // Android Studio tweak:
+ // Most "outputs" (such as build/intermediates/) are marked as generated
+ // source roots, which means IntelliJ won't scan those folders for
+ // warnings.
+ //
+ // However, AAR libraries are extracted into special build folders
+ // (currently build/intermediates/exploded-aar) which are *not* marked as
+ // generated; that's necessary such that those folders are scanned (for
+ // indexing purposes), handled as potential go-to-declaration targets
+ // (since resource files there can contain for example themes extended in
+ // the user's application). Therefore, by default, IntelliJ will analyze
+ // all the files in the exploded AAR folders. When you have large
+ // libraries like appcompat or play services, this not only takes a lot
+ // of extra time to analyze. You also end up with a lot of errors in
+ // files you can't edit. For example, with appcompat, you end up with
+ // over 700 spelling mistake warnings, and with play services, you end up
+ // with over a hundred unused namespace warnings, and over a hundred tag
+ // has no children warnings!
+ //
+ // Therefore, in the below this CL tweaks the batch analysis runner which iterates
+ // over PSI files to skip files that are found to be within an AAR
+ // folder. This removes all the false positives and speeds up code
+ // analysis quite significantly!
+ if (isIgnoredFile(file)) {
+ return;
+ }
+
if (LOG.isDebugEnabled()) {
LOG.debug("Running local inspections on " + virtualFile.getPath());
}