8235229: Compilation against a modular, multi-release JAR erroneous with --release

Reviewed-by: vromero
This commit is contained in:
Jan Lahoda 2020-09-09 13:03:00 +00:00
parent 382b8fedf5
commit 5fef8ddaff
2 changed files with 55 additions and 1 deletions

View file

@ -67,6 +67,7 @@ import com.sun.tools.javac.code.Source.Feature;
import com.sun.tools.javac.file.CacheFSInfo; import com.sun.tools.javac.file.CacheFSInfo;
import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.javac.file.JavacFileManager;
import com.sun.tools.javac.jvm.Target; import com.sun.tools.javac.jvm.Target;
import com.sun.tools.javac.main.Option;
import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Log;
import com.sun.tools.javac.util.StringUtils; import com.sun.tools.javac.util.StringUtils;
@ -246,6 +247,8 @@ public class JDKPlatformProvider implements PlatformProvider {
}; };
fm.handleOption(Option.MULTIRELEASE, sourceVersion);
Path file = findCtSym(); Path file = findCtSym();
// file == ${jdk.home}/lib/ct.sym // file == ${jdk.home}/lib/ct.sym
if (Files.exists(file)) { if (Files.exists(file)) {

View file

@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 8158123 8161906 8162713 8202832 * @bug 8158123 8161906 8162713 8202832 8235229
* @summary tests for module declarations * @summary tests for module declarations
* @library /tools/lib * @library /tools/lib
* @modules * @modules
@ -38,7 +38,9 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.jar.Attributes;
import toolbox.JarTask;
import toolbox.JavacTask; import toolbox.JavacTask;
import toolbox.Task; import toolbox.Task;
@ -798,4 +800,53 @@ public class ModuleInfoTest extends ModuleTestBase {
if (!expected.equals(log)) if (!expected.equals(log))
throw new Exception("expected output not found"); throw new Exception("expected output not found");
} }
@Test
public void testMultiReleaseJarAndReleaseOption(Path base) throws Exception {
Path src = base.resolve("src");
tb.writeJavaFiles(src, "package api; public class A { }");
Path classes = base.resolve("classes");
Files.createDirectories(classes);
new JavacTask(tb)
.outdir(classes)
.files(findJavaFiles(src))
.run()
.writeAll();
Path src9 = base.resolve("src9");
tb.writeJavaFiles(src9, "module m { exports api; }");
Path classes9 = classes.resolve("META-INF").resolve("versions").resolve("9");
Files.createDirectories(classes9);
new JavacTask(tb)
.sourcepath(src, src9)
.outdir(classes9)
.files(findJavaFiles(src9))
.run()
.writeAll();
Path jar = base.resolve("lib.jar");
new JarTask(tb, jar)
.baseDir(classes)
.files(Arrays.stream(tb.findFiles("class", classes)).map(f -> classes.relativize(f).toString()).toArray(i -> new String[i]))
.manifest(Attributes.Name.MULTI_RELEASE + ": true\n\n")
.run();
Path testSrc = base.resolve("test-src");
tb.writeJavaFiles(testSrc, "module test { requires transitive m; }", "package impl; public class I { api.A a; }");
Path testClasses = base.resolve("test-classes");
Files.createDirectories(testClasses);
new JavacTask(tb)
.options("-Werror", "--module-path", jar.toString())
.sourcepath(testSrc)
.outdir(testClasses)
.files(findJavaFiles(testSrc))
.run()
.writeAll();
new JavacTask(tb)
.options("-Werror", "--module-path", jar.toString(), "--release", "9", "-doe")
.sourcepath(testSrc)
.outdir(testClasses)
.files(findJavaFiles(testSrc))
.run()
.writeAll();
}
} }