diff --git a/idea/src/META-INF/gradle.xml b/idea/src/META-INF/gradle.xml
index c8e5a584701..a5ab6928978 100644
--- a/idea/src/META-INF/gradle.xml
+++ b/idea/src/META-INF/gradle.xml
@@ -41,6 +41,7 @@
+
diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt
index 5dbe2055f85..fb7cb1afaed 100644
--- a/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt
@@ -92,7 +92,9 @@ class GradleKotlinJavaFrameworkSupportProvider : GradleKotlinFrameworkSupportPro
}
class GradleKotlinJSFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)") {
- override fun getPluginDefinition() = "apply plugin: 'kotlin2js'"
+ override fun getPluginDefinition(): String {
+ return KotlinJsGradleModuleConfigurator.APPLY_KOTLIN_JS
+ }
override fun getRuntimeLibrary(rootModel: ModifiableRootModel) =
KotlinWithGradleConfigurator.getDependencySnippet(MAVEN_JS_STDLIB_ID)
diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java
index 49bd6a4c65d..35278e47474 100644
--- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java
+++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.java
@@ -16,12 +16,9 @@
package org.jetbrains.kotlin.idea.configuration;
-import com.intellij.openapi.module.Module;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.kotlin.idea.KotlinPluginUtil;
import org.jetbrains.kotlin.resolve.TargetPlatform;
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
-import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
public class KotlinGradleModuleConfigurator extends KotlinWithGradleConfigurator {
public static final String NAME = "gradle";
@@ -46,27 +43,11 @@ public class KotlinGradleModuleConfigurator extends KotlinWithGradleConfigurator
return "Gradle";
}
- @Override
- public boolean isApplicable(@NotNull Module module) {
- return KotlinPluginUtil.isGradleModule(module) &&
- !KotlinPluginUtil.isAndroidGradleModule(module);
- }
-
@Override
protected String getApplyPluginDirective() {
return APPLY_KOTLIN;
}
- @Override
- protected boolean addElementsToFile(@NotNull GroovyFile groovyFile, boolean isTopLevelProjectFile, @NotNull String version) {
- if (!isTopLevelProjectFile) {
- boolean wasModified = Companion.addElementsToProjectFile(groovyFile, version);
- wasModified |= addElementsToModuleFile(groovyFile, version);
- return wasModified;
- }
- return false;
- }
-
KotlinGradleModuleConfigurator() {
}
}
diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt
new file mode 100644
index 00000000000..5772e4d6542
--- /dev/null
+++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2010-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jetbrains.kotlin.idea.configuration
+
+import com.intellij.openapi.projectRoots.Sdk
+import org.jetbrains.kotlin.idea.versions.MAVEN_JS_STDLIB_ID
+import org.jetbrains.kotlin.js.resolve.JsPlatform
+import org.jetbrains.kotlin.resolve.TargetPlatform
+
+class KotlinJsGradleModuleConfigurator : KotlinWithGradleConfigurator() {
+ override val name: String = "gradle-js"
+ override val presentableText: String = "Gradle (JavaScript)"
+ override val targetPlatform: TargetPlatform = JsPlatform
+
+ override val applyPluginDirective: String = APPLY_KOTLIN_JS
+
+ override fun getDependencyDirective(sdk: Sdk?): String {
+ return KotlinWithGradleConfigurator.getDependencySnippet(MAVEN_JS_STDLIB_ID)
+ }
+
+ companion object {
+ val APPLY_KOTLIN_JS = "apply plugin: 'kotlin2js'"
+ }
+}
diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt
index 1f7598864cf..a183a62bc40 100644
--- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt
@@ -71,7 +71,9 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
return ConfigureKotlinStatus.BROKEN
}
- protected abstract fun isApplicable(module: Module): Boolean
+ protected open fun isApplicable(module: Module): Boolean {
+ return KotlinPluginUtil.isGradleModule(module) && !KotlinPluginUtil.isAndroidGradleModule(module)
+ }
private fun isFileConfigured(projectGradleFile: GroovyFile): Boolean {
val fileText = projectGradleFile.text
@@ -146,18 +148,29 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
val dependenciesBlock = getDependenciesBlock(file)
val sdk = ModuleUtil.findModuleForPsiElement(file)?.let { ModuleRootManager.getInstance(it).sdk }
- wasModified = wasModified or addExpressionInBlockIfNeeded(getRuntimeLibrary(sdk), dependenciesBlock, false)
+ wasModified = wasModified or addExpressionInBlockIfNeeded(getDependencyDirective(sdk), dependenciesBlock, false)
return wasModified
}
+ protected open fun getDependencyDirective(sdk: Sdk?) = getRuntimeLibrary(sdk)
+
protected abstract val applyPluginDirective: String
- protected abstract fun addElementsToFile(
+ protected open fun addElementsToFile(
groovyFile: GroovyFile,
isTopLevelProjectFile: Boolean,
version: String
- ): Boolean
+ ): Boolean {
+ if (!isTopLevelProjectFile) {
+ var wasModified = addElementsToProjectFile(groovyFile, version)
+ wasModified = wasModified or addElementsToModuleFile(groovyFile, version)
+ return wasModified
+ }
+ return false
+ }
+
+
fun changeGradleFile(
groovyFile: GroovyFile,
diff --git a/idea/testData/configuration/gradle/js_after.gradle b/idea/testData/configuration/gradle/js_after.gradle
new file mode 100644
index 00000000000..d535b0cf238
--- /dev/null
+++ b/idea/testData/configuration/gradle/js_after.gradle
@@ -0,0 +1,18 @@
+version = '1.0'
+
+repositories {
+ mavenCentral()
+}
+buildscript {
+ ext.kotlin_version = '$VERSION$'
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+apply plugin: 'kotlin2js'
+dependencies {
+ compile "org.jetbrains.kotlin:kotlin-js-library:$kotlin_version"
+}
diff --git a/idea/testData/configuration/gradle/js_before.gradle b/idea/testData/configuration/gradle/js_before.gradle
new file mode 100644
index 00000000000..c53a58d9db6
--- /dev/null
+++ b/idea/testData/configuration/gradle/js_before.gradle
@@ -0,0 +1,5 @@
+version = '1.0'
+
+repositories {
+ mavenCentral()
+}
diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractGradleConfigureProjectByChangingFileTest.kt b/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractGradleConfigureProjectByChangingFileTest.kt
index 1ae9014c996..1038efa95f5 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractGradleConfigureProjectByChangingFileTest.kt
+++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractGradleConfigureProjectByChangingFileTest.kt
@@ -23,7 +23,8 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
abstract class AbstractGradleConfigureProjectByChangingFileTest : AbstractConfigureProjectByChangingFileTest() {
fun doTestGradle(path: String) {
- doTest(path, path.replace("before", "after"), KotlinGradleModuleConfigurator())
+ doTest(path, path.replace("before", "after"),
+ if ("js" in path) KotlinJsGradleModuleConfigurator() else KotlinGradleModuleConfigurator())
}
override fun runConfigurator(module: Module, file: PsiFile, configurator: KotlinWithGradleConfigurator, version: String, collector: NotificationMessageCollector) {
diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/GradleConfigureProjectByChangingFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/configuration/GradleConfigureProjectByChangingFileTestGenerated.java
index bca1071487e..e9fa036f952 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/configuration/GradleConfigureProjectByChangingFileTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/GradleConfigureProjectByChangingFileTestGenerated.java
@@ -48,6 +48,12 @@ public class GradleConfigureProjectByChangingFileTestGenerated extends AbstractG
doTestGradle(fileName);
}
+ @TestMetadata("js_before.gradle")
+ public void testJs() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/gradle/js_before.gradle");
+ doTestGradle(fileName);
+ }
+
@TestMetadata("m04Version_before.gradle")
public void testM04Version() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/gradle/m04Version_before.gradle");