diff options
Diffstat (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java')
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java | 71 |
1 files changed, 33 insertions, 38 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..a39a07b 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -3,17 +3,15 @@ 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.logging.LogLevel; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; @@ -28,28 +26,12 @@ import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.PathSensitive; import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.options.Option; @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) - ); - } - ); - }; + private static final String FREGE_FILES_GLOB_PATTERN = "**/*.fr"; + private JavaExec javaExec; @InputFile @PathSensitive(PathSensitivity.RELATIVE) @@ -66,7 +48,10 @@ public abstract class CompileFregeTask extends DefaultTask { public abstract Property<String> getFregeDependencies(); @Input - public abstract Property<String> getReplSource(); + @Option(option = "compileItem", + description = "The absolute path to the frege file or the module name" + ) + public abstract Property<String> getFregeCompileItem(); @OutputDirectory public abstract DirectoryProperty getFregeOutputDir(); @@ -82,15 +67,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 getFregeCompileItem() + .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,26 +100,32 @@ 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()); } @TaskAction - public void compileFrege() { - List<String> directoryArg = List.of( + public void compileFrege() + { + this.getLogging().captureStandardOutput(LogLevel.LIFECYCLE); + List<String> targetDirectoryArg = List.of( "-d", - getFregeOutputDir().getAsFile().get().getAbsolutePath()); - - javaExec.setClasspath(getProject().files(getFregeCompilerJar())) - .setArgs(buildCompilerArgsFromProperties(directoryArg)).exec(); + getFregeOutputDir().getAsFile().get().getAbsolutePath() + ); + javaExec.setClasspath( + getProject() + .files(getFregeCompilerJar())) + .setErrorOutput(System.out) + .setArgs(buildCompilerArgsFromProperties(targetDirectoryArg)) + .exec(); } }
\ No newline at end of file |