diff --git a/libraries/tools/kotlin-gradle-plugin-core/pom.xml b/libraries/tools/kotlin-gradle-plugin-core/pom.xml
index 46f6492dee2..0558da6ba40 100644
--- a/libraries/tools/kotlin-gradle-plugin-core/pom.xml
+++ b/libraries/tools/kotlin-gradle-plugin-core/pom.xml
@@ -25,6 +25,11 @@
commons-io
2.4
+
+ commons-lang
+ commons-lang
+ 2.6
+
org.jetbrains.kotlin
kotlin-gradle-plugin-test
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 757619ca73c..250ec5f505a 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
@@ -10,6 +10,8 @@ import java.util.Properties
import java.io.FileNotFoundException
import org.gradle.api.initialization.dsl.ScriptHandler
import org.gradle.api.invocation.Gradle
+import java.lang.reflect.Method
+import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
abstract class KotlinBasePluginWrapper: Plugin {
val log = Logging.getLogger(this.javaClass)
@@ -27,24 +29,14 @@ abstract class KotlinBasePluginWrapper: Plugin {
project.getExtensions().getExtraProperties()?.set("kotlin.gradle.plugin.version", kotlinPluginVersion)
val pluginClassLoader = createPluginIsolatedClassLoader(kotlinPluginVersion, sourceBuildScript)
+ val plugin = getPlugin(pluginClassLoader, sourceBuildScript)
+ plugin.apply(project)
- val cls = Class.forName(getPluginClassName(), true, pluginClassLoader)
- log.debug("Plugin class loaded")
-
- val constructor = cls.getConstructor(javaClass())
- val method = cls.getMethod("apply", javaClass())
- log.debug("'apply' method found, invoking...")
-
- val plugin = constructor.newInstance(sourceBuildScript)
- log.debug("Plugin class instantiated")
-
- method?.invoke(plugin, project)
- log.debug("'apply' method invoked successfully")
-
- val gradle = project.javaClass.getMethod("getGradle").invoke(project) as Gradle
- gradle.addBuildListener(FinishBuildListener(pluginClassLoader))
+ project.getGradle().addBuildListener(FinishBuildListener(pluginClassLoader))
}
+ protected abstract fun getPlugin(pluginClassLoader: ParentLastURLClassLoader, scriptHandler: ScriptHandler): Plugin
+
private fun createPluginIsolatedClassLoader(projectVersion: String, sourceBuildScript: ScriptHandler): ParentLastURLClassLoader {
val dependencyHandler: DependencyHandler = sourceBuildScript.getDependencies()
val configurationsContainer: ConfigurationContainer = sourceBuildScript.getConfigurations()
@@ -81,8 +73,6 @@ abstract class KotlinBasePluginWrapper: Plugin {
return projectVersion
}
- public abstract fun getPluginClassName():String
-
private fun findSourceBuildScript(project: Project): ScriptHandler? {
log.debug("Looking for proper script handler")
var curProject = project
@@ -102,20 +92,14 @@ abstract class KotlinBasePluginWrapper: Plugin {
}
open class KotlinPluginWrapper: KotlinBasePluginWrapper() {
- public override fun getPluginClassName():String {
- return "org.jetbrains.kotlin.gradle.plugin.KotlinPlugin"
- }
+ override fun getPlugin(pluginClassLoader: ParentLastURLClassLoader, scriptHandler: ScriptHandler) = KotlinPlugin(scriptHandler, KotlinTasksProvider(pluginClassLoader))
}
open class KotlinAndriodPluginWrapper: KotlinBasePluginWrapper() {
- public override fun getPluginClassName():String {
- return "org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPlugin"
- }
+ override fun getPlugin(pluginClassLoader: ParentLastURLClassLoader, scriptHandler: ScriptHandler) = KotlinAndroidPlugin(scriptHandler, KotlinTasksProvider(pluginClassLoader))
}
open class Kotlin2JsPluginWrapper : KotlinBasePluginWrapper() {
- public override fun getPluginClassName():String {
- return "org.jetbrains.kotlin.gradle.plugin.Kotlin2JsPlugin"
- }
+ override fun getPlugin(pluginClassLoader: ParentLastURLClassLoader, scriptHandler: ScriptHandler) = Kotlin2JsPlugin(scriptHandler, KotlinTasksProvider(pluginClassLoader))
}