diff --git a/README.md b/README.md index de65763..b6da66f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ To use the Gradle Plugins DSL, add the following lines to your `build.gradle` sc ```gradle plugins { - id "org.javacc.javacc" version "4.0.0" + id "org.javacc.javacc" version "4.0.1" } ``` diff --git a/build.gradle b/build.gradle index be19ce0..f58cca1 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { allprojects { group = 'org.javacc.plugin' - version = '4.0.0' + version = '4.0.1' } defaultTasks 'clean', ':javacc-gradle-plugin:build' diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/AbstractJavaccTask.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/AbstractJavaccTask.java index d4afc62..5828091 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/AbstractJavaccTask.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/AbstractJavaccTask.java @@ -1,10 +1,12 @@ package org.javacc.plugin.gradle.javacc; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; -import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.FileTree; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; @@ -13,16 +15,12 @@ import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.SkipWhenEmpty; import org.gradle.api.tasks.SourceTask; -import org.gradle.api.tasks.TaskCollection; -import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.process.ExecOperations; -import groovy.lang.Closure; - public abstract class AbstractJavaccTask extends SourceTask { protected Map programArguments; protected final ExecOperations execOperations; - protected TaskCollection javaCompileTasks; + protected final List javaSources = new ArrayList<>(); private File inputDirectory; private File outputDirectory; @@ -37,12 +35,6 @@ protected AbstractJavaccTask(String inputDirectory, String outputDirectory, Stri this.execOperations = execOperations; } - @Override - public Task configure(Closure closure) { - javaCompileTasks = this.getProject().getTasks().withType(JavaCompile.class); - return super.configure(closure); - } - @Internal public Map getArguments() { return programArguments; @@ -100,4 +92,8 @@ public AbstractJavaccTask setOutputDirectory(File outputDirectory) { protected Configuration getClasspath() { return classpath; } + + public void addJavaSources(FileTree source) { + javaSources.add(source); + } } diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJavaccTask.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJavaccTask.java index 1c0f30c..564cfd9 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJavaccTask.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJavaccTask.java @@ -32,7 +32,7 @@ public CompileJavaccTask(ExecOperations execOperations) { @TaskAction public void run() { CompilerInputOutputConfiguration inputOutputDirectories - = new JavaccCompilerInputOutputConfiguration(getInputDirectory(), getOutputDirectory(), getSource(), javaCompileTasks); + = new JavaccCompilerInputOutputConfiguration(getInputDirectory(), getOutputDirectory(), getSource(), javaSources); JavaccProgramInvoker javaccInvoker = new JavaccProgramInvoker(getClasspath(), inputOutputDirectories.getTempOutputDirectory(), execOperations); ProgramArguments arguments = new ProgramArguments(); diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjdocTask.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjdocTask.java index e3e69ca..c17d096 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjdocTask.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjdocTask.java @@ -31,7 +31,7 @@ public CompileJjdocTask(ExecOperations execOperations) { @TaskAction public void run() { CompilerInputOutputConfiguration inputOutputDirectories - = new JavaccCompilerInputOutputConfiguration(getInputDirectory(), getOutputDirectory(), getSource(), javaCompileTasks); + = new JavaccCompilerInputOutputConfiguration(getInputDirectory(), getOutputDirectory(), getSource(), javaSources); JjdocProgramInvoker jjdocInvoker = new JjdocProgramInvoker(getClasspath(), inputOutputDirectories.getTempOutputDirectory(), execOperations); ProgramArguments arguments = new ProgramArguments(); diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjtreeTask.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjtreeTask.java index b7f7c18..77eb7cb 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjtreeTask.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/CompileJjtreeTask.java @@ -31,7 +31,7 @@ public CompileJjtreeTask(ExecOperations execOperations) { @TaskAction public void run() { CompilerInputOutputConfiguration inputOutputDirectories - = new JavaccCompilerInputOutputConfiguration(getInputDirectory(), getOutputDirectory(), getSource(), javaCompileTasks); + = new JavaccCompilerInputOutputConfiguration(getInputDirectory(), getOutputDirectory(), getSource(), javaSources); JjtreeProgramInvoker jjtreeInvoker = new JjtreeProgramInvoker(getClasspath(), inputOutputDirectories.getTempOutputDirectory(), execOperations); ProgramArguments arguments = new ProgramArguments(); diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/JavaToJavaccDependencyAction.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/JavaToJavaccDependencyAction.java index 31de3af..0f4271a 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/JavaToJavaccDependencyAction.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/JavaToJavaccDependencyAction.java @@ -55,6 +55,7 @@ private void addJavaccDependencyToJavaCompileTask(Collection javaCo for (JavaCompile task : javaCompilationTasks) { task.dependsOn(compileJavaccTask); task.source(compileJavaccTask.getOutputDirectory()); + compileJavaccTask.addJavaSources(task.getSource()); } } diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/CompilerInputOutputConfiguration.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/CompilerInputOutputConfiguration.java index 0f11b11..951a842 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/CompilerInputOutputConfiguration.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/CompilerInputOutputConfiguration.java @@ -34,10 +34,4 @@ public interface CompilerInputOutputConfiguration { */ FileTree getJavaSourceTree(); - /** - * @return a {@link FileTree} representation of all the source files, both Java and specific to the compiler - * @see #getSource() - * @see #getJavaSourceTree() - */ - FileTree getCompleteSourceTree(); } diff --git a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfiguration.java b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfiguration.java index 1555866..fa62412 100644 --- a/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfiguration.java +++ b/subprojects/plugin/src/main/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfiguration.java @@ -1,29 +1,22 @@ package org.javacc.plugin.gradle.javacc.compiler; import java.io.File; -import java.util.HashSet; -import java.util.Set; +import java.util.List; import org.gradle.api.file.FileTree; import org.gradle.api.specs.Spec; -import org.gradle.api.tasks.TaskCollection; -import org.gradle.api.tasks.compile.JavaCompile; public class JavaccCompilerInputOutputConfiguration implements CompilerInputOutputConfiguration { private final File inputDirectory; private final File outputDirectory; private final FileTree source; - private final Set javaCompileTasks; + private final List javaSources; - public JavaccCompilerInputOutputConfiguration(File inputDirectory, File outputDirectory, FileTree source, TaskCollection javaCompileTasks) { + public JavaccCompilerInputOutputConfiguration(File inputDirectory, File outputDirectory, FileTree source, List javaSources) { this.inputDirectory = inputDirectory; this.outputDirectory = outputDirectory; this.source = source; - this.javaCompileTasks = new HashSet<>(); - - if (javaCompileTasks != null) { - this.javaCompileTasks.addAll(javaCompileTasks); - } + this.javaSources = javaSources; } @Override @@ -46,30 +39,15 @@ public FileTree getSource() { return source; } - @Override - public FileTree getCompleteSourceTree() { - FileTree javaccTaskSourceTree = getSource(); - FileTree javaTasksSourceTree = getJavaSourceTree(); - FileTree completeSourceTree; - - if (javaTasksSourceTree == null) { - completeSourceTree = javaccTaskSourceTree; - } else { - completeSourceTree = javaccTaskSourceTree.plus(javaTasksSourceTree); - } - - return excludeOutputDirectory(completeSourceTree); - } - @Override public FileTree getJavaSourceTree() { FileTree javaSourceTree = null; - for (JavaCompile task : javaCompileTasks) { + for (FileTree excluded : javaSources) { if (javaSourceTree == null) { - javaSourceTree = task.getSource(); + javaSourceTree = excluded; } else { - javaSourceTree = javaSourceTree.plus(task.getSource()); + javaSourceTree = javaSourceTree.plus(excluded); } } diff --git a/subprojects/plugin/src/test/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfigurationTest.java b/subprojects/plugin/src/test/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfigurationTest.java index 29e63f2..0fd2a07 100644 --- a/subprojects/plugin/src/test/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfigurationTest.java +++ b/subprojects/plugin/src/test/java/org/javacc/plugin/gradle/javacc/compiler/JavaccCompilerInputOutputConfigurationTest.java @@ -10,14 +10,16 @@ import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.file.FileTree; import org.gradle.api.tasks.SourceTask; -import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.testfixtures.ProjectBuilder; import org.junit.Before; @@ -25,8 +27,6 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; -import org.javacc.plugin.gradle.javacc.CompileJavaccTask; - public class JavaccCompilerInputOutputConfigurationTest { @Rule @@ -74,7 +74,7 @@ public void getJavaSourceTreeReturnsJavaCompileSourceWhenSingleJavaCompileTask() CompilerInputOutputConfiguration configuration = builder .withInputDirectory(inputDirectory) .withOutputDirectory(outputDirectory) - .withJavaCompileTasks(project.getTasks().withType(JavaCompile.class)) + .withJavaSources(getJavaSources(project)) .build(); FileTree javaSourceTree = configuration.getJavaSourceTree(); @@ -82,6 +82,11 @@ public void getJavaSourceTreeReturnsJavaCompileSourceWhenSingleJavaCompileTask() assertThat(javaSourceTree, contains(javaFile.getCanonicalFile())); } + private List getJavaSources(Project project) { + return project.getTasks().withType(JavaCompile.class) + .stream().map(JavaCompile::getSource).collect(Collectors.toList()); + } + private File addTaskWithSourceFile(Project project, String taskName, String sourceFileName, Class taskType) throws IOException { Map options = new HashMap<>(); options.put(Task.TASK_TYPE, taskType); @@ -102,7 +107,7 @@ public void getJavaSourceTreeReturnsAggregatedJavaCompileSourceWhenMultipleJavaC CompilerInputOutputConfiguration configuration = builder .withInputDirectory(inputDirectory) .withOutputDirectory(outputDirectory) - .withJavaCompileTasks(project.getTasks().withType(JavaCompile.class)) + .withJavaSources(getJavaSources(project)) .build(); FileTree javaSourceTree = configuration.getJavaSourceTree(); @@ -118,7 +123,7 @@ public void getJavaSourceTreeExcludesOutputFolder() throws IOException { CompilerInputOutputConfiguration configuration = builder .withInputDirectory(inputDirectory) .withOutputDirectory(outputDirectory) - .withJavaCompileTasks(project.getTasks().withType(JavaCompile.class)) + .withJavaSources(getJavaSources(project)) .build(); FileTree javaSourceTree = configuration.getJavaSourceTree(); @@ -127,61 +132,11 @@ public void getJavaSourceTreeExcludesOutputFolder() throws IOException { assertThat(javaSourceTree, not(contains(outputFile.getCanonicalFile()))); } - @Test - public void getCompleteSourceTreeReturnsSourceWhenNoJavaCompileTask() throws IOException { - Project project = ProjectBuilder.builder().withProjectDir(testFolder.getRoot()).build(); - File javaccFile = addTaskWithSourceFile(project, "compileJavacc", "input/TestClass.jj", CompileJavaccTask.class); - CompilerInputOutputConfiguration configuration = builder - .withInputDirectory(inputDirectory) - .withOutputDirectory(outputDirectory) - .withSource(((SourceTask) project.getTasks().getByName("compileJavacc")).getSource()) - .build(); - - FileTree completeSourceTree = configuration.getCompleteSourceTree(); - - assertThat(completeSourceTree, contains(javaccFile.getCanonicalFile())); - } - - @Test - public void getCompleteSourceTreeReturnsSourceAndJavaSourceWhenProjectHasJavaCompileTasks() throws IOException { - Project project = ProjectBuilder.builder().withProjectDir(testFolder.getRoot()).build(); - File javaccFile = addTaskWithSourceFile(project, "compileJavacc", "input/TestClass.jj", CompileJavaccTask.class); - testFolder.newFolder("inputJava"); - File javaFile = addTaskWithSourceFile(project, "compileJava", "inputJava/MyClass.java", JavaCompile.class); - CompilerInputOutputConfiguration configuration = builder - .withInputDirectory(inputDirectory) - .withOutputDirectory(outputDirectory) - .withSource(((SourceTask) project.getTasks().getByName("compileJavacc")).getSource()) - .withJavaCompileTasks(project.getTasks().withType(JavaCompile.class)) - .build(); - - FileTree completeSourceTree = configuration.getCompleteSourceTree(); - - assertThat(completeSourceTree, containsInAnyOrder(javaccFile.getCanonicalFile(), javaFile.getCanonicalFile())); - } - - @Test - public void getCompleteSourceTreeExcludesOutputFolder() throws IOException { - Project project = ProjectBuilder.builder().withProjectDir(testFolder.getRoot()).build(); - File javaccFile = addTaskWithSourceFile(project, "compileJavacc", "input/TestClass.jj", CompileJavaccTask.class); - File outputFile = addTaskWithSourceFile(project, "compileJavaccGenerated", "output/Generated.java", JavaCompile.class); - CompilerInputOutputConfiguration configuration = builder - .withInputDirectory(inputDirectory) - .withOutputDirectory(outputDirectory) - .withSource(((SourceTask) project.getTasks().getByName("compileJavacc")).getSource()) - .withJavaCompileTasks(project.getTasks().withType(JavaCompile.class)) - .build(); - - FileTree completeSourceTree = configuration.getCompleteSourceTree(); - - assertThat(completeSourceTree, contains(javaccFile.getCanonicalFile())); - assertThat(completeSourceTree, not(contains(outputFile.getCanonicalFile()))); - } private static class JavaccConfigurationBuilder { private File inputDirectory; private File outputDirectory; - private TaskCollection javaCompileTasks; + private List javaSourceTrees = new ArrayList<>(); private FileTree source; private JavaccConfigurationBuilder() { @@ -203,20 +158,14 @@ public JavaccConfigurationBuilder withOutputDirectory(File outputDirectory) { return this; } - public JavaccConfigurationBuilder withJavaCompileTasks(TaskCollection javaCompileTasks) { - this.javaCompileTasks = javaCompileTasks; - - return this; - } - - public JavaccConfigurationBuilder withSource(FileTree source) { - this.source = source; + public JavaccConfigurationBuilder withJavaSources(List javaSourceTrees) { + this.javaSourceTrees.addAll(javaSourceTrees); return this; } public JavaccCompilerInputOutputConfiguration build() { - return new JavaccCompilerInputOutputConfiguration(inputDirectory, outputDirectory, source, javaCompileTasks); + return new JavaccCompilerInputOutputConfiguration(inputDirectory, outputDirectory, source, javaSourceTrees); } } } diff --git a/subprojects/release/build.gradle b/subprojects/release/build.gradle index d5bb92f..d386766 100644 --- a/subprojects/release/build.gradle +++ b/subprojects/release/build.gradle @@ -22,12 +22,9 @@ ext.gitRepo = Grgit.open(rootProject.projectDir) def releaseVersionProperty = 'releaseVersion' def nextVersionProperty = 'nextVersion' -task verifyReleaseVersions { +tasks.register('verifyReleaseVersions') { description "Verifies that the [${releaseVersionProperty}] and [${nextVersionProperty}] project properties are specified" group 'Release' -} - -verifyReleaseVersions { doLast { if (!project.hasProperty(releaseVersionProperty) || !project.hasProperty(nextVersionProperty)) { throw new RuntimeException("[${releaseVersionProperty}] and [${nextVersionProperty}] project properties are mandatory.") @@ -35,12 +32,9 @@ verifyReleaseVersions { } } -task verifySnapshotDependencies { +tasks.register('verifySnapshotDependencies') { description 'Fails the build if there are SNAPSHOT dependencies.' group 'Release' -} - -verifySnapshotDependencies { doLast { configurations.each { configuration -> configuration.dependencies.each { dependency -> @@ -67,12 +61,9 @@ def commitChangedFiles(String commitMessage) { } } -task tagRelease { +tasks.register('tagRelease') { description 'Creates a tag in SCM for the release.' group 'Release' -} - -tagRelease { doLast { gitRepo.tag.add { name = "javacc-gradle-plugin-${releaseVersion}" @@ -174,8 +165,9 @@ writeNextVersion.mustRunAfter tagRelease copyNextBuildFile.mustRunAfter writeNextVersion -task release(dependsOn: [project(':javacc-gradle-plugin').clean, verifyReleaseVersions, verifySnapshotDependencies, - project(':javacc-gradle-plugin').build, copyReleaseBuildFile, tagRelease, copyNextBuildFile]) { +tasks.register('release') { + dependsOn project(':javacc-gradle-plugin').clean, verifyReleaseVersions, verifySnapshotDependencies, + project(':javacc-gradle-plugin').build, copyReleaseBuildFile, tagRelease, copyNextBuildFile description "Releases the plugin by verifying there are no snapshot dependencies, " + "writing the next version to build.gradle and committing the build file. " + "Versions must be specified by using the [${releaseVersionProperty}] and [${nextVersionProperty}] project properties."