diff --git a/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/annotations.xml b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/annotations.xml index a1a14699122..67c82aa96e6 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/annotations.xml @@ -1,29 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml new file mode 100644 index 00000000000..622af2f52eb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/artifacts/dsl/annotations.xml b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/artifacts/dsl/annotations.xml new file mode 100644 index 00000000000..2629a955f8a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/artifacts/dsl/annotations.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml index a33a584b9ed..9f68f95d91a 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin-core/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml @@ -4,4 +4,7 @@ + + + \ No newline at end of file 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 fd3478ccc87..1cf7b0e4af3 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 @@ -33,6 +33,10 @@ import com.android.builder.model.BuildType import com.android.builder.BuilderConstants import com.android.build.gradle.api.TestVariant import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.artifacts.dsl.DependencyHandler +import org.gradle.api.artifacts.ConfigurationContainer +import org.gradle.api.artifacts.Dependency +import java.util.HashSet open class KotlinPlugin: Plugin { @@ -44,6 +48,9 @@ open class KotlinPlugin: Plugin { configureSourceSetDefaults(project as ProjectInternal, javaBasePlugin, javaPluginConvention) configureKDoc(project, javaPluginConvention) + + val version = project.getProperties()!!.get("kotlin.gradle.plugin.version") as String + project.getExtensions().add(KotlinCompile.DEFAULT_ANNOTATIONS, GradleUtils.resolveDependencies(project, "org.jetbrains.kotlin:kotlin-jdk-annotations:$version")) } @@ -159,6 +166,9 @@ open class KotlinAndroidPlugin: Plugin { } }) + val version = project.getProperties()!!.get("kotlin.gradle.plugin.version") as String + project.getExtensions().add(KotlinCompile.DEFAULT_ANNOTATIONS, GradleUtils.resolveDependencies(project, "org.jetbrains.kotlin:kotlin-jdk-annotations:$version", + "org.jetbrains.kotlin:kotlin-android-sdk-annotations:$version")); } private fun processVariants(variants: DefaultDomainObjectSet, project: Project, androidExt: BaseExtension): Unit { @@ -258,3 +268,22 @@ open class KSpec(val predicate: (T) -> Boolean): Spec { return p0 != null && predicate(p0) } } + +open class GradleUtils() { + class object { + public fun resolveDependencies(project: Project, vararg coordinates: String): Collection { + val dependencyHandler : DependencyHandler = project.getBuildscript().getDependencies() + val configurationsContainer : ConfigurationContainer = project.getBuildscript().getConfigurations() + + val deps = HashSet() + for (coordinate in coordinates) { + deps.add(dependencyHandler.create(coordinate)) + } + val array : Array = deps.toArray(Array(deps.size(),{null})) + val configuration = configurationsContainer.detachedConfiguration(*array) + + return configuration.getResolvedConfiguration().getFiles(KSpec({ dep -> true }))!! + } + } +} + 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 2513eec80c2..a496604179f 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 @@ -27,6 +27,10 @@ import org.apache.commons.io.FileUtils public open class KotlinCompile(): AbstractCompile() { + class object { + val DEFAULT_ANNOTATIONS = "org.jebrains.kotlin.gradle.defaultAnnotations" + } + val srcDirsRoots = HashSet() val compiler = K2JVMCompiler() val logger = Logging.getLogger(getClass()) @@ -105,7 +109,7 @@ public open class KotlinCompile(): AbstractCompile() { val embeddedAnnotations = getAnnotations() val userAnnotations = (kotlinOptions.annotations ?: "").split(File.pathSeparatorChar).toList() - val allAnnotations = if (kotlinOptions.noJdkAnnotations) userAnnotations else userAnnotations.plus(embeddedAnnotations.getPath()) + val allAnnotations = if (kotlinOptions.noJdkAnnotations) userAnnotations else userAnnotations.plus(embeddedAnnotations.map {it.getPath()}) args.annotations = allAnnotations.makeString(File.pathSeparator) args.noStdlib = true @@ -124,19 +128,14 @@ public open class KotlinCompile(): AbstractCompile() { FileUtils.copyDirectory(kotlinDestinationDir, getDestinationDir()) } - fun getAnnotations(): File { - val configuration = getProject() - .getBuildscript() - .getConfigurations() - .getByName(ScriptHandler.CLASSPATH_CONFIGURATION)!! + fun getAnnotations(): Collection { + val annotations = getProject().getExtensions().getByName(DEFAULT_ANNOTATIONS) as Collection - val jdkAnnotationsFromClasspath = configuration.find { it.name.startsWith("kotlin-jdk-annotations") } - - if (jdkAnnotationsFromClasspath != null) { - logger.info("using jdk annontations from [${jdkAnnotationsFromClasspath.getAbsolutePath()}]") - return jdkAnnotationsFromClasspath + if (!annotations.isEmpty()) { + logger.info("using default annontations from [${annotations.map {it.getPath()}}]") + return annotations } else { - throw GradleException("kotlin-jdk-annotations not found in Kotlin gradle plugin classpath") + throw GradleException("Default annotations not found in Kotlin gradle plugin classpath") } } } diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-core/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index 7fc7be8cb97..cdc81aaa667 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -30,11 +30,12 @@ class BasicKotlinGradleIT { Test fun testSimpleCompile() { val projectDir = File(workingDir, "alfa") - val pathToKotlinPlugin = "-PpathToKotlinPlugin=" + File("local-repo").getAbsolutePath() + val pathToKotlinPlugin = "-PpathToKotlinPlugin=${File("local-repo").getAbsolutePath()}" + val version = "-Pkotlin.gradle.plugin.version=0.1-SNAPSHOT" val cmd = if (SystemInfo.isWindows) - listOf("cmd", "/C", "gradlew.bat", "compileDeployKotlin", "build", pathToKotlinPlugin, "--no-daemon", "--debug") + listOf("cmd", "/C", "gradlew.bat", "compileDeployKotlin", "build", pathToKotlinPlugin, version, "--no-daemon", "--debug") else - listOf("/bin/bash", "./gradlew", "compileDeployKotlin", "build", pathToKotlinPlugin, "--no-daemon", "--debug") + listOf("/bin/bash", "./gradlew", "compileDeployKotlin", "build", pathToKotlinPlugin, version, "--no-daemon", "--debug") val builder = ProcessBuilder(cmd) builder.directory(projectDir) diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml index dc5cd1bbcbe..67c82aa96e6 100644 --- a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml @@ -1,18 +1,32 @@ + - - - - + + - + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - \ No newline at end of file + + diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml index 885acfdd4ab..622af2f52eb 100644 --- a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/annotations.xml @@ -2,4 +2,7 @@ + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml index dea5cec6774..86cc0e5f0c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml @@ -2,4 +2,7 @@ + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml index 4005fe3c2c3..9f68f95d91a 100644 --- a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml @@ -5,8 +5,6 @@ - - - + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml index c14ebed20ae..0c7f23a66ff 100644 --- a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml @@ -1,15 +1,17 @@ + - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml index 5859b33807e..fb08bfa4358 100644 --- a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml @@ -1,22 +1,27 @@ + - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin/pom.xml b/libraries/tools/kotlin-gradle-plugin/pom.xml index f3474e9b223..4ce72f19ffc 100644 --- a/libraries/tools/kotlin-gradle-plugin/pom.xml +++ b/libraries/tools/kotlin-gradle-plugin/pom.xml @@ -25,11 +25,6 @@ kotlin-stdlib ${project.version} - - org.jetbrains.kotlin - kotlin-jdk-annotations - ${project.version} - org.jetbrains.kotlin gradle-api @@ -91,6 +86,8 @@ verify org.jetbrains.kotlin:kotlin-gradle-plugin-core:${project.version} + org.jetbrains.kotlin:kotlin-jdk-annotations:${project.version} + org.jetbrains.kotlin:kotlin-android-sdk-annotations:${project.version} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 96c7f408828..bebeac07ed6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -12,7 +12,7 @@ import org.gradle.api.logging.Logging import java.util.Properties import java.io.FileNotFoundException -open abstract class KotlinBasePluginWrapper: Plugin { +abstract class KotlinBasePluginWrapper: Plugin { val log = Logging.getLogger(getClass())!! @@ -31,8 +31,9 @@ open abstract class KotlinBasePluginWrapper: Plugin { props.load(inputStream); - val projectVersion = props.get("project.version") - log.debug("Found project version [" + projectVersion + "]") + val projectVersion = props.get("project.version") as String + log.debug("Found project version [$projectVersion]") + project.getExtensions().getExtraProperties()?.set("kotlin.gradle.plugin.version", projectVersion) log.debug("Creating configuration and dependency") val kotlinPluginCoreCoordinates = "org.jetbrains.kotlin:kotlin-gradle-plugin-core:" + projectVersion diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidAlfaProject/AndroidAlfa/src/main/kotlin/org/jetbrains/kotlin/gradle/test/androidalfa/MainActivity2.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidAlfaProject/AndroidAlfa/src/main/kotlin/org/jetbrains/kotlin/gradle/test/androidalfa/MainActivity2.kt index 06d9cb69f92..fbc8bf81295 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidAlfaProject/AndroidAlfa/src/main/kotlin/org/jetbrains/kotlin/gradle/test/androidalfa/MainActivity2.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidAlfaProject/AndroidAlfa/src/main/kotlin/org/jetbrains/kotlin/gradle/test/androidalfa/MainActivity2.kt @@ -16,7 +16,7 @@ open class MainActivity2: Activity() { var next: Button = findViewById(R.id.Button02) as Button next.setOnClickListener(object: View.OnClickListener { - public override fun onClick(view: View?): Unit { + public override fun onClick(view: View): Unit { val intent: Intent = Intent() setResult(Activity.RESULT_OK, intent) finish()