diff options
Diffstat (limited to 'src/main/java')
4 files changed, 30 insertions, 93 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java index bc3c8f7..c280607 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -3,16 +3,13 @@ package ch.fhnw.thga.gradleplugins; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.function.BiFunction; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.inject.Inject; import org.gradle.api.DefaultTask; -import org.gradle.api.file.Directory; import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.file.FileTree; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.ListProperty; @@ -31,25 +28,8 @@ import org.gradle.api.tasks.TaskAction; @CacheableTask public abstract class CompileFregeTask extends DefaultTask { + private static final String FREGE_FILES_GLOB_PATTERN = "**/*.fr"; private final JavaExec javaExec; - private static final String FREGE_FILES_GLOB_PATTERN = "**/*.fr"; - private static final BiFunction<String, Directory, FileTree> - excludeReplSourceFile = - (String replSource, - Directory srcDir) -> - { - if (replSource.isEmpty()) return srcDir.getAsFileTree(); - return srcDir.getAsFileTree().matching( - pattern -> - { - pattern.exclude( - String.format( - "**/%s", - replSource) - ); - } - ); - }; @InputFile @PathSensitive(PathSensitivity.RELATIVE) @@ -66,7 +46,7 @@ public abstract class CompileFregeTask extends DefaultTask { public abstract Property<String> getFregeDependencies(); @Input - public abstract Property<String> getReplSource(); + public abstract Property<String> getFregeMainModuleName(); @OutputDirectory public abstract DirectoryProperty getFregeOutputDir(); @@ -82,15 +62,19 @@ public abstract class CompileFregeTask extends DefaultTask { } @Internal - public final Provider<FileTree> getSourceFileTree() { - return getReplSource().zip( - getFregeMainSourceDir(), - excludeReplSourceFile); + public final Provider<List<String>> getCompileItems() { + return getFregeMainModuleName() + .map(name -> + { + return name.isEmpty() ? getFregeSourceFiles().get() + : List.of(name); + }); } @Internal - public final Provider<List<String>> getSourceFiles() { - return getSourceFileTree() + public final Provider<List<String>> getFregeSourceFiles() { + return getFregeMainSourceDir() + .map(srcDir -> srcDir.getAsFileTree()) .map(tree -> tree.matching(pattern -> pattern.include(FREGE_FILES_GLOB_PATTERN))) .map(tree -> tree.getFiles().stream() .map(file -> file.getAbsolutePath()) @@ -111,14 +95,14 @@ public abstract class CompileFregeTask extends DefaultTask { javaExec = objectFactory.newInstance(JavaExec.class); } - private List<String> buildCompilerArgsFromProperties(List<String> directoryArg) + private List<String> buildCompilerArgsFromProperties(List<String> targetDirectoryArg) { return Stream.of( getDependencyArg().get(), getFregeCompilerFlags().get(), - directoryArg, + targetDirectoryArg, getSourcePathArg().get(), - getSourceFiles().get()) + getCompileItems().get()) .filter(lists -> !lists.isEmpty()) .flatMap(Collection::stream) .collect(Collectors.toList()); @@ -126,11 +110,11 @@ public abstract class CompileFregeTask extends DefaultTask { @TaskAction public void compileFrege() { - List<String> directoryArg = List.of( + List<String> targetDirectoryArg = List.of( "-d", getFregeOutputDir().getAsFile().get().getAbsolutePath()); javaExec.setClasspath(getProject().files(getFregeCompilerJar())) - .setArgs(buildCompilerArgsFromProperties(directoryArg)).exec(); + .setArgs(buildCompilerArgsFromProperties(targetDirectoryArg)).exec(); } }
\ No newline at end of file diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index a318b81..ce2ce01 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -5,8 +5,6 @@ import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; 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"; @@ -54,7 +52,7 @@ public class FregePlugin implements Plugin<Project> task.getFregeOutputDir().set(extension.getOutputDir()); task.getFregeCompilerFlags().set(extension.getCompilerFlags()); task.getFregeDependencies().set(implementation.getAsPath()); - task.getReplSource().set(""); + task.getFregeMainModuleName().set(""); } ); @@ -63,28 +61,15 @@ public class FregePlugin implements Plugin<Project> 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.map( compileTask -> { - compileTask.getReplSource().set(task.getReplSource()); + compileTask.getFregeMainModuleName().set(task.getMainModule()); return compileTask; }) .get()); - task.dependsOn(compileFregeTask); task.getFregeCompilerJar().set( setupFregeCompilerTask.get().getFregeCompilerOutputPath()); task.getFregeOutputDir().set(extension.getOutputDir()); @@ -101,7 +86,7 @@ public class FregePlugin implements Plugin<Project> task.dependsOn(compileFregeTask.map( compileTask -> { - compileTask.getReplSource().set(task.getReplSource()); + compileTask.getFregeMainModuleName().set(task.getReplSource()); return compileTask; }) .get()); diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java index dd18270..7903d7e 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java @@ -4,9 +4,11 @@ import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.RegularFileProperty; 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.TaskAction; import org.gradle.api.tasks.options.Option; @@ -27,6 +29,13 @@ public abstract class ReplFregeTask extends DefaultTask { description = "The filename which you want to load into the repl, e.g. 'myFregeFile.fr'") public abstract Property<String> getReplSource(); + @Internal + public final Provider<String> getReplClassName() + { + return getReplSource() + .map(replSource -> replSource.substring(replSource.lastIndexOf("."))); + } + @TaskAction public void printStartFregeReplCommand() { System.out.println("Execute the following command to start the Frege Repl:"); diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java deleted file mode 100644 index 87f4d2b..0000000 --- a/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java +++ /dev/null @@ -1,41 +0,0 @@ -package ch.fhnw.thga.gradleplugins.internal; - -import org.gradle.api.DefaultTask; -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 org.gradle.api.tasks.options.Option; - -import ch.fhnw.thga.gradleplugins.SharedTaskLogic; - -public abstract class DependencyFregeTask extends DefaultTask { - @InputFile - public abstract RegularFileProperty getFregeCompilerJar(); - - @Input - public abstract Property<String> getFregeDependencies(); - - @InputDirectory - public abstract DirectoryProperty getFregeOutputDir(); - - @Input - @Option(option = "replSource", - description = "The filename which you want to load into the repl, e.g. 'myFregeFile.fr'") - public abstract Property<String> getReplSource(); - - - @TaskAction - public void fregeDependencies() { - System.out.println( - SharedTaskLogic.setupClasspath( - getProject(), - getFregeDependencies(), - getFregeCompilerJar(), - getFregeOutputDir()) - .get().getAsPath()); - } -} |