aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornea <romangraef@gmail.com>2022-06-23 23:17:58 +0200
committernea <romangraef@gmail.com>2022-06-23 23:17:58 +0200
commit0721b7cb0e9e680c3e2541b685b1ba7b9a80cb4b (patch)
treeb8c0247892c6fda956c3c22c0c269e6bd9488b79
parent56a7af2bb5f1eaf09c2c5ad8ea81c6f402a98725 (diff)
downloadfrege-gradle-plugin-0721b7cb0e9e680c3e2541b685b1ba7b9a80cb4b.tar.gz
frege-gradle-plugin-0721b7cb0e9e680c3e2541b685b1ba7b9a80cb4b.tar.bz2
frege-gradle-plugin-0721b7cb0e9e680c3e2541b685b1ba7b9a80cb4b.zip
Add support for the frege-intellij plugin
This commit adds support for the frege intellij plugin by - exposing the frege compiler jar as a dependency, so the plugin can recognize the standard library. - adding the name 'fregeRun' as that is used by the plugin to run files - add support for overriding the main module executed by runFrege so that arbitary files can be run by the plugin
-rw-r--r--example-project/build.gradle4
-rw-r--r--example-project/settings.gradle15
-rw-r--r--example-project/src/main/frege/ch/fhnw/thga/Hello2.fr4
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java56
4 files changed, 52 insertions, 27 deletions
diff --git a/example-project/build.gradle b/example-project/build.gradle
index 77ea9d0..093c54a 100644
--- a/example-project/build.gradle
+++ b/example-project/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id 'ch.fhnw.thga.frege' version '2.0.0-alpha'
+ id 'ch.fhnw.thga.frege' version 'latest'
}
frege {
@@ -7,4 +7,4 @@ frege {
release = '3.25alpha'
mainModule = 'ch.fhnw.thga.HelloFrege'
replModule = 'ch.fhnw.thga.HelloFrege'
-} \ No newline at end of file
+}
diff --git a/example-project/settings.gradle b/example-project/settings.gradle
index 91a56b3..08439eb 100644
--- a/example-project/settings.gradle
+++ b/example-project/settings.gradle
@@ -1,8 +1,13 @@
pluginManagement {
- repositories {
- mavenLocal()
- gradlePluginPortal()
+ resolutionStrategy {
+ eachPlugin {
+ if (requested.id.id == "ch.fhnw.thga.frege") {
+ var x = new Properties()
+ x.load(new FileInputStream(file("../gradle.properties")))
+ useVersion(x.get("version"))
+ }
+ }
}
}
-
-rootProject.name = 'example-project' \ No newline at end of file
+rootProject.name = 'example-project'
+includeBuild("..")
diff --git a/example-project/src/main/frege/ch/fhnw/thga/Hello2.fr b/example-project/src/main/frege/ch/fhnw/thga/Hello2.fr
new file mode 100644
index 0000000..b7e6760
--- /dev/null
+++ b/example-project/src/main/frege/ch/fhnw/thga/Hello2.fr
@@ -0,0 +1,4 @@
+module ch.fhnw.thga.Hello2 where
+
+main args = do
+ putStrLn "Hello from File 2"
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index 8aaedee..8e2c74f 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -13,6 +13,7 @@ public class FregePlugin implements Plugin<Project>
public static final String SETUP_FREGE_TASK_NAME = "setupFrege";
public static final String COMPILE_FREGE_TASK_NAME = "compileFrege";
public static final String RUN_FREGE_TASK_NAME = "runFrege";
+ public static final String RUN_FREGE_ALT_TASK_NAME = "fregeRun";
public static final String TEST_FREGE_TASK_NAME = "testFrege";
public static final String REPL_FREGE_TASK_NAME = "replFrege";
public static final String INIT_FREGE_TASK_NAME = "initFrege";
@@ -22,6 +23,7 @@ public class FregePlugin implements Plugin<Project>
public static final String HELLO_FREGE_DEFAULT_MODULE_NAME = "examples.HelloFrege";
public static final String FREGE_TEST_MODULE_NAME = "frege.tools.Quick";
public static final String FREGE_TEST_DEFAULT_ARGS = "-v";
+ public static final String RUN_FREGE_TASK_MODULE_OVERRIDE = "class_name"; // Used by the intellij-frege plugin to run arbitary files
@Override
public void apply(Project project)
@@ -36,13 +38,17 @@ public class FregePlugin implements Plugin<Project>
config.setCanBeConsumed(true);
}
);
+ Configuration implementation = project.getConfigurations().maybeCreate("implementation");
+ NamedDomainObjectProvider<Configuration> fregeResolved = project.getConfigurations().register("fregeResolved");
+ implementation.extendsFrom(fregeConfiguration.get());
+ implementation.extendsFrom(fregeResolved.get());
FregeExtension extension = project
.getExtensions()
.create(
FREGE_EXTENSION_NAME,
FregeExtension.class);
-
+
project.getPlugins().apply(BasePlugin.class);
project.getTasks().register(
@@ -82,26 +88,33 @@ public class FregePlugin implements Plugin<Project>
}
);
- project.getTasks().register(
- RUN_FREGE_TASK_NAME,
- RunFregeTask.class,
- task ->
- {
- task.getMainModule().set(extension.getMainModule());
- task.dependsOn(compileFregeTask.map(
- compileTask ->
- {
- compileTask.getFregeCompileItem().set(task.getMainModule());
- return compileTask;
- }
- ).get());
- task.getFregeCompilerJar().set(
- setupFregeCompilerTask.get().getFregeCompilerOutputPath());
- task.getFregeOutputDir().set(extension.getOutputDir());
- task.getFregeDependencies().set(fregeConfiguration.get().getAsPath());
- }
+ TaskProvider<RunFregeTask> runTask = project.getTasks().register(
+ RUN_FREGE_TASK_NAME,
+ RunFregeTask.class,
+ task ->
+ {
+ if (project.hasProperty(RUN_FREGE_TASK_MODULE_OVERRIDE))
+ task.getMainModule().set(project.findProperty(RUN_FREGE_TASK_MODULE_OVERRIDE).toString());
+ else
+ task.getMainModule().set(extension.getMainModule());
+ task.dependsOn(compileFregeTask.map(
+ compileTask ->
+ {
+ compileTask.getFregeCompileItem().set(task.getMainModule());
+ return compileTask;
+ }
+ ).get());
+ task.getFregeCompilerJar().set(
+ setupFregeCompilerTask.get().getFregeCompilerOutputPath());
+ task.getFregeOutputDir().set(extension.getOutputDir());
+ task.getFregeDependencies().set(fregeConfiguration.get().getAsPath());
+ }
);
-
+
+ project.getTasks().register(RUN_FREGE_ALT_TASK_NAME, task -> {
+ task.dependsOn(runTask);
+ });
+
project.getTasks().register(
TEST_FREGE_TASK_NAME,
TestFregeTask.class,
@@ -145,5 +158,8 @@ public class FregePlugin implements Plugin<Project>
task.getFregeMainSourceDir().set(extension.getMainSourceDir());
}
);
+ project.afterEvaluate(ignored -> {
+ project.getDependencies().add("implementation", setupFregeCompilerTask.map(SetupFregeTask::getFregeCompilerOutputPath).map(project::files));
+ });
}
}