diff options
author | Thibault Gagnaux <tgagnaux@gmail.com> | 2022-02-23 11:04:50 +0100 |
---|---|---|
committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2022-02-23 11:06:00 +0100 |
commit | a4879784e7be87b5ee184b47eb8faba635019a5d (patch) | |
tree | 0af50423e29ab1038d6007607791dc929a14f504 /src/main/java | |
parent | adbe33ac3ce08e4c5d73ba659313c7904273887a (diff) | |
download | frege-gradle-plugin-a4879784e7be87b5ee184b47eb8faba635019a5d.tar.gz frege-gradle-plugin-a4879784e7be87b5ee184b47eb8faba635019a5d.tar.bz2 frege-gradle-plugin-a4879784e7be87b5ee184b47eb8faba635019a5d.zip |
refactor: finishes the replFregeTask refactoring
Diffstat (limited to 'src/main/java')
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); + } } |