first class loader wrapper implementation
This commit is contained in:
committed by
Nikita Skvortsov
parent
7e36547b38
commit
308c12f45c
+5
@@ -0,0 +1,5 @@
|
||||
<root>
|
||||
<item name='org.gradle.api.Project org.gradle.api.artifacts.dsl.DependencyHandler getDependencies()'>
|
||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||
</item>
|
||||
</root>
|
||||
@@ -20,6 +20,11 @@
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>gradle-api</artifactId>
|
||||
|
||||
+24
-3
@@ -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<Project> {
|
||||
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<URL> = 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<Project>())
|
||||
|
||||
applyMethod.invoke(pluginInstance, project);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open class KSpec<T: Any?>(val predicate: (T) -> Boolean): Spec<T> {
|
||||
public override fun isSatisfiedBy(p0: T?): Boolean {
|
||||
return p0 != null && predicate(p0)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.kotlin.gradle.classloaders;
|
||||
package org.jetbrains.kotlin.gradle.plugin;
|
||||
|
||||
|
||||
import java.net.URL;
|
||||
Reference in New Issue
Block a user