From b87c1babf4a1d0b9cdf417b8aaf8da8edc473766 Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Wed, 30 Jun 2021 15:37:38 +0200 Subject: Adds first `SetupFregeCompilerTaks` with some tests --- .../ch/fhnw/thga/gradleplugins/FregeExtension.java | 33 +++++++++++++ .../ch/fhnw/thga/gradleplugins/FregeInitTask.java | 54 ---------------------- .../ch/fhnw/thga/gradleplugins/FregePlugin.java | 25 ++++++---- .../thga/gradleplugins/SetupFregeCompilerTask.java | 43 +++++++++++++++++ 4 files changed, 93 insertions(+), 62 deletions(-) create mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java delete mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java create mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java (limited to 'src/main') diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java new file mode 100644 index 0000000..5e8834d --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -0,0 +1,33 @@ +package ch.fhnw.thga.gradleplugins; + +import javax.inject.Inject; + +import org.gradle.api.file.ProjectLayout; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; + +import groovy.transform.Internal; + +public abstract class FregeExtension { + public static final String DEFAULT_FREGE_EXTENSION_NAMESPACE = "frege"; + public static final String FREGE_VERSION_BUILD_FILE_KEY = "fregeVersion"; + public static final String FREGE_RELEASE_BUILD_FILE_KEY = "fregeRelease"; + public static final String FREGE_COMPILER_BUILD_FILE_KEY = "fregeCompilerPath"; + + public abstract Property getFregeVersion(); + + public abstract Property getFregeRelease(); + + public abstract RegularFileProperty getFregeCompilerPath(); + + @Internal + public Provider getDefaultJarName() { + return getFregeVersion().map(version -> version + ".jar"); + } + + @Inject + public FregeExtension(ProjectLayout projectLayout) { + getFregeCompilerPath().set(projectLayout.getProjectDirectory().file("lib/frege" + getDefaultJarName())); + } +} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java deleted file mode 100644 index e96bfb1..0000000 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java +++ /dev/null @@ -1,54 +0,0 @@ -package ch.fhnw.thga.gradleplugins; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; - -import org.apache.log4j.Logger; -import org.gradle.api.DefaultTask; -import org.gradle.api.file.ProjectLayout; -import org.gradle.api.file.RegularFile; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.OutputFile; -import org.gradle.api.tasks.TaskAction; - -public abstract class FregeInitTask extends DefaultTask { - private final static Logger LOGGER = Logger.getLogger(FregeInitTask.class.getName()); - private static final String DEFAULT_FREGE_VERSION = "3.25.84"; - private static final String DEFAULT_FREGE_RELEASE = "3.25alpha"; - - @Input - public abstract Property getFregeVersion(); - - @Input - public abstract Property getFregeRelease(); - - @OutputFile - public abstract RegularFileProperty getFregeCompilerJar(); - - public FregeInitTask() { - getFregeVersion().convention(DEFAULT_FREGE_VERSION); - getFregeRelease().convention(DEFAULT_FREGE_RELEASE); - getFregeCompilerJar().convention(getProject().getLayout().getBuildDirectory().file("lib/frege" + getFregeVersion() + ".jar")); - } - - @TaskAction - public void downloadFregeCompiler() { - try { - ReadableByteChannel readChannel = Channels.newChannel( - new URL("https://github.com/Frege/frege/releases/download/" + - getFregeRelease().get() + "/frege" + getFregeVersion() + ".jar").openStream()); - FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerJar().get().getAsFile().getAbsolutePath()); - FileChannel writeChannel = fregeCompilerDestinationPath.getChannel(); - writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); - } catch (Exception e) { - LOGGER.error(e.getMessage(), e.getCause()); - } - } -} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 678a10c..ffa788f 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -2,19 +2,28 @@ 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.file.RegularFile; +import org.gradle.api.provider.Property; public class FregePlugin implements Plugin { + public static final String SETUP_FREGE_COMPILER_TASK_NAME = "setupFregeCompiler"; + public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; + public static final String FREGE_EXTENSION_NAME = "frege"; @Override public void apply(Project project) { - project.getTasks().create("fregeInit", FregeInitTask.class); - Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> { - c.setVisible(false); - c.setCanBeConsumed(false); - c.setCanBeResolved(true); - c.setDescription("The frege compiler"); - c.defaultDependencies(d -> d.add(project.getDependencies().create("frege3.25.84.jar"))); + FregeExtension extension = project.getExtensions().create(FREGE_EXTENSION_NAME, FregeExtension.class); + project.getTasks().register(SETUP_FREGE_COMPILER_TASK_NAME, SetupFregeCompilerTask.class, task -> { + task.getFregeVersion().set(extension.getFregeVersion()); + task.getFregeRelease().set(extension.getFregeRelease()); + task.getFregeCompilerPath().set(extension.getFregeCompilerPath()); }); + //Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> { + // c.setVisible(false); + // c.setCanBeConsumed(false); + // c.setCanBeResolved(true); + // c.setDescription("The frege compiler"); + // c.defaultDependencies(d -> d.add(project.getDependencies().create("frege3.25.84.jar"))); + //}); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java new file mode 100644 index 0000000..a7f48ba --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java @@ -0,0 +1,43 @@ +package ch.fhnw.thga.gradleplugins; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; + +import org.gradle.api.DefaultTask; +import org.gradle.api.GradleException; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +public abstract class SetupFregeCompilerTask extends DefaultTask { + + @Input + public abstract Property getFregeVersion(); + + @Input + public abstract Property getFregeRelease(); + + @OutputFile + public abstract RegularFileProperty getFregeCompilerPath(); + + @TaskAction + public void downloadFregeCompiler() { + try { + ReadableByteChannel readChannel = Channels.newChannel( + new URL("https://github.com/Frege/frege/releases/download/" + + getFregeRelease().get() + "/frege" + getFregeVersion().get() + ".jar").openStream()); + FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerPath().get().getAsFile().getAbsolutePath()); + FileChannel writeChannel = fregeCompilerDestinationPath.getChannel(); + writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); + System.out.println("Successfully downloaded compiler to" + getFregeCompilerPath().get()); + } catch (IOException e) { + throw new GradleException(e.getMessage()); + } + } +} -- cgit