diff --git a/libraries/pom.xml b/libraries/pom.xml index 9648888a533..8de54ae3fdd 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -84,6 +84,7 @@ tools/kotlin-js-library tools/kotlin-gradle-plugin tools/kotlin-gradle-plugin-core + tools/kotlin-android-compiler-plugin tools/kotlin-maven-plugin tools/kotlin-maven-plugin-test tools/kotlin-js-tests diff --git a/libraries/tools/kotlin-android-compiler-plugin/pom.xml b/libraries/tools/kotlin-android-compiler-plugin/pom.xml new file mode 100644 index 00000000000..e5b04dde929 --- /dev/null +++ b/libraries/tools/kotlin-android-compiler-plugin/pom.xml @@ -0,0 +1,65 @@ + + + + 4.0.0 + + 1.4.1 + 3.0.4 + + + + org.jetbrains.kotlin + kotlin-project + 0.1-SNAPSHOT + ../../pom.xml + + + kotlin-android-compiler-plugin + pom + + Android compiler plugin for Kotlin + + + + org.jetbrains.kotlin + kotlin-stdlib + ${project.version} + + + org.jetbrains.kotlin + kotlin-gradle-plugin-core + ${project.version} + provided + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + attach-artifacts + compile + + attach-artifact + + + + + ${kotlin-sdk}/lib/android-compiler-plugin.jar + jar + + + + + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 7df3da0072e..26a02b367f8 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -131,8 +131,8 @@ public open class KotlinCompile() : AbstractKotlinCompile() override fun populateTargetSpecificArgs(args: K2JVMCompilerArguments) { - args.androidRes = resPath - args.androidManifest = manifestPath + args.pluginClasspaths = kotlinOptions.pluginClasspaths + args.pluginOptions = kotlinOptions.pluginOptions if (StringUtils.isEmpty(kotlinOptions.classpath)) { val existingClasspathEntries = getClasspath().filter({ it != null && it.exists() }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 548831fdac9..14312dca5ac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -37,6 +37,8 @@ import kotlin.properties.Delegates import org.gradle.api.tasks.Delete import groovy.lang.Closure import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider +import org.jetbrains.kotlin.compiler.plugin.CliOption +import org.jetbrains.kotlin.android.AndroidCommandLineProcessor val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations" @@ -302,6 +304,10 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t project.getExtensions().add(DEFAULT_ANNOTATIONS, GradleUtils(scriptHandler, project).resolveKotlinPluginDependency("kotlin-android-sdk-annotations")) } + private fun makePluginOption(option: CliOption, value: String): String { + return "plugin:${AndroidCommandLineProcessor.ANDROID_COMPILER_PLUGIN_ID}:${option.name}=$value" + } + private fun processVariants(variants: DefaultDomainObjectSet, project: Project, androidExt: BaseExtension): Unit { val logger = project.getLogger() val kotlinOptions = getExtension(androidExt, "kotlinOptions") @@ -324,6 +330,17 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t val javaTask = variant.getJavaCompile()!! val variantName = variant.getName() + val resourceDir = AndroidGradleWrapper.getResourceDirs(mainSourceSet).firstOrNull() + val manifestFile = AndroidGradleWrapper.getManifestFile(mainSourceSet) + + if (resourceDir != null) { + val layoutDir = File(resourceDir, "layout") + kotlinOptions.pluginOptions = array( + makePluginOption("androidRes", layoutDir.getAbsolutePath()), + makePluginOption("androidManifest", manifestFile.getAbsolutePath()) + ) + } + val kotlinTaskName = "compile${variantName.capitalize()}Kotlin" val kotlinTask = tasksProvider.createKotlinJVMTask(project, kotlinTaskName) if (kotlinOptions != null) { @@ -338,9 +355,6 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t kotlinTask.setClasspath(javaTask.getClasspath()) kotlinTask.setDependsOn(javaTask.getDependsOn()) - kotlinTask.resPath = File(variant.getMergeResources()?.getOutputDir()!!.canonicalPath + "/layout").canonicalPath - kotlinTask.manifestPath = variant.getProcessResources().getManifestFile()!!.canonicalPath - val javaSourceList = ArrayList() fun processSourceSet(javaSourceSet: AndroidSourceSet) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy index 6d061483fff..94a93f3c115 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy @@ -46,6 +46,16 @@ class AndroidGradleWrapper { return androidSourceSet.getJava().getSrcDirs() } + @NotNull + static def Set getResourceDirs(Object androidSourceSet) { + return androidSourceSet.getRes().getSrcDirs() + } + + @NotNull + static def File getManifestFile(Object androidSourceSet) { + return androidSourceSet.getManifest().getSrcFile() + } + @NotNull static def List getProductFlavorsNames(ApkVariant variant) { return variant.getProductFlavors().iterator().collect { it.getName() }