From 1f13c769f57d4670cee462b6cf741efb5f5a8cd6 Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Wed, 24 Nov 2021 10:27:00 +0100 Subject: feat: adds `replFrege` task --- .../ch/fhnw/thga/gradleplugins/ReplFregeTask.java | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java') diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java new file mode 100644 index 0000000..9ee14df --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java @@ -0,0 +1,54 @@ +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.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 getFregeDependencies(); + + @Internal + public final Provider 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); + } + + @TaskAction + public void startFregeRepl() { + javaExec.getMainClass().set(REPL_MAIN_CLASS); + javaExec.setClasspath(getClasspath().get()).exec(); + } +} -- cgit