diff options
Diffstat (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java')
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java | 136 |
1 files changed, 90 insertions, 46 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 18016f3..a318b81 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -3,69 +3,113 @@ package ch.fhnw.thga.gradleplugins; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; -import org.gradle.api.file.FileCollection; -import org.gradle.api.file.RegularFile; -import org.gradle.api.provider.Provider; import org.gradle.api.tasks.TaskProvider; import ch.fhnw.thga.gradleplugins.internal.DependencyFregeTask; -public class FregePlugin implements Plugin<Project> { - public static final String SETUP_FREGE_TASK_NAME = "setupFrege"; - public static final String COMPILE_FREGE_TASK_NAME = "compileFrege"; - public static final String RUN_FREGE_TASK_NAME = "runFrege"; - public static final String REPL_FREGE_TASK_NAME = "replFrege"; - public static final String DEPS_FREGE_TASK_NAME = "depsFrege"; - public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; - public static final String FREGE_EXTENSION_NAME = "frege"; +public class FregePlugin implements Plugin<Project> +{ + public static final String SETUP_FREGE_TASK_NAME = "setupFrege"; + public static final String COMPILE_FREGE_TASK_NAME = "compileFrege"; + public static final String RUN_FREGE_TASK_NAME = "runFrege"; + public static final String REPL_FREGE_TASK_NAME = "replFrege"; + public static final String DEPS_FREGE_TASK_NAME = "depsFrege"; + public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; + public static final String FREGE_EXTENSION_NAME = "frege"; public static final String FREGE_IMPLEMENTATION_SCOPE = "implementation"; - private FileCollection setupClasspath(Project project, Configuration dependencies, - Provider<RegularFile> fregeCompilerJar) { - if (dependencies.isEmpty()) { - return project.files(fregeCompilerJar); - } else { - return project.files(fregeCompilerJar, dependencies.getAsPath()); - } - } - @Override public void apply(Project project) { - Configuration implementation = project.getConfigurations().create(FREGE_IMPLEMENTATION_SCOPE); - FregeExtension extension = project.getExtensions().create(FREGE_EXTENSION_NAME, FregeExtension.class); - TaskProvider<SetupFregeTask> setupFregeCompilerTask = project.getTasks().register(SETUP_FREGE_TASK_NAME, - SetupFregeTask.class, task -> { + Configuration implementation = project + .getConfigurations() + .create(FREGE_IMPLEMENTATION_SCOPE); + + FregeExtension extension = project + .getExtensions() + .create( + FREGE_EXTENSION_NAME, + FregeExtension.class); + + TaskProvider<SetupFregeTask> setupFregeCompilerTask = + project.getTasks().register( + SETUP_FREGE_TASK_NAME, + SetupFregeTask.class, + task -> + { task.getVersion().set(extension.getVersion()); task.getRelease().set(extension.getRelease()); task.getDownloadDir().set(extension.getCompilerDownloadDir()); }); - TaskProvider<CompileFregeTask> compileFregeTask = project.getTasks().register(COMPILE_FREGE_TASK_NAME, - CompileFregeTask.class, task -> { + TaskProvider<CompileFregeTask> compileFregeTask = + project.getTasks().register( + COMPILE_FREGE_TASK_NAME, + CompileFregeTask.class, + task -> + { task.dependsOn(setupFregeCompilerTask); - task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeCompilerJar().set( + setupFregeCompilerTask.get().getFregeCompilerOutputPath()); task.getFregeMainSourceDir().set(extension.getMainSourceDir()); task.getFregeOutputDir().set(extension.getOutputDir()); task.getFregeCompilerFlags().set(extension.getCompilerFlags()); task.getFregeDependencies().set(implementation.getAsPath()); - }); - project.getTasks().register(RUN_FREGE_TASK_NAME, RunFregeTask.class, task -> { - task.dependsOn(compileFregeTask); - task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); - task.getFregeOutputDir().set(extension.getOutputDir()); - task.getMainModule().set(extension.getMainModule()); - task.getFregeDependencies().set(implementation.getAsPath()); - }); - project.getTasks().register(DEPS_FREGE_TASK_NAME, - DependencyFregeTask.class, task -> { - task.dependsOn(setupFregeCompilerTask); - task.getClasspath().setFrom(setupClasspath(project, implementation, - setupFregeCompilerTask.get().getFregeCompilerOutputPath())); - }); - project.getTasks().register(REPL_FREGE_TASK_NAME, ReplFregeTask.class, task -> { - task.dependsOn(setupFregeCompilerTask); - task.getFregeClasspath().setFrom(setupClasspath(project, implementation, - setupFregeCompilerTask.get().getFregeCompilerOutputPath())); - }); + task.getReplSource().set(""); + } + ); + + project.getTasks().register( + RUN_FREGE_TASK_NAME, + RunFregeTask.class, + task -> + { + task.dependsOn(compileFregeTask); + task.getFregeCompilerJar().set( + setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeOutputDir().set(extension.getOutputDir()); + task.getMainModule().set(extension.getMainModule()); + task.getFregeDependencies().set(implementation.getAsPath()); + } + ); + + project.getTasks().register( + DEPS_FREGE_TASK_NAME, + DependencyFregeTask.class, + task -> + { + task.dependsOn(compileFregeTask.map( + compileTask -> + { + compileTask.getReplSource().set(task.getReplSource()); + return compileTask; + }) + .get()); + task.dependsOn(compileFregeTask); + task.getFregeCompilerJar().set( + setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeOutputDir().set(extension.getOutputDir()); + task.getFregeDependencies().set(implementation.getAsPath()); + } + ); + + project.getTasks().register( + REPL_FREGE_TASK_NAME, + ReplFregeTask.class, + task -> + { + task.getReplSource().set(extension.getReplSource()); + task.dependsOn(compileFregeTask.map( + compileTask -> + { + compileTask.getReplSource().set(task.getReplSource()); + return compileTask; + }) + .get()); + task.getFregeCompilerJar().set( + setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeOutputDir().set(extension.getOutputDir()); + task.getFregeDependencies().set(implementation.getAsPath()); + } + ); } } |