KT-4058 Don't check Java annotation in modules with no Kotlin runtime configured

#KT-4058 Fixed
This commit is contained in:
Nikolay Krasko
2013-10-18 16:17:52 +04:00
parent 04115ab8bf
commit 6df469b66f
2 changed files with 42 additions and 0 deletions
@@ -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);
@@ -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<CachedValue<Boolean>> IS_KOTLIN_JS_MODULE = Key.create("IS_KOTLIN_JS_MODULE");
private static final Key<CachedValue<Boolean>> 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<Boolean> result = module.getUserData(IS_DEPEND_ON_JVM_KOTLIN);
if (result == null) {
result = CachedValuesManager.getManager(module.getProject()).createCachedValue(new CachedValueProvider<Boolean>() {
@Override
public Result<Boolean> compute() {
boolean usedInKotlinModule = false;
Set<Module> dependentModules = new HashSet<Module>();
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<String> getLibLocationForProject(@NotNull Project project) {
Module[] modules = ModuleManager.getInstance(project).getModules();