aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ch/fhnw/thga
diff options
context:
space:
mode:
authorThibault Gagnaux <tgagnaux@gmail.com>2021-12-20 12:54:53 +0100
committerThibault Gagnaux <tgagnaux@gmail.com>2021-12-21 11:19:07 +0100
commitf923b4f8733003d55891dd4da25d849c81c4933c (patch)
tree00a919dcd770c8744d2833efadc3cdc6a1a7089b /src/main/java/ch/fhnw/thga
parent813ab013c4b15ed44615313b7c15d405bdeadb91 (diff)
downloadfrege-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')
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java98
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java28
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java22
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java22
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java29
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());
}
}