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;
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.PluginManager;
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.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
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.";
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 (!JetPluginUtil.isInSourceContent(file)) return null;
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null;
PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted());
@@ -40,7 +40,9 @@ public class DebugInfoAnnotator implements Annotator {
@Override
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;
}
@@ -88,7 +88,9 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
Editor editor = e.getEditor();
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;
}
@@ -363,7 +363,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
if (elements.isEmpty() ||
DumbService.getInstance(elements.get(0).getProject()).isDumb() ||
!JetPluginUtil.isInSourceContent(elements.get(0))) {
!JetPluginUtil.isInSourceContent(elements.get(0)) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(elements.get(0))) {
return;
}
@@ -100,7 +100,8 @@ public class JetPsiChecker implements Annotator {
@Override
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
if (!JetPluginUtil.isInSourceContent(element)) {
if (!JetPluginUtil.isInSourceContent(element) ||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
return;
}
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.JetPluginUtil;
import java.util.Collection;
import java.util.HashSet;
@@ -69,6 +70,7 @@ public class PluginJetFilesProvider extends JetFilesProvider {
public boolean processFile(VirtualFile file) {
if (file.isDirectory()) return true;
if (!index.isInSourceContent(file) && !index.isInTestSourceContent(file)) return true;
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) return true;
FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file);
if (fileType != JetFileType.INSTANCE) return true;
@@ -102,7 +104,9 @@ public class PluginJetFilesProvider extends JetFilesProvider {
new com.google.common.base.Function<VirtualFile, JetFile>() {
@Override
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;
}
@@ -51,7 +51,7 @@ public class KotlinReferencesSearcher extends QueryExecutorBase<PsiReference, Re
@Override
public void processQuery(@NotNull ReferencesSearch.SearchParameters queryParameters, @NotNull Processor<PsiReference> consumer) {
PsiElement element = queryParameters.getElementToSearch();
if (!JetPluginUtil.isInSourceContent(element)) {
if (!JetPluginUtil.isInSourceContent(element) || JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
return;
}
if (element instanceof JetClass) {
@@ -24,6 +24,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.JetPluginUtil;
public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
public static JetSourceFilterScope kotlinSourcesAndLibraries(@NotNull GlobalSearchScope delegate) {
@@ -53,6 +54,10 @@ public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
return index.isInLibraryClasses(file);
}
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, getProject())) {
return false;
}
return file.getFileType().equals(JetFileType.INSTANCE) &&
(index.isInSourceContent(file) || includeLibraries && index.isInLibrarySource(file));
}
@@ -17,8 +17,6 @@
package org.jetbrains.jet.plugin.versions;
import com.intellij.ProjectTopics;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.framework.addSupport.impl.AddSupportForSingleFrameworkDialog;
import com.intellij.openapi.application.ApplicationManager;
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.Nullable;
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.JavaFrameworkSupportProvider;
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 (!ProjectFileIndex.SERVICE.getInstance(myProject).isInSourceContent(file)) return null;
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, myProject)) return null;
if (CompilerManager.getInstance(myProject).isExcludedFromCompilation(file)) return null;
Module module = ModuleUtilCore.findModuleForFile(file, myProject);
@@ -109,7 +109,7 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
}
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) {
@@ -118,17 +118,6 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
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) {
EditorNotificationPanel answer = new EditorNotificationPanel();