diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/commonizer/KotlinCommonizerModelResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/commonizer/KotlinCommonizerModelResolver.kt new file mode 100644 index 00000000000..a74743df58c --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/commonizer/KotlinCommonizerModelResolver.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.commonizer + +import org.jetbrains.kotlin.gradle.EnableCommonizerTask +import org.jetbrains.plugins.gradle.model.ClassSetProjectImportModelProvider +import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension + +class KotlinCommonizerModelResolver : AbstractProjectResolverExtension() { + override fun requiresTaskRunning() = true + + override fun getProjectsLoadedModelProvider() = ClassSetProjectImportModelProvider( + setOf(EnableCommonizerTask::class.java) + ) +} + + diff --git a/idea/kotlin-gradle-tooling/resources/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService b/idea/kotlin-gradle-tooling/resources/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService index 492bb1188f8..de4ba481d83 100644 --- a/idea/kotlin-gradle-tooling/resources/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService +++ b/idea/kotlin-gradle-tooling/resources/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService @@ -1,6 +1,7 @@ org.jetbrains.kotlin.gradle.KotlinGradleModelBuilder org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder org.jetbrains.kotlin.gradle.KotlinCocoaPodsModelBuilder +org.jetbrains.kotlin.gradle.KotlinCommonizerModelBuilder org.jetbrains.kotlin.allopen.ide.AllOpenModelBuilderService org.jetbrains.kotlin.kapt.idea.KaptModelBuilderService org.jetbrains.kotlin.noarg.ide.NoArgModelBuilderService diff --git a/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt new file mode 100644 index 00000000000..a6ba146aae7 --- /dev/null +++ b/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle + +import org.gradle.api.Project +import org.gradle.api.logging.Logging +import org.jetbrains.plugins.gradle.tooling.AbstractModelBuilderService +import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder +import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext + + +interface EnableCommonizerTask + +class KotlinCommonizerModelBuilder : AbstractModelBuilderService() { + + companion object { + private const val COMMONIZER_TASK_NAME = "runCommonizer" + private const val COMMONIZER_SETUP_CLASS = "org.jetbrains.kotlin.gradle.targets.native.internal.KotlinNativePlatformDependenciesKt" + } + + override fun canBuild(modelName: String?): Boolean { + return EnableCommonizerTask::class.java.name == modelName + } + + override fun buildAll(modelName: String, project: Project, context: ModelBuilderContext): Any? { + val kotlinExt = project.extensions.findByName("kotlin") ?: return null + + try { + val classLoader = kotlinExt.javaClass.classLoader + val clazz = Class.forName(COMMONIZER_SETUP_CLASS, false, classLoader) + val isAllowCommonizerFun = clazz.getMethodOrNull("isAllowCommonizer", Project::class.java) ?: return null + + val isAllowCommonizer = isAllowCommonizerFun.invoke(Boolean::class.java, project) as Boolean + + if (isAllowCommonizer) { + val startParameter = project.gradle.startParameter + val tasks = HashSet(startParameter.taskNames) + if (!tasks.contains(COMMONIZER_TASK_NAME)) { + tasks.add(COMMONIZER_TASK_NAME) + startParameter.setTaskNames(tasks) + } + } + } catch (e: Exception) { + project.logger.error( + getErrorMessageBuilder(project, e).build() + ) + } + return null + } + + override fun getErrorMessageBuilder(project: Project, e: Exception): ErrorMessageBuilder { + return ErrorMessageBuilder.create( + project, e, "EnableCommonizerTask error" + ).withDescription("Unable to create $COMMONIZER_TASK_NAME task.") + } +} \ No newline at end of file diff --git a/idea/resources/META-INF/gradle-java.xml b/idea/resources/META-INF/gradle-java.xml index fca081cbffe..cc354cf6e1f 100644 --- a/idea/resources/META-INF/gradle-java.xml +++ b/idea/resources/META-INF/gradle-java.xml @@ -14,6 +14,7 @@ + diff --git a/idea/resources/META-INF/gradle-java.xml.201 b/idea/resources/META-INF/gradle-java.xml.201 index 99de71d92cb..02ef57d2cce 100644 --- a/idea/resources/META-INF/gradle-java.xml.201 +++ b/idea/resources/META-INF/gradle-java.xml.201 @@ -10,6 +10,7 @@ +