aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java8
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java12
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java28
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java8
4 files changed, 40 insertions, 16 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
index cfcd393..18a9500 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
@@ -9,7 +9,8 @@ import org.gradle.api.file.ProjectLayout;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
-public abstract class FregeExtension {
+public abstract class FregeExtension
+{
public static final String DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR = "lib";
public static final String DEFAULT_RELATIVE_OUTPUT_DIR = "classes/main/frege";
public static final String DEFAULT_RELATIVE_SOURCE_DIR = "src/main/frege";
@@ -29,10 +30,11 @@ public abstract class FregeExtension {
public abstract ListProperty<String> getCompilerFlags();
- public abstract Property<String> getReplSource();
+ public abstract Property<String> getReplModule();
@Inject
- public FregeExtension(ProjectLayout projectLayout) {
+ public FregeExtension(ProjectLayout projectLayout)
+ {
getCompilerDownloadDir()
.convention(projectLayout.getProjectDirectory().dir(DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR));
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index 957dc83..9b725ac 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -68,8 +68,8 @@ public class FregePlugin implements Plugin<Project>
{
compileTask.getFregeCompileItem().set(task.getMainModule());
return compileTask;
- })
- .get());
+ }
+ ));
task.getFregeCompilerJar().set(
setupFregeCompilerTask.get().getFregeCompilerOutputPath());
task.getFregeOutputDir().set(extension.getOutputDir());
@@ -82,14 +82,14 @@ public class FregePlugin implements Plugin<Project>
ReplFregeTask.class,
task ->
{
- task.getReplSource().set(extension.getReplSource());
+ task.getReplModule().set(extension.getReplModule());
task.dependsOn(compileFregeTask.map(
compileTask ->
{
- compileTask.getFregeCompileItem().set(task.getReplSource());
+ compileTask.getFregeCompileItem().set(task.getReplModule());
return compileTask;
- })
- .get());
+ }
+ ));
task.getFregeCompilerJar().set(
setupFregeCompilerTask.get().getFregeCompilerOutputPath());
task.getFregeOutputDir().set(extension.getOutputDir());
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
index 7903d7e..67af55e 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
@@ -1,7 +1,9 @@
package ch.fhnw.thga.gradleplugins;
+import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.extractClassNameFromFregeModuleName;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.DirectoryProperty;
+import org.gradle.api.file.FileTree;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
@@ -25,15 +27,29 @@ public abstract class ReplFregeTask extends DefaultTask {
public abstract DirectoryProperty getFregeOutputDir();
@Input
- @Option(option = "replSource",
- description = "The filename which you want to load into the repl, e.g. 'myFregeFile.fr'")
- public abstract Property<String> getReplSource();
+ @Option(option = "replModule",
+ description = "The full name of the module which you want to load into the repl, e.g. 'my.mod.Name'")
+ public abstract Property<String> getReplModule();
@Internal
public final Provider<String> getReplClassName()
{
- return getReplSource()
- .map(replSource -> replSource.substring(replSource.lastIndexOf(".")));
+ return getReplModule()
+ .map(replSource -> extractClassNameFromFregeModuleName(replSource));
+ }
+
+ @Internal
+ public final Provider<FileTree> getClasspathWithoutReplClassFile()
+ {
+ return getFregeOutputDir()
+ .map(outDir -> outDir.getAsFileTree())
+ .map(tree -> tree.matching(pattern -> pattern.exclude("**/*.java")))
+ .map(tree -> tree.matching(pattern -> pattern.exclude(
+ String.format(
+ "**/%s.class",
+ getReplClassName().get()
+ )
+ )));
}
@TaskAction
@@ -45,7 +61,7 @@ public abstract class ReplFregeTask extends DefaultTask {
getProject(),
getFregeDependencies(),
getFregeCompilerJar(),
- getFregeOutputDir())
+ getClasspathWithoutReplClassFile())
.get().getAsPath(),
REPL_MAIN_CLASS));
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java
index 57af617..e6191a3 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java
@@ -5,7 +5,8 @@ import org.gradle.api.file.FileCollection;
import org.gradle.api.provider.Provider;
import org.gradle.api.provider.Property;
-public final class SharedTaskLogic {
+public final class SharedTaskLogic
+{
private SharedTaskLogic() {};
public static final Provider<FileCollection> setupClasspath(
@@ -19,4 +20,9 @@ public final class SharedTaskLogic {
: project.files(depsClasspath, paths);
});
}
+
+ public static final String extractClassNameFromFregeModuleName(String moduleName)
+ {
+ return moduleName.substring(moduleName.lastIndexOf(".") + 1);
+ }
}