From 6df469b66f4575df8ec3d1bd12a4ab1e79d41394 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 18 Oct 2013 16:17:52 +0400 Subject: [PATCH] KT-4058 Don't check Java annotation in modules with no Kotlin runtime configured #KT-4058 Fixed --- .../KotlinSignatureInJavaMarkerProvider.java | 12 ++++++++ .../plugin/project/ProjectStructureUtil.java | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/idea/src/org/jetbrains/jet/plugin/ktSignature/KotlinSignatureInJavaMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/ktSignature/KotlinSignatureInJavaMarkerProvider.java index 528f624ab37..a9880956bec 100644 --- a/idea/src/org/jetbrains/jet/plugin/ktSignature/KotlinSignatureInJavaMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/ktSignature/KotlinSignatureInJavaMarkerProvider.java @@ -26,6 +26,8 @@ import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.ActionGroup; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.editor.markup.GutterIconRenderer; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; @@ -49,6 +51,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.plugin.JetIcons; import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManager; import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCache; +import org.jetbrains.jet.plugin.project.ProjectStructureUtil; import org.jetbrains.jet.plugin.project.TargetPlatform; import java.awt.event.MouseEvent; @@ -86,6 +89,15 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { return; } + Module module = ModuleUtilCore.findModuleForPsiElement(elements.get(0)); + if (module == null) { + return; + } + + if (!ProjectStructureUtil.isUsedInKotlinJavaModule(module)) { + return; + } + BindingTrace trace = createDelegatingTrace(project); InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, trace); diff --git a/idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java b/idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java index 33a716ef3e0..01325ab3fcf 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java @@ -47,11 +47,13 @@ import org.jetbrains.jet.plugin.framework.LibraryPresentationProviderUtil; import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; public class ProjectStructureUtil { private static final Key> IS_KOTLIN_JS_MODULE = Key.create("IS_KOTLIN_JS_MODULE"); + private static final Key> IS_DEPEND_ON_JVM_KOTLIN = Key.create("KOTLIN_IS_DEPEND_ON_JVM_KOTLIN"); private ProjectStructureUtil() { } @@ -84,6 +86,34 @@ public class ProjectStructureUtil { return result.getValue(); } + public static boolean isUsedInKotlinJavaModule(@NotNull final Module module) { + CachedValue result = module.getUserData(IS_DEPEND_ON_JVM_KOTLIN); + if (result == null) { + result = CachedValuesManager.getManager(module.getProject()).createCachedValue(new CachedValueProvider() { + @Override + public Result compute() { + boolean usedInKotlinModule = false; + + Set dependentModules = new HashSet(); + ModuleUtilCore.collectModulesDependsOn(module, dependentModules); + + for (Module module : dependentModules) { + if (isJavaKotlinModule(module)) { + usedInKotlinModule = true; + break; + } + } + + return Result.create(usedInKotlinModule, ProjectRootModificationTracker.getInstance(module.getProject())); + } + }, false); + + module.putUserData(IS_DEPEND_ON_JVM_KOTLIN, result); + } + + return result.getValue(); + } + @NotNull public static List getLibLocationForProject(@NotNull Project project) { Module[] modules = ModuleManager.getInstance(project).getModules();