diff --git a/libraries/tools/kotlin-gradle-plugin-core/pom.xml b/libraries/tools/kotlin-gradle-plugin-core/pom.xml
index 2c558ae18e8..3678fdcfb48 100644
--- a/libraries/tools/kotlin-gradle-plugin-core/pom.xml
+++ b/libraries/tools/kotlin-gradle-plugin-core/pom.xml
@@ -20,6 +20,12 @@
jar
+
+ com.android.tools.build
+ gradle
+ 0.4.2
+ provided
+
junit
junit
diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt
index b294cff1614..9b609f0d3ee 100644
--- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt
@@ -24,6 +24,13 @@ import java.util.concurrent.Callable
import org.gradle.api.Action
import org.gradle.api.tasks.compile.AbstractCompile
import java.util.Arrays
+import org.gradle.api.logging.Logging
+import com.android.build.gradle.BaseExtension
+import com.android.build.gradle.AppExtension
+import com.android.build.gradle.LibraryExtension
+import org.gradle.api.internal.DefaultDomainObjectSet
+import com.android.build.gradle.api.BaseVariant
+import org.gradle.api.tasks.compile.JavaCompile
open class KotlinPlugin: Plugin {
@@ -107,6 +114,65 @@ open class KotlinPlugin: Plugin {
}
+open class KotlinAndroidPlugin: Plugin {
+
+ val log = Logging.getLogger(getClass())!!
+
+ public override fun apply(project: Project) {
+ project.afterEvaluate( { (project: Project?): Unit ->
+ if (project != null) {
+ val extension = project.getExtensions()!!.getByName("android") as BaseExtension
+
+ val testVariants = extension.getTestVariants()!!
+ processVariants(testVariants, project)
+ if (extension is AppExtension) {
+ val appVariants = extension.getApplicationVariants()!!
+ processVariants(appVariants, project)
+
+ }
+
+ if (extension is LibraryExtension) {
+ val libVariants = extension.getLibraryVariants()!!;
+ processVariants(libVariants, project)
+ }
+ }
+
+ })
+ }
+
+ private fun processVariants(variants: DefaultDomainObjectSet, project: Project): Unit {
+ for (variant in variants) {
+ val javaTask = variant.getJavaCompile()!!
+ val destinationDir = javaTask.getDestinationDir()
+ val classPath = javaTask.getClasspath()
+
+
+ val variantName = variant.getName()
+ val kotlinTaskName = "compile${variantName}Kotlin"
+ val kotlinTask: KotlinCompile = project.getTasks()!!.add(kotlinTaskName, javaClass())!!
+ // store kotlin classes in separate directory. They will serve as class-path to java compiler
+ val kotlinOutputDir = File(project.getBuildDir(), "kotlin-classes/${variantName}")
+ kotlinTask.kotlinDestinationDir = kotlinOutputDir;
+ kotlinTask.setDestinationDir(destinationDir)
+ kotlinTask.setDescription("Compiles the ${variantName} kotlin.")
+
+ kotlinTask.source("src/main/kotlin")
+ kotlinTask.source(javaTask.getSource()) // for cross compilation
+
+ kotlinTask.setClasspath(javaTask.getClasspath())
+ kotlinTask.setDependsOn(javaTask.getDependsOn())
+
+ javaTask.dependsOn(kotlinTaskName)
+ val javacClassPath = javaTask.getClasspath() + project.files(kotlinTask.kotlinDestinationDir);
+ javaTask.setClasspath(javacClassPath)
+ }
+ }
+
+ private fun configureKotlinCompileTask(javaCompile : JavaCompile) : Unit {
+
+ }
+}
+
open class KSpec(val predicate: (T) -> Boolean): Spec {
public override fun isSatisfiedBy(p0: T?): Boolean {
return p0 != null && predicate(p0)