summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Perry <maperry78@yahoo.com.au>2015-09-23 02:16:14 +1000
committerMark Perry <maperry78@yahoo.com.au>2015-09-23 02:16:14 +1000
commitc26ffd229166faf89588c74f83529707553e1d29 (patch)
tree0136a8a78de856fe2ae42c58114bdc33ca2a2028
parentb0731a8488d16821be1f5d7d0a19ac0e9c506d89 (diff)
downloadfrege-gradle-plugin-SourceSet3.tar.gz
frege-gradle-plugin-SourceSet3.tar.bz2
frege-gradle-plugin-SourceSet3.zip
Almost finished source setsSourceSet3
-rw-r--r--src/main/groovy/frege/gradle/CompileTask.groovy8
-rw-r--r--src/main/groovy/frege/gradle/FregePlugin.groovy136
-rw-r--r--src/main/groovy/frege/gradle/FregeSourceSet.groovy32
3 files changed, 159 insertions, 17 deletions
diff --git a/src/main/groovy/frege/gradle/CompileTask.groovy b/src/main/groovy/frege/gradle/CompileTask.groovy
index 07bc384..02a3228 100644
--- a/src/main/groovy/frege/gradle/CompileTask.groovy
+++ b/src/main/groovy/frege/gradle/CompileTask.groovy
@@ -9,12 +9,13 @@ import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.tasks.*
+import org.gradle.api.tasks.compile.AbstractCompile
import org.gradle.process.internal.DefaultJavaExecAction
import org.gradle.process.internal.JavaExecAction
import org.gradle.api.internal.file.FileResolver
@TypeChecked
-class CompileTask extends DefaultTask {
+class CompileTask extends AbstractCompile {
// see help at https://github.com/Frege/frege/wiki/Compiler-Manpage
@@ -112,10 +113,10 @@ class CompileTask extends DefaultTask {
deduceSourceDir(project.projectDir, DEFAULT_TEST_SRC_DIR)
}
-
+ @Override
@TaskAction
@TypeChecked(TypeCheckingMode.SKIP)
- void executeCompile() {
+ void compile() {
if (! outputDir.exists() ) {
logger.info "Creating output directory '${outputDir.absolutePath}'."
@@ -256,4 +257,5 @@ class CompileTask extends DefaultTask {
args
}
+
} \ No newline at end of file
diff --git a/src/main/groovy/frege/gradle/FregePlugin.groovy b/src/main/groovy/frege/gradle/FregePlugin.groovy
index 3daf743..b872f5e 100644
--- a/src/main/groovy/frege/gradle/FregePlugin.groovy
+++ b/src/main/groovy/frege/gradle/FregePlugin.groovy
@@ -1,36 +1,84 @@
package frege.gradle
import groovy.transform.TypeChecked
+import org.gradle.api.InvalidUserDataException
import org.gradle.api.Plugin
import org.gradle.api.Project
import fj.data.Option
+import org.gradle.api.internal.plugins.DslObject
+import org.gradle.api.plugins.ApplicationPlugin
+import org.gradle.api.plugins.JavaBasePlugin
+import org.gradle.api.plugins.JavaPlugin
+import org.gradle.api.plugins.JavaPluginConvention
+
+import org.gradle.api.artifacts.Configuration
+import org.gradle.api.internal.file.FileResolver
+import org.gradle.api.internal.plugins.DslObject
+import org.gradle.api.plugins.ApplicationPlugin
+import org.gradle.api.plugins.JavaBasePlugin
+import org.gradle.api.plugins.JavaPlugin
+import org.gradle.api.plugins.JavaPluginConvention
+
+import javax.inject.Inject
+
+
+
+import static org.gradle.api.plugins.ApplicationPlugin.TASK_RUN_NAME
+import static org.gradle.api.plugins.ApplicationPlugin.TASK_START_SCRIPTS_NAME
+import static org.gradle.api.plugins.JavaPlugin.RUNTIME_CONFIGURATION_NAME
+
+
//@TypeChecked
class FregePlugin implements Plugin<Project> {
+
+ public static final String FREGE_PLUGIN_NAME = 'frege'
+ public static final String FREGE_CONFIGURATION_NAME = FREGE_PLUGIN_NAME
+
+
+
+ Project project
+ FileResolver fileResolver
+ Configuration fregeConfiguration
+ FregePluginExtension pluginExtension
+
+ CompileTask compileTask
+
+
+ @Inject
+ FregePlugin(FileResolver fileResolver) {
+ this.fileResolver = fileResolver
+ }
+
+
void apply(Project project) {
+
+ this.project = project
+ project.plugins.apply(JavaPlugin)
+ project.plugins.apply(ApplicationPlugin)
+ configureSourceSetDefaults(project.plugins.getPlugin(JavaBasePlugin))
+ configureFregeConfigurationAndClasspath()
+//
+ configureApplicationPlugin()
+ addFregePluginExtension()
+
// Workaround to build proper jars on Windows, see https://github.com/Frege/frege-gradle-plugin/issues/9
System.setProperty("file.encoding", "UTF-8")
project.apply(plugin: 'base')
- def e = (FregePluginExtension) project.extensions.create("frege", FregePluginExtension)
-
- project.task('compileFrege', type: CompileTask, group: 'Build') << {
+// def e = (FregePluginExtension) project.extensions.create("frege", FregePluginExtension)
- }
+// project.task('compileFrege', type: CompileTask, group: 'Build')
project.tasks["classes"].dependsOn("compileFrege")
project.tasks["compileFrege"].dependsOn("compileJava")
- project.task('compileTestFrege', type: CompileTask, group: 'Build') {
-// sourcePaths = [CompileTask.deduceTestSrcDir(project)]
- outputDir = CompileTask.deduceTestClassesDir(project)
-// logger.info("compileTestFrege debug")
-// logger.info("projectDir ${project.projectDir}")
-// logger.info("defaultSrc ${CompileTask.DEFAULT_SRC_DIR}")
- fregePaths = Option.fromNull(
- CompileTask.deduceClassesDir(project)
- ).map{d -> [d]}.orSome([])
- }
+// project.task('compileTestFrege', type: CompileTask, group: 'Build') {
+// outputDir = CompileTask.deduceTestClassesDir(project)
+// fregePaths = Option.fromNull(
+// CompileTask.deduceClassesDir(project)
+// ).map{d -> [d]}.orSome([])
+// }
project.tasks.testClasses.dependsOn("compileTestFrege")
project.tasks.compileTestFrege.dependsOn("compileTestJava")
@@ -49,4 +97,64 @@ class FregePlugin implements Plugin<Project> {
}
+
+ private void configureSourceSetDefaults(JavaBasePlugin javaBasePlugin) {
+ project.convention.getPlugin(JavaPluginConvention).sourceSets.all { sourceSet ->
+ def fregeSourceSet = new FregeSourceSet(sourceSet.displayName, fileResolver)
+ new DslObject(sourceSet).convention.plugins.put(FREGE_PLUGIN_NAME, fregeSourceSet)
+
+ fregeSourceSet.frege.srcDir("src/${sourceSet.name}/frege")
+ def compileTaskName = sourceSet.getCompileTaskName(FREGE_PLUGIN_NAME)
+
+ compileTask = project.tasks.create(compileTaskName, CompileTask)
+ javaBasePlugin.configureForSourceSet(sourceSet, compileTask)
+ compileTask.dependsOn(sourceSet.compileJavaTaskName)
+ compileTask.setDescription("Compiles the ${sourceSet.name} Frege sources.")
+ compileTask.setSource(fregeSourceSet.frege)
+
+ project.tasks.getByName(sourceSet.classesTaskName).dependsOn(compileTaskName)
+ }
+ }
+
+
+ private void configureApplicationPlugin() {
+ def run = project.tasks.getByName(TASK_RUN_NAME)
+ run.conventionMapping.main = { "${compileTask.module}".toString() }
+ run.doFirst {
+ ensureMainModuleConfigured()
+ }
+
+ def startScripts = project.tasks.getByName(TASK_START_SCRIPTS_NAME)
+ startScripts.conventionMapping.mainClassName = { "${compileTask.module}".toString() }
+ startScripts.doFirst {
+ ensureMainModuleConfigured()
+ }
+ }
+
+
+ private void ensureMainModuleConfigured() {
+ // TODO: no op - should probably be removed
+// if (!pluginExtension.module) {
+// throw new InvalidUserDataException('You must specify the mainModule using frege extension.')
+// }
+ }
+
+
+ private void configureFregeConfigurationAndClasspath() {
+ fregeConfiguration = project.configurations.create(FREGE_CONFIGURATION_NAME)
+ .setVisible(false)
+ .setDescription('The Frege libraries to be used for this Frege project.')
+
+ project.configurations.getByName(RUNTIME_CONFIGURATION_NAME).extendsFrom(fregeConfiguration)
+ project.tasks.withType(CompileTask) { CompileTask fregeCompile ->
+ // TODO
+
+// fregeCompile.conventionMapping.map(CompileTask.FREGE_CLASSPATH_FIELD) { fregeConfiguration }
+ }
+ }
+
+ private void addFregePluginExtension() {
+ pluginExtension = project.extensions.create(FREGE_PLUGIN_NAME, FregePluginExtension)
+ }
+
}
diff --git a/src/main/groovy/frege/gradle/FregeSourceSet.groovy b/src/main/groovy/frege/gradle/FregeSourceSet.groovy
new file mode 100644
index 0000000..75d2ad9
--- /dev/null
+++ b/src/main/groovy/frege/gradle/FregeSourceSet.groovy
@@ -0,0 +1,32 @@
+package frege.gradle
+
+/**
+ * Created by MarkPerry on 23/09/2015.
+ */
+
+
+import org.gradle.api.file.SourceDirectorySet
+import org.gradle.api.internal.file.DefaultSourceDirectorySet
+import org.gradle.api.internal.file.FileResolver
+
+import static org.gradle.util.ConfigureUtil.configure
+
+class FregeSourceSet {
+
+ private final SourceDirectorySet frege
+
+ FregeSourceSet(String displayName, FileResolver fileResolver) {
+ frege = new DefaultSourceDirectorySet(String.format('%s Frege source', displayName), fileResolver)
+ frege.filter.include('**/*.fr')
+ }
+
+ SourceDirectorySet getFrege() {
+ frege
+ }
+
+ FregeSourceSet frege(Closure closure) {
+ configure(closure, frege)
+ this
+ }
+
+}