1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

New simplified scheme for kobalt-plugin.xml.

This commit is contained in:
Cedric Beust 2015-11-29 19:17:38 -08:00
parent c23b2f9c1b
commit ddef4069bc
4 changed files with 61 additions and 129 deletions

View file

@ -0,0 +1,14 @@
package com.beust.kobalt.api
import com.beust.kobalt.TaskResult
/**
* Plugins that can run a project (task "run" or "test") should implement this interface.
*/
interface ITestRunnerContributor : IContributor, IAffinity {
/**
* Run the project.
*/
fun run(project: Project, context: KobaltContext, classpath: List<IClasspathDependency>) : TaskResult
}

View file

@ -3,16 +3,16 @@ package com.beust.kobalt.internal
import com.beust.kobalt.JavaInfo
import com.beust.kobalt.SystemProperties
import com.beust.kobalt.TaskResult
import com.beust.kobalt.api.IRunnerContributor
import com.beust.kobalt.api.IClasspathDependency
import com.beust.kobalt.api.ITestRunnerContributor
import com.beust.kobalt.api.KobaltContext
import com.beust.kobalt.api.Project
import com.beust.kobalt.api.IClasspathDependency
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.log
import java.io.File
import java.net.URLClassLoader
abstract class GenericTestRunner : IRunnerContributor {
abstract class GenericTestRunner : ITestRunnerContributor {
abstract val mainClass: String
abstract fun args(project: Project, classpath: List<IClasspathDependency>) : List<String>

View file

@ -32,50 +32,11 @@ class KobaltPluginXml {
@XmlElement @JvmField
var name: String? = null
@XmlElement(name = "plugins") @JvmField
var plugins : ClassNameXml? = null
@XmlElement(name = "plugin-actors") @JvmField
var pluginActors : ClassNameXml? = null
@XmlElement(name = "factory-class-name") @JvmField
var factoryClassName: String? = null
@XmlElement(name = "classpath-contributors") @JvmField
var classpathContributors: ClassNameXml? = null
@XmlElement(name = "project-contributors") @JvmField
var projectContributors: ClassNameXml? = null
@XmlElement(name = "init-contributors") @JvmField
var initContributors: ClassNameXml? = null
@XmlElement(name = "repo-contributors") @JvmField
var repoContributors: ClassNameXml? = null
@XmlElement(name = "compiler-flag-contributors") @JvmField
var compilerFlagContributors: ClassNameXml? = null
@XmlElement(name = "compiler-interceptors") @JvmField
var compilerInterceptors: ClassNameXml? = null
@XmlElement(name = "source-directories-interceptors") @JvmField
var sourceDirectoriesInterceptors: ClassNameXml? = null
@XmlElement(name = "build-directory-interceptors") @JvmField
var buildDirectoryInterceptors: ClassNameXml? = null
@XmlElement(name = "runner-contributors") @JvmField
var runnerContributors: ClassNameXml? = null
@XmlElement(name = "test-runner-contributors") @JvmField
var testRunnerContributors: ClassNameXml? = null
@XmlElement(name = "classpath-interceptors") @JvmField
var classpathInterceptors: ClassNameXml? = null
@XmlElement(name = "compiler-contributors") @JvmField
var compilerContributors: ClassNameXml? = null
@XmlElement(name = "doc-contributors") @JvmField
var docContributors: ClassNameXml? = null
}
class ContributorXml {
@ -104,7 +65,7 @@ class PluginInfo(val xml: KobaltPluginXml, val classLoader: ClassLoader?) {
val sourceDirectoriesInterceptors = arrayListOf<ISourceDirectoriesIncerceptor>()
val buildDirectoryInterceptors = arrayListOf<IBuildDirectoryIncerceptor>()
val runnerContributors = arrayListOf<IRunnerContributor>()
val testRunnerContributors = arrayListOf<IRunnerContributor>()
val testRunnerContributors = arrayListOf<ITestRunnerContributor>()
val classpathInterceptors = arrayListOf<IClasspathInterceptor>()
val compilerContributors = arrayListOf<ICompilerContributor>()
val docContributors = arrayListOf<IDocContributor>()
@ -154,50 +115,32 @@ class PluginInfo(val xml: KobaltPluginXml, val classLoader: ClassLoader?) {
if (classLoader != null) classLoader.loadClass(className)
else Class.forName(className)
xml.plugins?.className?.forEach {
plugins.add(factory.instanceOf(forName(it)) as IPlugin)
}
xml.classpathContributors?.className?.forEach {
classpathContributors.add(factory.instanceOf(forName(it)) as IClasspathContributor)
}
xml.projectContributors?.className?.forEach {
projectContributors.add(factory.instanceOf(forName(it)) as IProjectContributor)
}
xml.initContributors?.className?.forEach {
initContributors.add(factory.instanceOf(forName(it)) as IInitContributor)
}
xml.repoContributors?.className?.forEach {
repoContributors.add(factory.instanceOf(forName(it)) as IRepoContributor)
}
xml.compilerFlagContributors?.className?.forEach {
compilerFlagContributors.add(factory.instanceOf(forName(it)) as ICompilerFlagContributor)
}
xml.compilerInterceptors?.className?.forEach {
compilerInterceptors.add(factory.instanceOf(forName(it)) as ICompilerInterceptor)
}
xml.sourceDirectoriesInterceptors?.className?.forEach {
sourceDirectoriesInterceptors.add(factory.instanceOf(forName(it)) as ISourceDirectoriesIncerceptor)
}
xml.buildDirectoryInterceptors?.className?.forEach {
buildDirectoryInterceptors.add(factory.instanceOf(forName(it)) as IBuildDirectoryIncerceptor)
}
xml.runnerContributors?.className?.forEach {
runnerContributors.add(factory.instanceOf(forName(it)) as IRunnerContributor)
}
xml.testRunnerContributors?.className?.forEach {
testRunnerContributors.add(factory.instanceOf(forName(it)) as IRunnerContributor)
}
xml.classpathInterceptors?.className?.forEach {
classpathInterceptors.add(factory.instanceOf(forName(it)) as IClasspathInterceptor)
}
xml.compilerContributors?.className?.forEach {
compilerContributors.add(factory.instanceOf(forName(it)) as ICompilerContributor)
}
xml.docContributors?.className?.forEach {
docContributors.add(factory.instanceOf(forName(it)) as IDocContributor)
//
// Populate pluginInfo with what was found in Kobalt's own kobalt-plugin.xml
//
xml.pluginActors?.className?.forEach {
with(factory.instanceOf(forName(it))) {
if (this is IPlugin) plugins.add(this)
if (this is IClasspathContributor) classpathContributors.add(this)
if (this is IProjectContributor) projectContributors.add(this)
if (this is IInitContributor) initContributors.add(this)
if (this is IRepoContributor) repoContributors.add(this)
if (this is ICompilerContributor) compilerContributors.add(this)
if (this is ICompilerInterceptor) compilerInterceptors.add(this)
if (this is ISourceDirectoriesIncerceptor) sourceDirectoriesInterceptors.add(this)
if (this is IBuildDirectoryIncerceptor) buildDirectoryInterceptors.add(this)
if (this is IRunnerContributor) runnerContributors.add(this)
if (this is ITestRunnerContributor) testRunnerContributors.add(this)
if (this is IClasspathInterceptor) classpathInterceptors.add(this)
if (this is ICompilerContributor) compilerContributors.add(this)
if (this is IDocContributor) docContributors.add(this)
}
}
}
/**
* Populate pluginInfo with what was found in the plug-in's kobalt-plugin.xml
*/
fun addPluginInfo(pluginInfo: PluginInfo) {
log(2, "Found new plug-in, adding it to pluginInfo: $pluginInfo")
@ -206,6 +149,14 @@ class PluginInfo(val xml: KobaltPluginXml, val classLoader: ClassLoader?) {
projectContributors.addAll(pluginInfo.projectContributors)
initContributors.addAll(pluginInfo.initContributors)
repoContributors.addAll(pluginInfo.repoContributors)
compilerInterceptors.addAll(pluginInfo.compilerInterceptors)
sourceDirectoriesInterceptors.addAll(pluginInfo.sourceDirectoriesInterceptors)
buildDirectoryInterceptors.addAll(pluginInfo.buildDirectoryInterceptors)
runnerContributors.addAll(pluginInfo.runnerContributors)
testRunnerContributors.addAll(pluginInfo.testRunnerContributors)
classpathInterceptors.addAll(pluginInfo.classpathInterceptors)
compilerContributors.addAll(pluginInfo.compilerContributors)
docContributors.addAll(pluginInfo.docContributors)
}
}

View file

@ -1,58 +1,25 @@
<kobalt-plugin>
<name>kobalt</name>
<factory-class-name>com.beust.kobalt.internal.GuiceFactory</factory-class-name>
<plugins>
<plugin-actors>
<!-- Classes within this tag are instantiated and the introspected by Kobalt. Whenever they -->
<!-- are found to implement one of IPluginActor's interfaces, they are added as such -->
<class-name>com.beust.kobalt.plugin.java.JavaPlugin</class-name>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
<class-name>com.beust.kobalt.plugin.application.ApplicationPlugin</class-name>
<class-name>com.beust.kobalt.plugin.KobaltPlugin</class-name>
<class-name>com.beust.kobalt.plugin.java.JavaPlugin</class-name>
<class-name>com.beust.kobalt.plugin.kotlin.KotlinPlugin</class-name>
<class-name>com.beust.kobalt.plugin.packaging.PackagingPlugin</class-name>
<class-name>com.beust.kobalt.plugin.publish.PublishPlugin</class-name>
<class-name>com.beust.kobalt.plugin.apt.AptPlugin</class-name>
</plugins>
<classpath-contributors>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
<class-name>com.beust.kobalt.plugin.kotlin.KotlinPlugin</class-name>
</classpath-contributors>
<project-contributors>
<class-name>com.beust.kobalt.plugin.java.JavaPlugin</class-name>
<class-name>com.beust.kobalt.plugin.kotlin.KotlinPlugin</class-name>
</project-contributors>
<init-contributors>
<!-- These classes manage -init for Java and Kotlin -->
<class-name>com.beust.kobalt.plugin.java.JavaBuildGenerator</class-name>
<class-name>com.beust.kobalt.plugin.kotlin.KotlinBuildGenerator</class-name>
</init-contributors>
<repo-contributors>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
</repo-contributors>
<compiler-flag-contributors>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
<class-name>com.beust.kobalt.plugin.apt.AptPlugin</class-name>
</compiler-flag-contributors>
<build-directory-interceptors>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
</build-directory-interceptors>
<compiler-interceptors>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
</compiler-interceptors>
<runner-contributors>
<class-name>com.beust.kobalt.plugin.application.ApplicationPlugin</class-name>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
</runner-contributors>
<test-runner-contributors>
<!-- These classes run TestNG or JUnit depending on which one the user picked -->
<class-name>com.beust.kobalt.internal.JUnitRunner</class-name>
<class-name>com.beust.kobalt.internal.TestNgRunner</class-name>
</test-runner-contributors>
<classpath-interceptors>
<class-name>com.beust.kobalt.plugin.android.AndroidPlugin</class-name>
</classpath-interceptors>
<compiler-contributors>
<class-name>com.beust.kobalt.plugin.java.JavaPlugin</class-name>
<class-name>com.beust.kobalt.plugin.kotlin.KotlinPlugin</class-name>
</compiler-contributors>
<doc-contributors>
<class-name>com.beust.kobalt.plugin.java.JavaPlugin</class-name>
<class-name>com.beust.kobalt.plugin.kotlin.KotlinPlugin</class-name>
</doc-contributors>
</plugin-actors>
</kobalt-plugin>