Skip to content

Commit 36453a1

Browse files
committed
Patch target to match Scala 2.11/2.12 scalac option syntax, close #583
Motivation: We can't directly pass a target that's valid for javac to scalac prior to 2.13 as it was using a different syntax.
1 parent e389be1 commit 36453a1

File tree

2 files changed

+95
-1
lines changed

2 files changed

+95
-1
lines changed

src/main/java/scala_maven/ScalaMojoSupport.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,34 @@ private String getToolClasspath() throws Exception {
584584
return FileUtils.toMultiPath(classpath);
585585
}
586586

587+
static String targetOption(String target, VersionNumber scalaVersion) {
588+
if (scalaVersion.major == 2) {
589+
if (scalaVersion.minor <= 12) {
590+
if (target.equals("1.5") || target.equals("5")) {
591+
return "jvm-1.5";
592+
} else if (target.equals("1.6") || target.equals("6")) {
593+
return "jvm-1.6";
594+
} else if (target.equals("1.7") || target.equals("7")) {
595+
return "jvm-1.7";
596+
} else if (target.equals("1.8") || target.equals("8")) {
597+
return "jvm-1.8";
598+
} else {
599+
// invalid or unsupported option, just ignore
600+
return null;
601+
}
602+
} else if (target.equals("1.5")) {
603+
return "5";
604+
} else if (target.equals("1.6")) {
605+
return "6";
606+
} else if (target.equals("1.7")) {
607+
return "7";
608+
} else if (target.equals("1.8")) {
609+
return "8";
610+
}
611+
}
612+
return target;
613+
}
614+
587615
protected List<String> getScalacOptions() throws Exception {
588616
List<String> options = new ArrayList<>();
589617
if (args != null) Collections.addAll(options, args);
@@ -593,7 +621,10 @@ protected List<String> getScalacOptions() throws Exception {
593621
options.addAll(getCompilerPluginOptions());
594622

595623
if (target != null && !target.isEmpty()) {
596-
options.add("-target:" + target);
624+
String targetOption = targetOption(target, findScalaVersion());
625+
if (targetOption != null) {
626+
options.add("-target:" + targetOption);
627+
}
597628
}
598629
if (release != null && !release.isEmpty()) {
599630
options.add("-release");
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* This is free and unencumbered software released into the public domain.
3+
* See UNLICENSE.
4+
*/
5+
package scala_maven;
6+
7+
import static org.junit.Assert.assertEquals;
8+
import static org.junit.Assert.assertNull;
9+
10+
import org.junit.Test;
11+
12+
public class ScalaMojoSupportTest {
13+
14+
@Test
15+
public void scala2_11_should_generate_prefixed_target() {
16+
assertEquals("jvm-1.5", ScalaMojoSupport.targetOption("1.5", new VersionNumber("2.11.12")));
17+
assertEquals("jvm-1.5", ScalaMojoSupport.targetOption("5", new VersionNumber("2.11.12")));
18+
assertEquals("jvm-1.6", ScalaMojoSupport.targetOption("1.6", new VersionNumber("2.11.12")));
19+
assertEquals("jvm-1.6", ScalaMojoSupport.targetOption("6", new VersionNumber("2.11.12")));
20+
assertEquals("jvm-1.7", ScalaMojoSupport.targetOption("1.7", new VersionNumber("2.11.12")));
21+
assertEquals("jvm-1.7", ScalaMojoSupport.targetOption("7", new VersionNumber("2.11.12")));
22+
assertEquals("jvm-1.8", ScalaMojoSupport.targetOption("1.8", new VersionNumber("2.11.12")));
23+
assertEquals("jvm-1.8", ScalaMojoSupport.targetOption("8", new VersionNumber("2.11.12")));
24+
}
25+
26+
@Test
27+
public void scala2_11_should_generate_null_for_unsupported_java_versions() {
28+
assertNull(ScalaMojoSupport.targetOption("11", new VersionNumber("2.11.12")));
29+
assertNull(ScalaMojoSupport.targetOption("17", new VersionNumber("2.11.12")));
30+
}
31+
32+
@Test
33+
public void scala2_12_should_generate_prefixed_target() {
34+
assertEquals("jvm-1.5", ScalaMojoSupport.targetOption("1.5", new VersionNumber("2.12.11")));
35+
assertEquals("jvm-1.5", ScalaMojoSupport.targetOption("5", new VersionNumber("2.12.11")));
36+
assertEquals("jvm-1.6", ScalaMojoSupport.targetOption("1.6", new VersionNumber("2.12.11")));
37+
assertEquals("jvm-1.6", ScalaMojoSupport.targetOption("6", new VersionNumber("2.12.11")));
38+
assertEquals("jvm-1.7", ScalaMojoSupport.targetOption("1.7", new VersionNumber("2.12.11")));
39+
assertEquals("jvm-1.7", ScalaMojoSupport.targetOption("7", new VersionNumber("2.12.11")));
40+
assertEquals("jvm-1.8", ScalaMojoSupport.targetOption("1.8", new VersionNumber("2.12.11")));
41+
assertEquals("jvm-1.8", ScalaMojoSupport.targetOption("8", new VersionNumber("2.12.11")));
42+
}
43+
44+
@Test
45+
public void scala2_12_should_generate_null_for_unsupported_java_versions() {
46+
assertNull(ScalaMojoSupport.targetOption("11", new VersionNumber("2.12.11")));
47+
assertNull(ScalaMojoSupport.targetOption("17", new VersionNumber("2.12.11")));
48+
}
49+
50+
@Test
51+
public void scala2_13_should_generate_non_prefixed_target() {
52+
assertEquals("5", ScalaMojoSupport.targetOption("1.5", new VersionNumber("2.13.8")));
53+
assertEquals("5", ScalaMojoSupport.targetOption("5", new VersionNumber("2.13.8")));
54+
assertEquals("6", ScalaMojoSupport.targetOption("1.6", new VersionNumber("2.13.8")));
55+
assertEquals("6", ScalaMojoSupport.targetOption("6", new VersionNumber("2.13.8")));
56+
assertEquals("7", ScalaMojoSupport.targetOption("1.7", new VersionNumber("2.13.8")));
57+
assertEquals("7", ScalaMojoSupport.targetOption("7", new VersionNumber("2.13.8")));
58+
assertEquals("8", ScalaMojoSupport.targetOption("1.8", new VersionNumber("2.13.8")));
59+
assertEquals("8", ScalaMojoSupport.targetOption("8", new VersionNumber("2.13.8")));
60+
assertEquals("11", ScalaMojoSupport.targetOption("11", new VersionNumber("2.13.8")));
61+
assertEquals("17", ScalaMojoSupport.targetOption("17", new VersionNumber("2.13.8")));
62+
}
63+
}

0 commit comments

Comments
 (0)