diff --git a/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java b/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java index 9caa71d2209..2595c83b7e9 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java @@ -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; + } } diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java index e4de5156af9..dd7d07a7090 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java @@ -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()); diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java b/idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java index dc454d24d94..5978ae05bd9 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java @@ -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; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java b/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java index 8d8fc0a2e69..db5a4b2d354 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java @@ -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; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index 4759a305af7..abc3c4f667f 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -363,7 +363,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider { public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection 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; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java index 77c0bf0138b..20358e7293d 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java @@ -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; } diff --git a/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java b/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java index 4a12628dc5e..195939f8fae 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java @@ -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() { @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; } diff --git a/idea/src/org/jetbrains/jet/plugin/search/KotlinReferencesSearcher.java b/idea/src/org/jetbrains/jet/plugin/search/KotlinReferencesSearcher.java index b9d45a65dea..fa8cebbf7e2 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/KotlinReferencesSearcher.java +++ b/idea/src/org/jetbrains/jet/plugin/search/KotlinReferencesSearcher.java @@ -51,7 +51,7 @@ public class KotlinReferencesSearcher extends QueryExecutorBase consumer) { PsiElement element = queryParameters.getElementToSearch(); - if (!JetPluginUtil.isInSourceContent(element)) { + if (!JetPluginUtil.isInSourceContent(element) || JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) { return; } if (element instanceof JetClass) { diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java b/idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java index 802182c1a8e..0cc0e25c97e 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java +++ b/idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java @@ -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)); } diff --git a/idea/src/org/jetbrains/jet/plugin/versions/KotlinLibrariesNotificationProvider.java b/idea/src/org/jetbrains/jet/plugin/versions/KotlinLibrariesNotificationProvider.java index d8eeaebbcd7..16053d8101d 100644 --- a/idea/src/org/jetbrains/jet/plugin/versions/KotlinLibrariesNotificationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/versions/KotlinLibrariesNotificationProvider.java @@ -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();