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() }