diff options
author | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-11-24 08:00:01 +0100 |
---|---|---|
committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-11-24 08:00:01 +0100 |
commit | fd2fee1260a494ea24887eb1512c27938e8fa230 (patch) | |
tree | 06022a059a1966d3b202fcf56995256eb8417408 /src/main | |
parent | 7d98c27eaebb17d18ddb7fff1c2930db6f149521 (diff) | |
download | frege-gradle-plugin-fd2fee1260a494ea24887eb1512c27938e8fa230.tar.gz frege-gradle-plugin-fd2fee1260a494ea24887eb1512c27938e8fa230.tar.bz2 frege-gradle-plugin-fd2fee1260a494ea24887eb1512c27938e8fa230.zip |
refactor: allows to configure the classpath with the groovy dependency notation
e.g:
```groovy
dependencies {
implementation 'org.frege-lang:fregefx:0.8.2-SNAPSHOT'
}
```
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java | 26 | ||||
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java | 4 |
2 files changed, 25 insertions, 5 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java index 9dc148f..e81fe76 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -1,6 +1,7 @@ package ch.fhnw.thga.gradleplugins; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -12,6 +13,7 @@ import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.ListProperty; +import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; @@ -39,6 +41,9 @@ public abstract class CompileFregeTask extends DefaultTask { @Input public abstract ListProperty<String> getFregeCompilerFlags(); + @Input + public abstract Property<String> getFregeDependencies(); + @OutputDirectory public abstract DirectoryProperty getFregeOutputDir(); @@ -52,18 +57,29 @@ public abstract class CompileFregeTask extends DefaultTask { return getFregeMainSourcePath().map(srcPath -> List.of("-sp", srcPath)); } + @Internal + public final Provider<List<String>> getDependencyArg() { + return getFregeDependencies().map(depsClasspath -> { + return depsClasspath.isEmpty() ? Collections.emptyList() : List.of("-fp", depsClasspath); + }); + } + @Inject public CompileFregeTask(ObjectFactory objectFactory) { 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()); + } + @TaskAction public void compileFrege() { List<String> directoryArg = List.of("-d", getFregeOutputDir().getAsFile().get().getAbsolutePath()); - List<String> compilerArgs = Stream - .of(getFregeCompilerFlags().get(), directoryArg, getSourcePathArg().get(), - List.of(getFregeMainSourcePath().get())) - .flatMap(Collection::stream).collect(Collectors.toList()); - javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(compilerArgs).exec(); + javaExec.setClasspath(getProject().files(getFregeCompilerJar())) + .setArgs(buildCompilerArgsFromProperties(directoryArg)).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 4ac6c61..ac6ba94 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -2,6 +2,7 @@ package ch.fhnw.thga.gradleplugins; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.tasks.TaskProvider; public class FregePlugin implements Plugin<Project> { @@ -10,9 +11,11 @@ public class FregePlugin implements Plugin<Project> { public static final String RUN_FREGE_TASK_NAME = "runFrege"; public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; public static final String FREGE_EXTENSION_NAME = "frege"; + public static final String FREGE_IMPLEMENTATION_SCOPE = "implementation"; @Override public void apply(Project project) { + Configuration implementation = project.getConfigurations().create(FREGE_IMPLEMENTATION_SCOPE); FregeExtension extension = project.getExtensions().create(FREGE_EXTENSION_NAME, FregeExtension.class); TaskProvider<SetupFregeTask> setupFregeCompilerTask = project.getTasks().register(SETUP_FREGE_TASK_NAME, SetupFregeTask.class, task -> { @@ -28,6 +31,7 @@ public class FregePlugin implements Plugin<Project> { task.getFregeMainSourceDir().set(extension.getMainSourceDir()); task.getFregeOutputDir().set(extension.getOutputDir()); task.getFregeCompilerFlags().set(extension.getCompilerFlags()); + task.getFregeDependencies().set(implementation.getAsPath()); }); project.getTasks().register(RUN_FREGE_TASK_NAME, RunFregeTask.class, task -> { task.dependsOn(compileFregeTask); |