aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ch/fhnw
diff options
context:
space:
mode:
authorThibault Gagnaux <tgagnaux@gmail.com>2021-11-24 08:00:01 +0100
committerThibault Gagnaux <tgagnaux@gmail.com>2021-11-24 08:00:01 +0100
commitfd2fee1260a494ea24887eb1512c27938e8fa230 (patch)
tree06022a059a1966d3b202fcf56995256eb8417408 /src/main/java/ch/fhnw
parent7d98c27eaebb17d18ddb7fff1c2930db6f149521 (diff)
downloadfrege-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/java/ch/fhnw')
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java26
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java4
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);