Skip to content

Commit

Permalink
Java 17 support (closes #196)
Browse files Browse the repository at this point in the history
  • Loading branch information
keeganwitt committed Sep 18, 2021
1 parent dda6992 commit b725f1e
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,21 @@
*/
public abstract class AbstractCompileMojo extends AbstractGroovySourcesMojo {

/**
* Groovy 4.0.0 alpha-3 version.
*/
protected static final Version GROOVY_4_0_0_ALPHA3 = new Version(4, 0, 0, "alpha-3");

/**
* Groovy 4.0.0 alpha-1 version.
*/
protected static final Version GROOVY_4_0_0_ALPHA1 = new Version(4, 0, 0, "alpha-1");

/**
* Groovy 3.0.9 version.
*/
protected static final Version GROOVY_3_0_8 = new Version(3, 0, 8);

/**
* Groovy 3.0.6 version.
*/
Expand Down Expand Up @@ -157,6 +167,7 @@ public abstract class AbstractCompileMojo extends AbstractGroovySourcesMojo {
* <li>14</li>
* <li>15</li>
* <li>16</li>
* <li>17</li>
* </ul>
* Using 1.6 or 1.7 requires Groovy &gt;= 2.1.3.
* Using 1.8 requires Groovy &gt;= 2.3.3.
Expand All @@ -166,6 +177,8 @@ public abstract class AbstractCompileMojo extends AbstractGroovySourcesMojo {
* Using 13 requires Groovy &gt;= 2.5.7, or Groovy &gt;= 3.0.0-beta-1, but not any 2.6 versions.
* Using 14 requires Groovy &gt;= 3.0.0 beta-2.
* Using 15 requires Groovy &gt;= 3.0.3.
* Using 16 requires Groovy &gt;= 3.0.6.
* Using 17 requires Groovy &gt;= 3.0.8 or Groovy &gt; 4.0.0-alpha-3.
*/
@Parameter(property = "maven.compiler.target", defaultValue = "1.8")
protected String targetBytecode;
Expand Down Expand Up @@ -476,7 +489,11 @@ protected Object setupCompilerConfiguration(final File compileOutputDirectory, f
* org.codehaus.groovy.classgen.asm.WriterController.
*/
protected void verifyGroovyVersionSupportsTargetBytecode() {
if ("16".equals(targetBytecode)) {
if ("17".equals(targetBytecode)) {
if (groovyOlderThan(GROOVY_3_0_8) || (groovyAtLeast(GROOVY_4_0_0_ALPHA1) && groovyOlderThan(GROOVY_4_0_0_ALPHA3))) {
throw new IllegalArgumentException("Target bytecode 17 requires Groovy " + GROOVY_3_0_8 + "/" + GROOVY_4_0_0_ALPHA3 + " or newer.");
}
} else if ("16".equals(targetBytecode)) {
if (groovyOlderThan(GROOVY_3_0_6)) {
throw new IllegalArgumentException("Target bytecode 16 requires Groovy " + GROOVY_3_0_6 + " or newer.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,21 @@ public abstract class AbstractGenerateStubsMojo extends AbstractGroovyStubSource
* (although it does create the target directory) when I use other versions.
*/

/**
* Groovy 4.0.0 alpha-3 version.
*/
protected static final Version GROOVY_4_0_0_ALPHA3 = new Version(4, 0, 0, "alpha-3");

/**
* Groovy 4.0.0 alpha-1 version.
*/
protected static final Version GROOVY_4_0_0_ALPHA1 = new Version(4, 0, 0, "alpha-1");

/**
* Groovy 3.0.9 version.
*/
protected static final Version GROOVY_3_0_8 = new Version(3, 0, 8);

/**
* Groovy 3.0.6 version.
*/
Expand Down Expand Up @@ -151,6 +166,7 @@ public abstract class AbstractGenerateStubsMojo extends AbstractGroovyStubSource
* <li>14</li>
* <li>15</li>
* <li>16</li>
* <li>17</li>
* </ul>
* Using 1.6 or 1.7 requires Groovy &gt;= 2.1.3.
* Using 1.8 requires Groovy &gt;= 2.3.3.
Expand All @@ -160,6 +176,8 @@ public abstract class AbstractGenerateStubsMojo extends AbstractGroovyStubSource
* Using 13 requires Groovy &gt;= 2.5.7, or Groovy &gt;= 3.0.0-beta-1, but not any 2.6 versions.
* Using 14 requires Groovy &gt;= 3.0.0 beta-2.
* Using 15 requires Groovy &gt;= 3.0.3.
* Using 16 requires Groovy &gt;= 3.0.6.
* Using 17 requires Groovy &gt;= 3.0.8 or Groovy &gt; 4.0.0-alpha-3.
*
* @since 1.0-beta-3
*/
Expand Down Expand Up @@ -380,7 +398,11 @@ protected void resetStubModifiedDates(final Set<File> stubs) {
* org.codehaus.groovy.classgen.asm.WriterController.
*/
protected void verifyGroovyVersionSupportsTargetBytecode() {
if ("16".equals(targetBytecode)) {
if ("17".equals(targetBytecode)) {
if (groovyOlderThan(GROOVY_3_0_8) || (groovyAtLeast(GROOVY_4_0_0_ALPHA1) && groovyOlderThan(GROOVY_4_0_0_ALPHA3))) {
throw new IllegalArgumentException("Target bytecode 17 requires Groovy " + GROOVY_3_0_8 + "/" + GROOVY_4_0_0_ALPHA3 + " or newer.");
}
} else if ("16".equals(targetBytecode)) {
if (groovyOlderThan(GROOVY_3_0_6)) {
throw new IllegalArgumentException("Target bytecode 16 requires Groovy " + GROOVY_3_0_6 + " or newer.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,27 @@ public void testJava16WithSupportedGroovy() {
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test(expected = IllegalArgumentException.class)
public void testJava17WithUnsupportedGroovy() {
testMojo = new TestMojo("3.0.7");
testMojo.targetBytecode = "17";
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test
public void testJava17WithSupportedGroovy() {
testMojo = new TestMojo("3.0.8");
testMojo.targetBytecode = "17";
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test
public void testJava17WithSupportedGroovy4() {
testMojo = new TestMojo("4.0.0-alpha-3");
testMojo.targetBytecode = "17";
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test(expected = IllegalArgumentException.class)
public void testUnrecognizedJava() {
testMojo = new TestMojo("2.1.2");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,27 @@ public void testJava15WithSupportedGroovy() {
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test(expected = IllegalArgumentException.class)
public void testJava17WithUnsupportedGroovy() {
testMojo = new TestMojo("3.0.7");
testMojo.targetBytecode = "17";
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test
public void testJava17WithSupportedGroovy() {
testMojo = new TestMojo("3.0.8");
testMojo.targetBytecode = "17";
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

@Test
public void testJava17WithSupportedGroovy4() {
testMojo = new TestMojo("4.0.0-alpha-3");
testMojo.targetBytecode = "17";
testMojo.verifyGroovyVersionSupportsTargetBytecode();
}

protected static class TestMojo extends AbstractGenerateStubsMojo {
protected TestMojo() {
this(GROOVY_1_8_2.toString(), false);
Expand Down

0 comments on commit b725f1e

Please sign in to comment.