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);
+ }
}