aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java41
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java12
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java11
3 files changed, 51 insertions, 13 deletions
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java
index c4d5bad..9170547 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java
@@ -7,6 +7,8 @@ import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSe
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.COMPLETION_FR;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.assertFileDoesNotExist;
import static org.gradle.testkit.runner.TaskOutcome.FAILED;
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -116,7 +118,46 @@ public class RunFregeTaskFunctionalTest
);
assertTrue(result.getOutput().contains("Frege rocks"));
}
+
+ @Test
+ void given_two_frege_files_then_only_the_specified_main_module_is_compiled(
+ @TempDir File testProjectDir)
+ throws Exception
+ {
+ Project project = FregeProjectBuilder
+ .builder()
+ .projectRoot(testProjectDir)
+ .buildFile(MINIMAL_BUILD_FILE_CONFIG)
+ .fregeSourceFiles(() -> Stream.of(MAIN_FR, COMPLETION_FR))
+ .build();
+
+ BuildResult result = runGradleTask(
+ testProjectDir,
+ RUN_FREGE_TASK_NAME,
+ "--mainModule=ch.fhnw.thga.Main");
+
+ assertTrue(
+ project
+ .getTasks()
+ .getByName(RUN_FREGE_TASK_NAME)
+ instanceof RunFregeTask
+ );
+ assertEquals(
+ SUCCESS,
+ result.task(":" + RUN_FREGE_TASK_NAME).getOutcome()
+ );
+ assertTrue(result.getOutput().contains("Frege rocks"));
+ assertFileDoesNotExist(
+ testProjectDir,
+ "build/classes/main/frege/ch/fhnw/thga/Completion.java"
+ );
+ assertFileDoesNotExist(
+ testProjectDir,
+ "build/classes/main/frege/ch/fhnw/thga/Completion.class"
+ );
+ }
}
+
@Nested
@IndicativeSentencesGeneration(
separator = " -> ",
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
index a39a07b..0620e51 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
@@ -11,7 +11,6 @@ import javax.inject.Inject;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.DirectoryProperty;
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;
@@ -22,6 +21,7 @@ import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.JavaExec;
+import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
@@ -48,6 +48,7 @@ public abstract class CompileFregeTask extends DefaultTask {
public abstract Property<String> getFregeDependencies();
@Input
+ @Optional
@Option(option = "compileItem",
description = "The absolute path to the frege file or the module name"
)
@@ -69,11 +70,8 @@ public abstract class CompileFregeTask extends DefaultTask {
@Internal
public final Provider<List<String>> getCompileItems() {
return getFregeCompileItem()
- .map(name ->
- {
- return name.isEmpty() ? getFregeSourceFiles().get()
- : List.of(name);
- });
+ .map(name -> List.of(name))
+ .orElse(getFregeSourceFiles());
}
@Internal
@@ -116,7 +114,6 @@ public abstract class CompileFregeTask extends DefaultTask {
@TaskAction
public void compileFrege()
{
- this.getLogging().captureStandardOutput(LogLevel.LIFECYCLE);
List<String> targetDirectoryArg = List.of(
"-d",
getFregeOutputDir().getAsFile().get().getAbsolutePath()
@@ -124,7 +121,6 @@ public abstract class CompileFregeTask extends DefaultTask {
javaExec.setClasspath(
getProject()
.files(getFregeCompilerJar()))
- .setErrorOutput(System.out)
.setArgs(buildCompilerArgsFromProperties(targetDirectoryArg))
.exec();
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index e1f410a..a4fa7b8 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -3,6 +3,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.logging.LogLevel;
import org.gradle.api.tasks.TaskProvider;
public class FregePlugin implements Plugin<Project>
@@ -52,7 +53,6 @@ public class FregePlugin implements Plugin<Project>
task.getFregeOutputDir().set(extension.getOutputDir());
task.getFregeCompilerFlags().set(extension.getCompilerFlags());
task.getFregeDependencies().set(implementation.getAsPath());
- task.getFregeCompileItem().set("");
}
);
@@ -61,7 +61,6 @@ public class FregePlugin implements Plugin<Project>
RunFregeTask.class,
task ->
{
-
task.getMainModule().set(extension.getMainModule());
task.dependsOn(compileFregeTask.map(
compileTask ->
@@ -69,7 +68,7 @@ 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());
@@ -86,10 +85,12 @@ public class FregePlugin implements Plugin<Project>
task.dependsOn(compileFregeTask.map(
compileTask ->
{
- compileTask.getFregeCompileItem().set(task.getReplModule());
+ compileTask.getFregeCompileItem().set(extension.getReplModule());
+ compileTask.getLogging().captureStandardOutput(LogLevel.LIFECYCLE);
+ compileTask.getLogging().captureStandardError(LogLevel.LIFECYCLE);
return compileTask;
}
- ));
+ ).get());
task.getFregeCompilerJar().set(
setupFregeCompilerTask.get().getFregeCompilerOutputPath());
task.getFregeOutputDir().set(extension.getOutputDir());