diff options
author | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-12-20 12:54:53 +0100 |
---|---|---|
committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-12-21 11:19:07 +0100 |
commit | f923b4f8733003d55891dd4da25d849c81c4933c (patch) | |
tree | 00a919dcd770c8744d2833efadc3cdc6a1a7089b /src/main/java/ch/fhnw/thga | |
parent | 813ab013c4b15ed44615313b7c15d405bdeadb91 (diff) | |
download | frege-gradle-plugin-f923b4f8733003d55891dd4da25d849c81c4933c.tar.gz frege-gradle-plugin-f923b4f8733003d55891dd4da25d849c81c4933c.tar.bz2 frege-gradle-plugin-f923b4f8733003d55891dd4da25d849c81c4933c.zip |
refactor: extracts common `setupClasspath` logic to util class
Diffstat (limited to 'src/main/java/ch/fhnw/thga')
5 files changed, 136 insertions, 63 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 2f1f41a..e00b297 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -3,15 +3,12 @@ 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.file.SourceDirectorySet; -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 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"; @@ -21,57 +18,78 @@ public class FregePlugin implements Plugin<Project> { 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); + FregeExtension extension = project.getExtensions().create( + FREGE_EXTENSION_NAME, + FregeExtension.class); - TaskProvider<SetupFregeTask> setupFregeCompilerTask = project.getTasks().register(SETUP_FREGE_TASK_NAME, - SetupFregeTask.class, task -> { + 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( + 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); - task.getClasspath().setFrom(setupClasspath(project, implementation, - setupFregeCompilerTask.get().getFregeCompilerOutputPath()), extension.getOutputDir().get()); - }); + project.getTasks().register( + DEPS_FREGE_TASK_NAME, + DependencyFregeTask.class, + task -> + { + 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.dependsOn(compileFregeTask); - task.getFregeClasspath() - .setFrom(setupClasspath(project, implementation, setupFregeCompilerTask.get().getFregeCompilerOutputPath()) - , extension.getOutputDir().get()); - }); + project.getTasks().register( + REPL_FREGE_TASK_NAME, + ReplFregeTask.class, + task -> + { + task.dependsOn(compileFregeTask); + task.getFregeCompilerJar().set( + setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeOutputDir().set(extension.getOutputDir()); + task.getFregeDependencies().set(implementation.getAsPath()); + } + ); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java index 81da1cd..475946b 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java @@ -1,19 +1,37 @@ package ch.fhnw.thga.gradleplugins; import org.gradle.api.DefaultTask; -import org.gradle.api.file.ConfigurableFileCollection; -import org.gradle.api.tasks.InputFiles; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.TaskAction; public abstract class ReplFregeTask extends DefaultTask { public static final String REPL_MAIN_CLASS = "frege.repl.FregeRepl"; - @InputFiles - public abstract ConfigurableFileCollection getFregeClasspath(); + @InputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + @Input + public abstract Property<String> getFregeDependencies(); + + @InputDirectory + public abstract DirectoryProperty getFregeOutputDir(); @TaskAction public void printStartFregeReplCommand() { System.out.println("Execute the following command to start the Frege Repl:"); - System.out.println(String.format("java -cp %s %s", getFregeClasspath().getAsPath(), REPL_MAIN_CLASS)); + System.out.println(String.format( + "java -cp %s %s", + SharedTaskLogic.setupClasspath( + getProject(), + getFregeDependencies(), + getFregeCompilerJar(), + getFregeOutputDir()) + .get().getAsPath(), + REPL_MAIN_CLASS)); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java index 41ac2a3..f993af4 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java @@ -4,17 +4,14 @@ import javax.inject.Inject; import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.file.FileCollection; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.InputFile; -import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.options.Option; @@ -30,20 +27,13 @@ public abstract class RunFregeTask extends DefaultTask { public abstract DirectoryProperty getFregeOutputDir(); @Input - @Option(option = "mainModule", description = "The full name of the Frege module with a main function, e.g. 'my.mod.Name'") + @Option(option = "mainModule", + description = "The full name of the Frege module with a main function, e.g. 'my.mod.Name'") public abstract Property<String> getMainModule(); @Input public abstract Property<String> getFregeDependencies(); - @Internal - public final Provider<FileCollection> getClasspath() { - return getFregeDependencies().map(depsClasspath -> { - return depsClasspath.isEmpty() ? getProject().files(getFregeCompilerJar(), getFregeOutputDir()) - : getProject().files(getFregeCompilerJar(), getFregeOutputDir(), depsClasspath); - }); - } - @Inject public RunFregeTask(ObjectFactory objectFactory) { javaExec = objectFactory.newInstance(JavaExec.class); @@ -52,6 +42,12 @@ public abstract class RunFregeTask extends DefaultTask { @TaskAction public void runFrege() { javaExec.getMainClass().set(getMainModule()); - javaExec.setClasspath(getClasspath().get()).exec(); + javaExec.setClasspath( + SharedTaskLogic.setupClasspath( + getProject(), + getFregeDependencies(), + getFregeCompilerJar(), + getFregeOutputDir()) + .get()).exec(); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java new file mode 100644 index 0000000..57af617 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java @@ -0,0 +1,22 @@ +package ch.fhnw.thga.gradleplugins; + +import org.gradle.api.Project; +import org.gradle.api.file.FileCollection; +import org.gradle.api.provider.Provider; +import org.gradle.api.provider.Property; + +public final class SharedTaskLogic { + private SharedTaskLogic() {}; + + public static final Provider<FileCollection> setupClasspath( + Project project, + Property<String> dependencies, + Object... paths) + { + return dependencies.map(depsClasspath -> + { + return depsClasspath.isEmpty() ? project.files(paths) + : project.files(depsClasspath, paths); + }); + } +} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java index 34b33a2..4459bd4 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java @@ -1,16 +1,35 @@ package ch.fhnw.thga.gradleplugins.internal; import org.gradle.api.DefaultTask; -import org.gradle.api.file.ConfigurableFileCollection; -import org.gradle.api.tasks.InputFiles; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.TaskAction; +import ch.fhnw.thga.gradleplugins.SharedTaskLogic; + public abstract class DependencyFregeTask extends DefaultTask { - @InputFiles - public abstract ConfigurableFileCollection getClasspath(); + @InputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + @Input + public abstract Property<String> getFregeDependencies(); + + @InputDirectory + public abstract DirectoryProperty getFregeOutputDir(); + @TaskAction public void fregeDependencies() { - System.out.println(getClasspath().getAsPath()); + System.out.println( + SharedTaskLogic.setupClasspath( + getProject(), + getFregeDependencies(), + getFregeCompilerJar(), + getFregeOutputDir()) + .get().getAsPath()); } } |