Skip to content

Commit 5fef8dd

Browse files
committed
8235229: Compilation against a modular, multi-release JAR erroneous with --release
Reviewed-by: vromero
1 parent 382b8fe commit 5fef8dd

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

src/jdk.compiler/share/classes/com/sun/tools/javac/platform/JDKPlatformProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import com.sun.tools.javac.file.CacheFSInfo;
6868
import com.sun.tools.javac.file.JavacFileManager;
6969
import com.sun.tools.javac.jvm.Target;
70+
import com.sun.tools.javac.main.Option;
7071
import com.sun.tools.javac.util.Context;
7172
import com.sun.tools.javac.util.Log;
7273
import com.sun.tools.javac.util.StringUtils;
@@ -246,6 +247,8 @@ public String inferBinaryName(Location location, JavaFileObject file) {
246247

247248
};
248249

250+
fm.handleOption(Option.MULTIRELEASE, sourceVersion);
251+
249252
Path file = findCtSym();
250253
// file == ${jdk.home}/lib/ct.sym
251254
if (Files.exists(file)) {

test/langtools/tools/javac/modules/ModuleInfoTest.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
/*
2525
* @test
26-
* @bug 8158123 8161906 8162713 8202832
26+
* @bug 8158123 8161906 8162713 8202832 8235229
2727
* @summary tests for module declarations
2828
* @library /tools/lib
2929
* @modules
@@ -38,7 +38,9 @@
3838
import java.nio.file.Path;
3939
import java.util.Arrays;
4040
import java.util.List;
41+
import java.util.jar.Attributes;
4142

43+
import toolbox.JarTask;
4244
import toolbox.JavacTask;
4345
import toolbox.Task;
4446

@@ -798,4 +800,53 @@ public void testJDK8202832(Path base) throws Exception {
798800
if (!expected.equals(log))
799801
throw new Exception("expected output not found");
800802
}
803+
804+
@Test
805+
public void testMultiReleaseJarAndReleaseOption(Path base) throws Exception {
806+
Path src = base.resolve("src");
807+
tb.writeJavaFiles(src, "package api; public class A { }");
808+
Path classes = base.resolve("classes");
809+
Files.createDirectories(classes);
810+
new JavacTask(tb)
811+
.outdir(classes)
812+
.files(findJavaFiles(src))
813+
.run()
814+
.writeAll();
815+
816+
Path src9 = base.resolve("src9");
817+
tb.writeJavaFiles(src9, "module m { exports api; }");
818+
Path classes9 = classes.resolve("META-INF").resolve("versions").resolve("9");
819+
Files.createDirectories(classes9);
820+
new JavacTask(tb)
821+
.sourcepath(src, src9)
822+
.outdir(classes9)
823+
.files(findJavaFiles(src9))
824+
.run()
825+
.writeAll();
826+
Path jar = base.resolve("lib.jar");
827+
new JarTask(tb, jar)
828+
.baseDir(classes)
829+
.files(Arrays.stream(tb.findFiles("class", classes)).map(f -> classes.relativize(f).toString()).toArray(i -> new String[i]))
830+
.manifest(Attributes.Name.MULTI_RELEASE + ": true\n\n")
831+
.run();
832+
Path testSrc = base.resolve("test-src");
833+
tb.writeJavaFiles(testSrc, "module test { requires transitive m; }", "package impl; public class I { api.A a; }");
834+
Path testClasses = base.resolve("test-classes");
835+
Files.createDirectories(testClasses);
836+
new JavacTask(tb)
837+
.options("-Werror", "--module-path", jar.toString())
838+
.sourcepath(testSrc)
839+
.outdir(testClasses)
840+
.files(findJavaFiles(testSrc))
841+
.run()
842+
.writeAll();
843+
new JavacTask(tb)
844+
.options("-Werror", "--module-path", jar.toString(), "--release", "9", "-doe")
845+
.sourcepath(testSrc)
846+
.outdir(testClasses)
847+
.files(findJavaFiles(testSrc))
848+
.run()
849+
.writeAll();
850+
}
851+
801852
}

0 commit comments

Comments
 (0)