Implement Kotlin configurator for GSK
#KT-14965 Fixed
This commit is contained in:
+52
-61
@@ -14,79 +14,70 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.android.configure;
|
||||
package org.jetbrains.kotlin.android.configure
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.JavaSdk;
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.idea.KotlinPluginUtil;
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator;
|
||||
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt;
|
||||
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.projectRoots.JavaSdk
|
||||
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator
|
||||
import org.jetbrains.kotlin.idea.versions.*
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
|
||||
|
||||
public class KotlinAndroidGradleModuleConfigurator extends KotlinWithGradleConfigurator {
|
||||
public static final String NAME = "android-gradle";
|
||||
class KotlinAndroidGradleModuleConfigurator internal constructor() : KotlinWithGradleConfigurator() {
|
||||
|
||||
private static final String APPLY_KOTLIN_ANDROID = "apply plugin: 'kotlin-android'";
|
||||
override val name: String = NAME
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return NAME;
|
||||
}
|
||||
override val targetPlatform: TargetPlatform = JvmPlatform
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public TargetPlatform getTargetPlatform() {
|
||||
return JvmPlatform.INSTANCE;
|
||||
}
|
||||
override val presentableText: String = "Android with Gradle"
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getPresentableText() {
|
||||
return "Android with Gradle";
|
||||
}
|
||||
public override fun isApplicable(module: Module): Boolean = KotlinPluginUtil.isAndroidGradleModule(module)
|
||||
|
||||
@Override
|
||||
public boolean isApplicable(@NotNull Module module) {
|
||||
return KotlinPluginUtil.isAndroidGradleModule(module);
|
||||
}
|
||||
override val kotlinPluginName: String = KOTLIN_ANDROID
|
||||
|
||||
@Override
|
||||
protected String getApplyPluginDirective() {
|
||||
return APPLY_KOTLIN_ANDROID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean addElementsToFile(@NotNull GroovyFile groovyFile, boolean isTopLevelProjectFile, @NotNull String version) {
|
||||
if (isTopLevelProjectFile) {
|
||||
return Companion.addElementsToProjectFile(groovyFile, version);
|
||||
}
|
||||
else {
|
||||
return addElementsToModuleFile(groovyFile, version);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getRuntimeLibrary(@Nullable Sdk sdk, @NotNull String version) {
|
||||
if (sdk != null && KotlinRuntimeLibraryUtilKt.hasJreSpecificRuntime(version)) {
|
||||
JavaSdkVersion sdkVersion = JavaSdk.getInstance().getVersion(sdk);
|
||||
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
|
||||
// Android dex can't convert our kotlin-stdlib-jre8 artifact, so use jre7 instead (KT-16530)
|
||||
return KotlinWithGradleConfigurator.Companion.getDependencySnippet(
|
||||
KotlinRuntimeLibraryUtilKt.getMAVEN_STDLIB_ID_JRE7());
|
||||
override fun addElementsToFile(file: PsiFile, isTopLevelProjectFile: Boolean, version: String): Boolean {
|
||||
if (file is GroovyFile) {
|
||||
if (isTopLevelProjectFile) {
|
||||
return addElementsToProjectGroovyFile(file, version)
|
||||
}
|
||||
else {
|
||||
return addElementsToModuleGroovyFile(file, version)
|
||||
}
|
||||
}
|
||||
|
||||
return super.getRuntimeLibrary(sdk, version);
|
||||
if (file is KtFile) {
|
||||
if (isTopLevelProjectFile) {
|
||||
return addElementsToProjectGSKFile(file, version)
|
||||
}
|
||||
else {
|
||||
return addElementsToModuleGSKFile(file, version)
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
KotlinAndroidGradleModuleConfigurator() {
|
||||
override fun getStdlibArtifactName(sdk: Sdk?, version: String): String {
|
||||
if (sdk != null && hasJreSpecificRuntime(version)) {
|
||||
val sdkVersion = JavaSdk.getInstance().getVersion(sdk)
|
||||
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
|
||||
// Android dex can't convert our kotlin-stdlib-jre8 artifact, so use jre7 instead (KT-16530)
|
||||
return MAVEN_STDLIB_ID_JRE7
|
||||
}
|
||||
}
|
||||
|
||||
return super.getStdlibArtifactName(sdk, version)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val NAME = "android-gradle"
|
||||
|
||||
private val KOTLIN_ANDROID = "kotlin-android"
|
||||
}
|
||||
}
|
||||
|
||||
+127
-103
@@ -28,139 +28,163 @@ import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("idea/testData/configuration/android-gradle")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public class ConfigureProjectTestGenerated extends AbstractConfigureProjectTest {
|
||||
public void testAllFilesPresentInAndroid_gradle() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/configuration/android-gradle"), Pattern.compile("(\\w+)_before\\.gradle$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("androidStudioDefault_before.gradle")
|
||||
public void testAndroidStudioDefault() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/androidStudioDefault_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("androidStudioDefaultShapshot_before.gradle")
|
||||
public void testAndroidStudioDefaultShapshot() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/androidStudioDefaultShapshot_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("buildConfigs_before.gradle")
|
||||
public void testBuildConfigs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/buildConfigs_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("emptyDependencyList_before.gradle")
|
||||
public void testEmptyDependencyList() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/emptyDependencyList_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("emptyFile_before.gradle")
|
||||
public void testEmptyFile() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/emptyFile_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("helloWorld_before.gradle")
|
||||
public void testHelloWorld() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/helloWorld_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("libraryFile_before.gradle")
|
||||
public void testLibraryFile() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/libraryFile_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("missedApplyAndroidStatement_before.gradle")
|
||||
public void testMissedApplyAndroidStatement() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/missedApplyAndroidStatement_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("missedBuildscriptBlock_before.gradle")
|
||||
public void testMissedBuildscriptBlock() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/missedBuildscriptBlock_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("missedRepositoriesInBuildscriptBlock_before.gradle")
|
||||
public void testMissedRepositoriesInBuildscriptBlock() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/missedRepositoriesInBuildscriptBlock_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("productFlavor_before.gradle")
|
||||
public void testProductFlavor() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/productFlavor_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/configuration/android-gradle/gradleExamples")
|
||||
@TestMetadata("idea/testData/configuration/android-gradle")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class GradleExamples extends AbstractConfigureProjectTest {
|
||||
public void testAllFilesPresentInGradleExamples() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/configuration/android-gradle/gradleExamples"), Pattern.compile("(\\w+)_before\\.gradle$"), TargetBackend.ANY, true);
|
||||
public static class Android_gradle extends AbstractConfigureProjectTest {
|
||||
public void testAllFilesPresentInAndroid_gradle() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/configuration/android-gradle"), Pattern.compile("(\\w+)_before\\.gradle$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample0_before.gradle")
|
||||
public void testGradleExample0() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample0_before.gradle");
|
||||
@TestMetadata("androidStudioDefault_before.gradle")
|
||||
public void testAndroidStudioDefault() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/androidStudioDefault_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample18_before.gradle")
|
||||
public void testGradleExample18() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample18_before.gradle");
|
||||
@TestMetadata("androidStudioDefaultShapshot_before.gradle")
|
||||
public void testAndroidStudioDefaultShapshot() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/androidStudioDefaultShapshot_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample22_before.gradle")
|
||||
public void testGradleExample22() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample22_before.gradle");
|
||||
@TestMetadata("buildConfigs_before.gradle")
|
||||
public void testBuildConfigs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/buildConfigs_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample44_before.gradle")
|
||||
public void testGradleExample44() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample44_before.gradle");
|
||||
@TestMetadata("emptyDependencyList_before.gradle")
|
||||
public void testEmptyDependencyList() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/emptyDependencyList_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample5_before.gradle")
|
||||
public void testGradleExample5() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample5_before.gradle");
|
||||
@TestMetadata("emptyFile_before.gradle")
|
||||
public void testEmptyFile() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/emptyFile_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample50_before.gradle")
|
||||
public void testGradleExample50() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample50_before.gradle");
|
||||
@TestMetadata("helloWorld_before.gradle")
|
||||
public void testHelloWorld() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/helloWorld_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample58_before.gradle")
|
||||
public void testGradleExample58() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample58_before.gradle");
|
||||
@TestMetadata("libraryFile_before.gradle")
|
||||
public void testLibraryFile() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/libraryFile_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample65_before.gradle")
|
||||
public void testGradleExample65() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample65_before.gradle");
|
||||
@TestMetadata("missedApplyAndroidStatement_before.gradle")
|
||||
public void testMissedApplyAndroidStatement() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/missedApplyAndroidStatement_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample8_before.gradle")
|
||||
public void testGradleExample8() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample8_before.gradle");
|
||||
@TestMetadata("missedBuildscriptBlock_before.gradle")
|
||||
public void testMissedBuildscriptBlock() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/missedBuildscriptBlock_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("missedRepositoriesInBuildscriptBlock_before.gradle")
|
||||
public void testMissedRepositoriesInBuildscriptBlock() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/missedRepositoriesInBuildscriptBlock_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("productFlavor_before.gradle")
|
||||
public void testProductFlavor() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/productFlavor_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/configuration/android-gradle/gradleExamples")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class GradleExamples extends AbstractConfigureProjectTest {
|
||||
public void testAllFilesPresentInGradleExamples() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/configuration/android-gradle/gradleExamples"), Pattern.compile("(\\w+)_before\\.gradle$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample0_before.gradle")
|
||||
public void testGradleExample0() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample0_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample18_before.gradle")
|
||||
public void testGradleExample18() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample18_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample22_before.gradle")
|
||||
public void testGradleExample22() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample22_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample44_before.gradle")
|
||||
public void testGradleExample44() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample44_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample5_before.gradle")
|
||||
public void testGradleExample5() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample5_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample50_before.gradle")
|
||||
public void testGradleExample50() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample50_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample58_before.gradle")
|
||||
public void testGradleExample58() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample58_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample65_before.gradle")
|
||||
public void testGradleExample65() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample65_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("gradleExample8_before.gradle")
|
||||
public void testGradleExample8() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gradle/gradleExamples/gradleExample8_before.gradle");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/configuration/android-gsk")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class Android_gsk extends AbstractConfigureProjectTest {
|
||||
public void testAllFilesPresentInAndroid_gsk() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/configuration/android-gsk"), Pattern.compile("(\\w+)_before\\.gradle.kts$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("emptyFile_before.gradle.kts")
|
||||
public void testEmptyFile() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gsk/emptyFile_before.gradle.kts");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("helloWorld_before.gradle.kts")
|
||||
public void testHelloWorld() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/configuration/android-gsk/helloWorld_before.gradle.kts");
|
||||
doTestAndroidGradle(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user