diff options
author | tricktron <tgagnaux@gmail.com> | 2021-12-11 11:54:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-11 11:54:24 +0100 |
commit | 3c4bfaeb12fc7480782efd5f2f78831ab0761bbb (patch) | |
tree | 9ad0075fb39be5601b551559519efe56979e4f78 /src/main | |
parent | 8fed7811e535d3f8892ea16f7587e461ef1ee98e (diff) | |
parent | e7b73f3a18c487efe6122e875f0b1ff96af3dd8f (diff) | |
download | frege-gradle-plugin-3c4bfaeb12fc7480782efd5f2f78831ab0761bbb.tar.gz frege-gradle-plugin-3c4bfaeb12fc7480782efd5f2f78831ab0761bbb.tar.bz2 frege-gradle-plugin-3c4bfaeb12fc7480782efd5f2f78831ab0761bbb.zip |
Merge pull request #13 from tricktron/f-repl-frege-v2v1.5.0-alpha
Frege Repl Refactoring
Diffstat (limited to 'src/main')
3 files changed, 47 insertions, 47 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 5fc89b2..18016f3 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -3,17 +3,32 @@ 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 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); @@ -41,11 +56,16 @@ public class FregePlugin implements Plugin<Project> { 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(compileFregeTask); - task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); - task.getFregeOutputDir().set(extension.getOutputDir()); - task.getFregeDependencies().set(implementation.getAsPath()); + task.dependsOn(setupFregeCompilerTask); + task.getFregeClasspath().setFrom(setupClasspath(project, implementation, + setupFregeCompilerTask.get().getFregeCompilerOutputPath())); }); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java index 9541861..81da1cd 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java @@ -1,55 +1,19 @@ package ch.fhnw.thga.gradleplugins; -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.file.ConfigurableFileCollection; +import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.TaskAction; public abstract class ReplFregeTask extends DefaultTask { - public static final Logger LOGGER = Logging.getLogger(SetupFregeTask.class); public static final String REPL_MAIN_CLASS = "frege.repl.FregeRepl"; - private final JavaExec javaExec; - - @InputFile - public abstract RegularFileProperty getFregeCompilerJar(); - - @InputDirectory - public abstract DirectoryProperty getFregeOutputDir(); - - @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 ReplFregeTask(ObjectFactory objectFactory) { - javaExec = objectFactory.newInstance(JavaExec.class); - } + @InputFiles + public abstract ConfigurableFileCollection getFregeClasspath(); @TaskAction - public void startFregeRepl() { - javaExec.setStandardInput(System.in); - javaExec.getMainClass().set(REPL_MAIN_CLASS); - javaExec.setClasspath(getClasspath().get()).exec(); + 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)); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java new file mode 100644 index 0000000..34b33a2 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java @@ -0,0 +1,16 @@ +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.tasks.TaskAction; + +public abstract class DependencyFregeTask extends DefaultTask { + @InputFiles + public abstract ConfigurableFileCollection getClasspath(); + + @TaskAction + public void fregeDependencies() { + System.out.println(getClasspath().getAsPath()); + } +} |