aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java')
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java71
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