Disable analysis for kotlin files that aren't in 'kotlin' folder (for Gradle-Android project)

This commit is contained in:
Natalia.Ukhorskaya
2013-08-07 13:10:53 +04:00
parent 8a4b01d9c6
commit 5919968dc5
10 changed files with 70 additions and 20 deletions
@@ -17,11 +17,18 @@
package org.jetbrains.jet.plugin; package org.jetbrains.jet.plugin;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager; import com.intellij.ide.plugins.PluginManager;
import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
@@ -100,4 +107,42 @@ public class JetPluginUtil {
assert plugin != null : "How can it be? Kotlin plugin is available, but its component is running. Complete nonsense."; assert plugin != null : "How can it be? Kotlin plugin is available, but its component is running. Complete nonsense.";
return plugin.getVersion(); return plugin.getVersion();
} }
public static boolean isKtFileInGradleProjectInWrongFolder(@NotNull PsiElement element) {
PsiFile containingFile = element.getContainingFile();
if (containingFile == null) {
return false;
}
VirtualFile virtualFile = containingFile.getVirtualFile();
if (virtualFile == null) {
return false;
}
return isKtFileInGradleProjectInWrongFolder(virtualFile, element.getProject());
}
public static boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project) {
Module module = ModuleUtilCore.findModuleForFile(virtualFile, project);
if (module == null) return false;
if (!isAndroidGradleModule(module)) {
return false;
}
VirtualFile sourceRootForFile = ProjectRootManager.getInstance(project).getFileIndex().getSourceRootForFile(virtualFile);
if (sourceRootForFile != null) {
return !sourceRootForFile.getName().equals("kotlin");
}
return false;
}
public static boolean isAndroidGradleModule(@NotNull Module module) {
// We don't want to depend on the Android-Gradle plugin
// See com.android.tools.idea.gradle.util.Projects.isGradleProject()
for (Facet facet : FacetManager.getInstance(module).getAllFacets()) {
if (facet.getName().equals("Android-Gradle")) {
return true;
}
}
return false;
}
} }
@@ -57,6 +57,7 @@ public class KotlinTypeHierarchyProvider extends JavaTypeHierarchyProvider {
if (!(file instanceof JetFile)) return null; if (!(file instanceof JetFile)) return null;
if (!JetPluginUtil.isInSourceContent(file)) return null; if (!JetPluginUtil.isInSourceContent(file)) return null;
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null;
PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted()); PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted());
@@ -40,7 +40,9 @@ public class DebugInfoAnnotator implements Annotator {
@Override @Override
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) { public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
if (!isDebugInfoEnabled() || !JetPsiChecker.isErrorReportingEnabled() || !JetPluginUtil.isInSourceContent(element)) { if (!isDebugInfoEnabled() || !JetPsiChecker.isErrorReportingEnabled() ||
!JetPluginUtil.isInSourceContent(element) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
return; return;
} }
@@ -88,7 +88,9 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
Editor editor = e.getEditor(); Editor editor = e.getEditor();
PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument()); PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument());
if (psiFile == null || psiFile.getLanguage() != JetLanguage.INSTANCE || !JetPluginUtil.isInSourceContent(psiFile)) { if (psiFile == null || psiFile.getLanguage() != JetLanguage.INSTANCE ||
!JetPluginUtil.isInSourceContent(psiFile) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(psiFile)) {
return; return;
} }
@@ -363,7 +363,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) { public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
if (elements.isEmpty() || if (elements.isEmpty() ||
DumbService.getInstance(elements.get(0).getProject()).isDumb() || DumbService.getInstance(elements.get(0).getProject()).isDumb() ||
!JetPluginUtil.isInSourceContent(elements.get(0))) { !JetPluginUtil.isInSourceContent(elements.get(0)) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(elements.get(0))) {
return; return;
} }
@@ -100,7 +100,8 @@ public class JetPsiChecker implements Annotator {
@Override @Override
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
if (!JetPluginUtil.isInSourceContent(element)) { if (!JetPluginUtil.isInSourceContent(element) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
return; return;
} }
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider; import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.JetPluginUtil;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@@ -69,6 +70,7 @@ public class PluginJetFilesProvider extends JetFilesProvider {
public boolean processFile(VirtualFile file) { public boolean processFile(VirtualFile file) {
if (file.isDirectory()) return true; if (file.isDirectory()) return true;
if (!index.isInSourceContent(file) && !index.isInTestSourceContent(file)) return true; if (!index.isInSourceContent(file) && !index.isInTestSourceContent(file)) return true;
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) return true;
FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file); FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file);
if (fileType != JetFileType.INSTANCE) return true; if (fileType != JetFileType.INSTANCE) return true;
@@ -102,7 +104,9 @@ public class PluginJetFilesProvider extends JetFilesProvider {
new com.google.common.base.Function<VirtualFile, JetFile>() { new com.google.common.base.Function<VirtualFile, JetFile>() {
@Override @Override
public JetFile apply(@Nullable VirtualFile file) { public JetFile apply(@Nullable VirtualFile file) {
if (file == null || !ProjectFileIndex.SERVICE.getInstance(project).isInSourceContent(file)) { if (file == null ||
!ProjectFileIndex.SERVICE.getInstance(project).isInSourceContent(file) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) {
return null; return null;
} }
@@ -51,7 +51,7 @@ public class KotlinReferencesSearcher extends QueryExecutorBase<PsiReference, Re
@Override @Override
public void processQuery(@NotNull ReferencesSearch.SearchParameters queryParameters, @NotNull Processor<PsiReference> consumer) { public void processQuery(@NotNull ReferencesSearch.SearchParameters queryParameters, @NotNull Processor<PsiReference> consumer) {
PsiElement element = queryParameters.getElementToSearch(); PsiElement element = queryParameters.getElementToSearch();
if (!JetPluginUtil.isInSourceContent(element)) { if (!JetPluginUtil.isInSourceContent(element) || JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
return; return;
} }
if (element instanceof JetClass) { if (element instanceof JetClass) {
@@ -24,6 +24,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.JetPluginUtil;
public class JetSourceFilterScope extends DelegatingGlobalSearchScope { public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
public static JetSourceFilterScope kotlinSourcesAndLibraries(@NotNull GlobalSearchScope delegate) { public static JetSourceFilterScope kotlinSourcesAndLibraries(@NotNull GlobalSearchScope delegate) {
@@ -53,6 +54,10 @@ public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
return index.isInLibraryClasses(file); return index.isInLibraryClasses(file);
} }
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, getProject())) {
return false;
}
return file.getFileType().equals(JetFileType.INSTANCE) && return file.getFileType().equals(JetFileType.INSTANCE) &&
(index.isInSourceContent(file) || includeLibraries && index.isInLibrarySource(file)); (index.isInSourceContent(file) || includeLibraries && index.isInLibrarySource(file));
} }
@@ -17,8 +17,6 @@
package org.jetbrains.jet.plugin.versions; package org.jetbrains.jet.plugin.versions;
import com.intellij.ProjectTopics; import com.intellij.ProjectTopics;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.framework.addSupport.impl.AddSupportForSingleFrameworkDialog; import com.intellij.framework.addSupport.impl.AddSupportForSingleFrameworkDialog;
import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.compiler.CompilerManager;
@@ -41,6 +39,7 @@ import com.intellij.util.messages.MessageBusConnection;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.JetPluginUtil;
import org.jetbrains.jet.plugin.framework.JSFrameworkSupportProvider; import org.jetbrains.jet.plugin.framework.JSFrameworkSupportProvider;
import org.jetbrains.jet.plugin.framework.JavaFrameworkSupportProvider; import org.jetbrains.jet.plugin.framework.JavaFrameworkSupportProvider;
import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector; import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector;
@@ -87,6 +86,7 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
if (file.getFileType() != JetFileType.INSTANCE) return null; if (file.getFileType() != JetFileType.INSTANCE) return null;
if (!ProjectFileIndex.SERVICE.getInstance(myProject).isInSourceContent(file)) return null; if (!ProjectFileIndex.SERVICE.getInstance(myProject).isInSourceContent(file)) return null;
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, myProject)) return null;
if (CompilerManager.getInstance(myProject).isExcludedFromCompilation(file)) return null; if (CompilerManager.getInstance(myProject).isExcludedFromCompilation(file)) return null;
Module module = ModuleUtilCore.findModuleForFile(file, myProject); Module module = ModuleUtilCore.findModuleForFile(file, myProject);
@@ -109,7 +109,7 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
} }
public static boolean isModuleAlreadyConfigured(Module module) { public static boolean isModuleAlreadyConfigured(Module module) {
return isMavenModule(module) || isAndroidGradleModule(module) || KotlinFrameworkDetector.isJsKotlinModule(module) || KotlinFrameworkDetector.isJavaKotlinModule(module); return isMavenModule(module) || JetPluginUtil.isAndroidGradleModule(module) || KotlinFrameworkDetector.isJsKotlinModule(module) || KotlinFrameworkDetector.isJavaKotlinModule(module);
} }
private static boolean isMavenModule(@NotNull Module module) { private static boolean isMavenModule(@NotNull Module module) {
@@ -118,17 +118,6 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
return "true".equals(module.getOptionValue("org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule")); return "true".equals(module.getOptionValue("org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule"));
} }
private static boolean isAndroidGradleModule(@NotNull Module module) {
// We don't want to depend on the Android-Gradle plugin
// See com.android.tools.idea.gradle.util.Projects.isGradleProject()
for (Facet facet : FacetManager.getInstance(module).getAllFacets()) {
if (facet.getName().equals("Android-Gradle")) {
return true;
}
}
return false;
}
private static EditorNotificationPanel createFrameworkConfigurationNotificationPanel(final Module module) { private static EditorNotificationPanel createFrameworkConfigurationNotificationPanel(final Module module) {
EditorNotificationPanel answer = new EditorNotificationPanel(); EditorNotificationPanel answer = new EditorNotificationPanel();