From 0b6ad3bc075cdf4726d7a4cba9041fa93b053dc7 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 10 Nov 2016 12:07:23 +0300 Subject: [PATCH] Use target platform configured in facet in module analysis --- .../idea/project/ProjectStructureUtil.java | 46 +++++++++++++------ .../idea/project/TargetPlatformDetector.java | 6 +-- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java index 0c3dde77a9c..70984863632 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java @@ -30,37 +30,57 @@ import com.intellij.psi.util.CachedValuesManager; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.config.KotlinFacetSettings; +import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider; +import org.jetbrains.kotlin.config.TargetPlatformKind; import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil; +import org.jetbrains.kotlin.js.resolve.JsPlatform; +import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; public class ProjectStructureUtil { - private static final Key> IS_KOTLIN_JS_MODULE = Key.create("IS_KOTLIN_JS_MODULE"); + private static final Key> PLATFORM_FOR_MODULE = Key.create("PLATFORM_FOR_MODULE"); private ProjectStructureUtil() { } - public static boolean isJsKotlinModule(@NotNull final Module module) { - CachedValue result = module.getUserData(IS_KOTLIN_JS_MODULE); + /* package */ static TargetPlatform getCachedPlatformForModule(@NotNull final Module module) { + CachedValue result = module.getUserData(PLATFORM_FOR_MODULE); if (result == null) { - result = CachedValuesManager.getManager(module.getProject()).createCachedValue(new CachedValueProvider() { + result = CachedValuesManager.getManager(module.getProject()).createCachedValue(new CachedValueProvider() { @Override - public Result compute() { - return Result.create( - getJSStandardLibrary(module) != null, - ProjectRootModificationTracker.getInstance(module.getProject())); + public Result compute() { + TargetPlatform configuredInFacet = getPlatformConfiguredInFacet(module); + TargetPlatform platform = + configuredInFacet != null ? configuredInFacet : + hasJsStandardLibraryInDependencies(module) ? JsPlatform.INSTANCE : JvmPlatform.INSTANCE; + return Result.create(platform, ProjectRootModificationTracker.getInstance(module.getProject())); } }, false); - module.putUserData(IS_KOTLIN_JS_MODULE, result); + module.putUserData(PLATFORM_FOR_MODULE, result); } return result.getValue(); } @Nullable - private static Library getJSStandardLibrary(final Module module) { - return ApplicationManager.getApplication().runReadAction(new Computable() { + private static TargetPlatform getPlatformConfiguredInFacet(@NotNull Module module) { + KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(module.getProject()).getSettings(module); + TargetPlatformKind kind = settings.getVersionInfo().getTargetPlatformKind(); + if (kind instanceof TargetPlatformKind.Jvm) { + return JvmPlatform.INSTANCE; + } + if (kind instanceof TargetPlatformKind.JavaScript) { + return JsPlatform.INSTANCE; + } + return null; + } + + private static boolean hasJsStandardLibraryInDependencies(@NotNull final Module module) { + return ApplicationManager.getApplication().runReadAction(new Computable() { @Override - public Library compute() { + public Boolean compute() { final Ref jsLibrary = Ref.create(); ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor() { @@ -75,7 +95,7 @@ public class ProjectStructureUtil { } }); - return jsLibrary.get(); + return jsLibrary.get() != null; } }); } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java index 62af9d95c46..ca5fceb72b9 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java @@ -23,7 +23,6 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.js.resolve.JsPlatform; import org.jetbrains.kotlin.psi.KtCodeFragment; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.psi.KtPsiFactoryKt; @@ -66,10 +65,7 @@ public class TargetPlatformDetector { @NotNull public static TargetPlatform getPlatform(@NotNull Module module) { - if (ProjectStructureUtil.isJsKotlinModule(module)) { - return JsPlatform.INSTANCE; - } - return JvmPlatform.INSTANCE; + return ProjectStructureUtil.getCachedPlatformForModule(module); } @NotNull