diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 41552aaae02..c0fb60d7972 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -132,14 +132,20 @@ class KotlinFacetSettings { } } -fun TargetPlatformKind<*>.createCompilerArguments(): CommonCompilerArguments { - return when (this) { - is TargetPlatformKind.Jvm -> { - K2JVMCompilerArguments().apply { jvmTarget = this@createCompilerArguments.version.description } - } +fun TargetPlatformKind<*>.createCompilerArguments(init: CommonCompilerArguments.() -> Unit = {}): CommonCompilerArguments { + val arguments = when (this) { + is TargetPlatformKind.Jvm -> K2JVMCompilerArguments() is TargetPlatformKind.JavaScript -> K2JSCompilerArguments() is TargetPlatformKind.Common -> K2MetadataCompilerArguments() } + + arguments.init() + + if (arguments is K2JVMCompilerArguments) { + arguments.jvmTarget = this@createCompilerArguments.version.description + } + + return arguments } interface KotlinFacetSettingsProvider { diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index c4428c74137..43d9634237e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -65,7 +65,7 @@ fun KotlinFacetSettings.initializeIfNeeded( if (compilerArguments == null) { val targetPlatformKind = platformKind ?: getDefaultTargetPlatform(module, rootModel) - compilerArguments = targetPlatformKind.createCompilerArguments().apply { + compilerArguments = targetPlatformKind.createCompilerArguments { targetPlatformKind.getPlatformCompilerArgumentsByProject(module.project)?.let { mergeBeans(it, this) } mergeBeans(commonArguments, this) } diff --git a/idea/testData/configuration/jvm6InProjectJvm8InModule/lib/kotlin-runtme.jar b/idea/testData/configuration/jvm6InProjectJvm8InModule/lib/kotlin-runtme.jar new file mode 100644 index 00000000000..24854eff673 Binary files /dev/null and b/idea/testData/configuration/jvm6InProjectJvm8InModule/lib/kotlin-runtme.jar differ diff --git a/idea/testData/configuration/jvm6InProjectJvm8InModule/module.iml b/idea/testData/configuration/jvm6InProjectJvm8InModule/module.iml new file mode 100644 index 00000000000..4a3ded12725 --- /dev/null +++ b/idea/testData/configuration/jvm6InProjectJvm8InModule/module.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/jvm6InProjectJvm8InModule/projectFile.ipr b/idea/testData/configuration/jvm6InProjectJvm8InModule/projectFile.ipr new file mode 100644 index 00000000000..65454355d27 --- /dev/null +++ b/idea/testData/configuration/jvm6InProjectJvm8InModule/projectFile.ipr @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/jvm6InProjectJvm8InModule/src/foo.kt b/idea/testData/configuration/jvm6InProjectJvm8InModule/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/configuration/jvm8InProjectJvm6InModule/lib/kotlin-runtme.jar b/idea/testData/configuration/jvm8InProjectJvm6InModule/lib/kotlin-runtme.jar new file mode 100644 index 00000000000..24854eff673 Binary files /dev/null and b/idea/testData/configuration/jvm8InProjectJvm6InModule/lib/kotlin-runtme.jar differ diff --git a/idea/testData/configuration/jvm8InProjectJvm6InModule/module.iml b/idea/testData/configuration/jvm8InProjectJvm6InModule/module.iml new file mode 100644 index 00000000000..4a3ded12725 --- /dev/null +++ b/idea/testData/configuration/jvm8InProjectJvm6InModule/module.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/jvm8InProjectJvm6InModule/projectFile.ipr b/idea/testData/configuration/jvm8InProjectJvm6InModule/projectFile.ipr new file mode 100644 index 00000000000..c90cd47cb88 --- /dev/null +++ b/idea/testData/configuration/jvm8InProjectJvm6InModule/projectFile.ipr @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/jvm8InProjectJvm6InModule/src/foo.kt b/idea/testData/configuration/jvm8InProjectJvm6InModule/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java index 7e2ffa216e0..f7f9b6e105c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java @@ -17,12 +17,15 @@ package org.jetbrains.kotlin.idea.configuration; import com.intellij.framework.library.LibraryVersionProperties; +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments; import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments; import org.jetbrains.kotlin.config.*; +import org.jetbrains.kotlin.idea.facet.FacetUtilsKt; +import org.jetbrains.kotlin.idea.facet.KotlinFacet; import org.jetbrains.kotlin.idea.framework.JSLibraryStdPresentationProvider; import org.jetbrains.kotlin.idea.framework.KotlinLibraryUtilKt; import org.jetbrains.kotlin.idea.project.PlatformKt; @@ -211,4 +214,34 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { assertEquals("amd", arguments.moduleKind); assertEquals("-version -meta-info", settings.getCompilerSettings().additionalArguments); } + + private void configureFacetAndCheckJvm(JvmTarget jvmTarget) { + IdeModifiableModelsProviderImpl modelsProvider = new IdeModifiableModelsProviderImpl(getProject()); + try { + KotlinFacet facet = FacetUtilsKt.getOrCreateFacet(getModule(), modelsProvider, false); + TargetPlatformKind.Jvm platformKind = TargetPlatformKind.Jvm.Companion.get(jvmTarget); + FacetUtilsKt.configureFacet( + facet, + "1.1", + LanguageFeature.State.ENABLED, + platformKind, + modelsProvider + ); + assertEquals(platformKind, facet.getConfiguration().getSettings().getTargetPlatformKind()); + assertEquals(jvmTarget.getDescription(), ((K2JVMCompilerArguments) facet.getConfiguration().getSettings().getCompilerArguments()).jvmTarget); + } + finally { + modelsProvider.dispose(); + } + } + + @SuppressWarnings("ConstantConditions") + public void testJvm8InProjectJvm6InModule() { + configureFacetAndCheckJvm(JvmTarget.JVM_1_6); + } + + @SuppressWarnings("ConstantConditions") + public void testJvm6InProjectJvm8InModule() { + configureFacetAndCheckJvm(JvmTarget.JVM_1_8); + } }