diff options
Diffstat (limited to 'src/main/java/ch/fhnw/thga/gradleplugins')
3 files changed, 63 insertions, 1 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java new file mode 100644 index 0000000..0f19f08 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java @@ -0,0 +1,42 @@ +package ch.fhnw.thga.gradleplugins; + +import java.util.List; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +public abstract class FregeCompileTask extends DefaultTask { + private final JavaExec javaExec; + + @InputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + @InputDirectory + public abstract DirectoryProperty getFregeMainSourceDir(); + + @OutputDirectory + public abstract DirectoryProperty getFregeOutputDir(); + + @Inject + public FregeCompileTask(ObjectFactory objectFactory) { + javaExec = objectFactory.newInstance(JavaExec.class); + + } + + + @TaskAction + public void compileFrege() { + String fregeMainSourceDir = getFregeMainSourceDir().getAsFile().get().getAbsolutePath(); + List<String> args = List.of("-v", "-d", getFregeOutputDir().get().getAsFile().getAbsolutePath(), "-sp", fregeMainSourceDir, fregeMainSourceDir); + javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(args).exec(); + } +} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java index 8a6d175..2763ebc 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -1,5 +1,7 @@ package ch.fhnw.thga.gradleplugins; +import java.io.File; + import javax.inject.Inject; import org.gradle.api.file.DirectoryProperty; @@ -19,8 +21,16 @@ public abstract class FregeExtension { public abstract DirectoryProperty getFregeCompilerOutputDirectory(); + public abstract DirectoryProperty getFregeMainSourceDir(); + + public abstract DirectoryProperty getFregeOutputDir(); + @Inject public FregeExtension(ProjectLayout projectLayout) { getFregeCompilerOutputDirectory().convention(projectLayout.getProjectDirectory().dir("lib")); + // TODO: change to projectDir/src/main/frege + getFregeMainSourceDir().convention(projectLayout.getProjectDirectory()); + getFregeOutputDir().convention(projectLayout.getBuildDirectory().dir("classes/main/frege")); } + } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 709552c..429edbb 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -2,20 +2,30 @@ package ch.fhnw.thga.gradleplugins; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.tasks.TaskProvider; public class FregePlugin implements Plugin<Project> { public static final String SETUP_FREGE_COMPILER_TASK_NAME = "setupFregeCompiler"; + public static final String FREGE_COMPILE_TASK_NAME = "fregeCompile"; public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; public static final String FREGE_EXTENSION_NAME = "frege"; @Override public void apply(Project project) { FregeExtension extension = project.getExtensions().create(FREGE_EXTENSION_NAME, FregeExtension.class); - project.getTasks().register(SETUP_FREGE_COMPILER_TASK_NAME, SetupFregeCompilerTask.class, task -> { + TaskProvider<SetupFregeCompilerTask> setupFregeCompilerTask = + project.getTasks().register(SETUP_FREGE_COMPILER_TASK_NAME, SetupFregeCompilerTask.class, task -> { task.getFregeVersion().set(extension.getFregeVersion()); task.getFregeRelease().set(extension.getFregeRelease()); task.getFregeCompilerOutputDirectory().set(extension.getFregeCompilerOutputDirectory()); }); + + project.getTasks().register(FREGE_COMPILE_TASK_NAME, FregeCompileTask.class, task -> { + task.dependsOn(setupFregeCompilerTask); + task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeMainSourceDir().set(extension.getFregeMainSourceDir()); + task.getFregeOutputDir().set(extension.getFregeOutputDir()); + }); //Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> { // c.setVisible(false); // c.setCanBeConsumed(false); |