diff options
author | tricktron <tgagnaux@gmail.com> | 2021-12-21 15:54:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-21 15:54:51 +0100 |
commit | 2eeb5f4fe33f325d07988c99c758909c4aaad957 (patch) | |
tree | 1edffe9354d85cc4ce4717cda443be17ee1cf8a7 /src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java | |
parent | 3c4bfaeb12fc7480782efd5f2f78831ab0761bbb (diff) | |
parent | 6fe74444e80d68dffa61e2e57b78092e50a54772 (diff) | |
download | frege-gradle-plugin-2eeb5f4fe33f325d07988c99c758909c4aaad957.tar.gz frege-gradle-plugin-2eeb5f4fe33f325d07988c99c758909c4aaad957.tar.bz2 frege-gradle-plugin-2eeb5f4fe33f325d07988c99c758909c4aaad957.zip |
Merge pull request #17 from tricktron/f-repl-with-source-deps
Repl with all Source Dependencies
Diffstat (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java')
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java | 65 |
1 files changed, 58 insertions, 7 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java index e81fe76..bc3c8f7 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -3,13 +3,16 @@ 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; @@ -29,6 +32,24 @@ import org.gradle.api.tasks.TaskAction; @CacheableTask public abstract class CompileFregeTask extends DefaultTask { 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) @@ -44,6 +65,9 @@ public abstract class CompileFregeTask extends DefaultTask { @Input public abstract Property<String> getFregeDependencies(); + @Input + public abstract Property<String> getReplSource(); + @OutputDirectory public abstract DirectoryProperty getFregeOutputDir(); @@ -58,9 +82,27 @@ public abstract class CompileFregeTask extends DefaultTask { } @Internal + public final Provider<FileTree> getSourceFileTree() { + return getReplSource().zip( + getFregeMainSourceDir(), + excludeReplSourceFile); + } + + @Internal + public final Provider<List<String>> getSourceFiles() { + return getSourceFileTree() + .map(tree -> tree.matching(pattern -> pattern.include(FREGE_FILES_GLOB_PATTERN))) + .map(tree -> tree.getFiles().stream() + .map(file -> file.getAbsolutePath()) + .collect(Collectors.toList()) + ); + } + + @Internal public final Provider<List<String>> getDependencyArg() { return getFregeDependencies().map(depsClasspath -> { - return depsClasspath.isEmpty() ? Collections.emptyList() : List.of("-fp", depsClasspath); + return depsClasspath.isEmpty() ? Collections.emptyList() + : List.of("-fp", depsClasspath); }); } @@ -69,16 +111,25 @@ public abstract class CompileFregeTask extends DefaultTask { javaExec = objectFactory.newInstance(JavaExec.class); } - private List<String> buildCompilerArgsFromProperties(List<String> directoryArg) { - return Stream - .of(getDependencyArg().get(), getFregeCompilerFlags().get(), directoryArg, getSourcePathArg().get(), - List.of(getFregeMainSourcePath().get())) - .filter(lists -> !lists.isEmpty()).flatMap(Collection::stream).collect(Collectors.toList()); + private List<String> buildCompilerArgsFromProperties(List<String> directoryArg) + { + return Stream.of( + getDependencyArg().get(), + getFregeCompilerFlags().get(), + directoryArg, + getSourcePathArg().get(), + getSourceFiles().get()) + .filter(lists -> !lists.isEmpty()) + .flatMap(Collection::stream) + .collect(Collectors.toList()); } @TaskAction public void compileFrege() { - List<String> directoryArg = List.of("-d", getFregeOutputDir().getAsFile().get().getAbsolutePath()); + List<String> directoryArg = List.of( + "-d", + getFregeOutputDir().getAsFile().get().getAbsolutePath()); + javaExec.setClasspath(getProject().files(getFregeCompilerJar())) .setArgs(buildCompilerArgsFromProperties(directoryArg)).exec(); } |