From 308c12f45c2cd1001dfac0512f0e6c237b20a5e7 Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Wed, 29 May 2013 20:15:32 +0400 Subject: [PATCH] first class loader wrapper implementation --- .../gradle/api/artifacts/dsl/annotations.xml | 5 ++++ libraries/tools/kotlin-gradle-plugin/pom.xml | 5 ++++ .../gradle/plugin/KotlinPluginWrapper.kt | 27 ++++++++++++++++--- .../plugin}/ParentLastURLClassLoader.java | 2 +- 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/dsl/annotations.xml rename libraries/tools/kotlin-gradle-plugin/src/main/{java/org/jetbrains/kotlin/gradle/classloaders => kotlin/org/jetbrains/kotlin/gradle/plugin}/ParentLastURLClassLoader.java (98%) diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/dsl/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/artifacts/dsl/annotations.xml new file mode 100644 index 00000000000..0402ed182e0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/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/pom.xml b/libraries/tools/kotlin-gradle-plugin/pom.xml index 543601c16bb..b4eb77b2478 100644 --- a/libraries/tools/kotlin-gradle-plugin/pom.xml +++ b/libraries/tools/kotlin-gradle-plugin/pom.xml @@ -20,6 +20,11 @@ jar + + org.jetbrains.kotlin + kotlin-stdlib + ${project.version} + org.jetbrains.kotlin gradle-api 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 611f34ad2aa..a32bdb94c3d 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 @@ -3,11 +3,32 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.dsl.DependencyHandler +import org.gradle.api.artifacts.ConfigurationContainer +import org.gradle.api.artifacts.Dependency +import org.gradle.api.specs.Spec +import java.io.File +import java.net.URL open class KotlinPluginWrapper: Plugin { public override fun apply(project: Project) { - val dependencyHandler : DependencyHandler = project.getDependencies() - dependencyHandler.create("org.jetbrains.kotlin:kotlin-gradle-plugin-core:0.1-SNAPSHOT") + val dependencyHandler : DependencyHandler = project.getDependencies()!! + val configurationsContainer : ConfigurationContainer = project.getConfigurations()!! + val dependency = dependencyHandler.create("org.jetbrains.kotlin:kotlin-gradle-plugin-core:0.1-SNAPSHOT") + val configuration = configurationsContainer.detachedConfiguration(dependency)!! + + val kotlinPluginDependencies : List = configuration.getResolvedConfiguration()!!.getFiles(KSpec({ dep -> true }))!!.map({(f: File):URL -> f.toURI().toURL() }) + val kotlinPluginClassloader = ParentLastURLClassLoader(kotlinPluginDependencies, getClass().getClassLoader()) + val cls = Class.forName("org.jetbrains.kotlin.gradle.plugin.KotlinPlugin", true, kotlinPluginClassloader) + val pluginInstance = cls.newInstance() + val applyMethod = cls.getMethod("apply", javaClass()) + + applyMethod.invoke(pluginInstance, project); } -} \ No newline at end of file +} + +open class KSpec(val predicate: (T) -> Boolean): Spec { + public override fun isSatisfiedBy(p0: T?): Boolean { + return p0 != null && predicate(p0) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/java/org/jetbrains/kotlin/gradle/classloaders/ParentLastURLClassLoader.java b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ParentLastURLClassLoader.java similarity index 98% rename from libraries/tools/kotlin-gradle-plugin/src/main/java/org/jetbrains/kotlin/gradle/classloaders/ParentLastURLClassLoader.java rename to libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ParentLastURLClassLoader.java index d71acde71e3..dec931c3baa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/java/org/jetbrains/kotlin/gradle/classloaders/ParentLastURLClassLoader.java +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/ParentLastURLClassLoader.java @@ -1,4 +1,4 @@ -package org.jetbrains.kotlin.gradle.classloaders; +package org.jetbrains.kotlin.gradle.plugin; import java.net.URL;