diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java index 13d6d483eaf..2f6988691b6 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java @@ -255,7 +255,7 @@ public Error disabledError(JavaFileObject classfile, int majorVersion) { * @return true iff sym has been declared using a preview language feature */ public boolean declaredUsingPreviewFeature(Symbol sym) { - return false; + return sym.isValueClass(); } public void checkSourceLevel(DiagnosticPosition pos, Feature feature) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java index 1fa6e7736f8..571f1e96cf1 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java @@ -1002,9 +1002,6 @@ void writeField(VarSymbol v) { Type fldType = v.erasure(types); if (fldType.requiresLoadableDescriptors(v.owner)) { poolWriter.enterLoadableDescriptorsClass(fldType.tsym); - if (preview.isPreview(Source.Feature.VALUE_CLASSES)) { - preview.markUsesPreview(null); - } } int acountIdx = beginAttrs(); int acount = 0; @@ -1035,17 +1032,11 @@ void writeMethod(MethodSymbol m) { for (Type t : mtype.getParameterTypes()) { if (t.requiresLoadableDescriptors(m.owner)) { poolWriter.enterLoadableDescriptorsClass(t.tsym); - if (preview.isPreview(Source.Feature.VALUE_CLASSES)) { - preview.markUsesPreview(null); - } } } Type returnType = mtype.getReturnType(); if (returnType.requiresLoadableDescriptors(m.owner)) { poolWriter.enterLoadableDescriptorsClass(returnType.tsym); - if (preview.isPreview(Source.Feature.VALUE_CLASSES)) { - preview.markUsesPreview(null); - } } int acountIdx = beginAttrs(); int acount = 0; diff --git a/test/langtools/tools/javac/patterns/DominationWithPP.out b/test/langtools/tools/javac/patterns/DominationWithPP.out index 119cc003d07..9a1c17a5cdd 100644 --- a/test/langtools/tools/javac/patterns/DominationWithPP.out +++ b/test/langtools/tools/javac/patterns/DominationWithPP.out @@ -11,4 +11,6 @@ Domination.java:193:18: compiler.err.pattern.dominated Domination.java:202:18: compiler.err.pattern.dominated Domination.java:211:18: compiler.err.pattern.dominated Domination.java:228:18: compiler.err.pattern.dominated +- compiler.note.preview.filename: Domination.java, DEFAULT +- compiler.note.preview.recompile 13 errors diff --git a/test/langtools/tools/javac/patterns/T8309054.java b/test/langtools/tools/javac/patterns/T8309054.java index 27e9cbe0c1b..b504624b7ff 100644 --- a/test/langtools/tools/javac/patterns/T8309054.java +++ b/test/langtools/tools/javac/patterns/T8309054.java @@ -2,7 +2,6 @@ * @test /nodynamiccopyright/ * @bug 8309054 * @summary Parsing of erroneous patterns succeeds - * @enablePreview * @compile/fail/ref=T8309054.out -XDrawDiagnostics --should-stop=at=FLOW T8309054.java */ diff --git a/test/langtools/tools/javac/patterns/T8309054.out b/test/langtools/tools/javac/patterns/T8309054.out index 4397d51ec0b..79c187a8d22 100644 --- a/test/langtools/tools/javac/patterns/T8309054.out +++ b/test/langtools/tools/javac/patterns/T8309054.out @@ -1,7 +1,7 @@ -T8309054.java:12:24: compiler.err.expected2: :, -> -T8309054.java:16:26: compiler.err.expected2: :, -> -T8309054.java:19:35: compiler.err.expected: ')' -T8309054.java:13:13: compiler.err.switch.mixing.case.types -T8309054.java:17:13: compiler.err.switch.mixing.case.types -T8309054.java:21:17: compiler.err.unexpected.type: kindname.variable, kindname.value +T8309054.java:11:24: compiler.err.expected2: :, -> +T8309054.java:15:26: compiler.err.expected2: :, -> +T8309054.java:18:35: compiler.err.expected: ')' +T8309054.java:12:13: compiler.err.switch.mixing.case.types +T8309054.java:16:13: compiler.err.switch.mixing.case.types +T8309054.java:20:17: compiler.err.unexpected.type: kindname.variable, kindname.value 6 errors \ No newline at end of file diff --git a/test/langtools/tools/javac/patterns/T8314578.java b/test/langtools/tools/javac/patterns/T8314578.java index 28acaec3482..11eeb310f9d 100644 --- a/test/langtools/tools/javac/patterns/T8314578.java +++ b/test/langtools/tools/javac/patterns/T8314578.java @@ -1,7 +1,6 @@ /** * @test /nodynamiccopyright/ * @bug 8314578 - * @enablePreview * @summary Parsing of erroneous patterns succeeds * @compile/fail/ref=T8314578.out -XDrawDiagnostics T8314578.java */ diff --git a/test/langtools/tools/javac/patterns/T8314578.out b/test/langtools/tools/javac/patterns/T8314578.out index 1f09c496f57..de1b3e7d38e 100644 --- a/test/langtools/tools/javac/patterns/T8314578.out +++ b/test/langtools/tools/javac/patterns/T8314578.out @@ -1,4 +1,4 @@ -T8314578.java:14:18: compiler.err.flows.through.from.pattern -T8314578.java:15:18: compiler.err.flows.through.to.pattern -T8314578.java:27:18: compiler.err.flows.through.to.pattern +T8314578.java:13:18: compiler.err.flows.through.from.pattern +T8314578.java:14:18: compiler.err.flows.through.to.pattern +T8314578.java:26:18: compiler.err.flows.through.to.pattern 3 errors \ No newline at end of file diff --git a/test/langtools/tools/javac/patterns/T8332463b.out b/test/langtools/tools/javac/patterns/T8332463b.out index f912242a6c6..b5fcc5c2e4d 100644 --- a/test/langtools/tools/javac/patterns/T8332463b.out +++ b/test/langtools/tools/javac/patterns/T8332463b.out @@ -1,2 +1,4 @@ T8332463b.java:36:18: compiler.err.pattern.dominated +- compiler.note.preview.filename: T8332463b.java, DEFAULT +- compiler.note.preview.recompile 1 error diff --git a/test/langtools/tools/javac/preview/PreviewJRTImage.java b/test/langtools/tools/javac/preview/PreviewJRTImage.java index 4e97a7688a9..fae29d0434d 100644 --- a/test/langtools/tools/javac/preview/PreviewJRTImage.java +++ b/test/langtools/tools/javac/preview/PreviewJRTImage.java @@ -111,6 +111,8 @@ void test() { "Test.java:1:16: compiler.warn.sun.proprietary: sun.misc.Unsafe", "Test.java:5:9: compiler.err.type.found.req: java.lang.Boolean, (compiler.misc.type.req.identity)", "Test.java:7:9: compiler.warn.sun.proprietary: sun.misc.Unsafe", + "- compiler.note.preview.filename: Test.java, DEFAULT", + "- compiler.note.preview.recompile", "1 error", "2 warnings" ); diff --git a/test/langtools/tools/javac/valhalla/value-objects/LoadableDescriptorsAttrTest2.java b/test/langtools/tools/javac/valhalla/value-objects/LoadableDescriptorsAttrTest2.java index e16c064b069..8908e4ee88e 100644 --- a/test/langtools/tools/javac/valhalla/value-objects/LoadableDescriptorsAttrTest2.java +++ b/test/langtools/tools/javac/valhalla/value-objects/LoadableDescriptorsAttrTest2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,9 +41,11 @@ import java.lang.classfile.ClassFile; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; import com.sun.tools.javac.util.Assert; +import toolbox.Task.OutputKind; import toolbox.TestRunner; import toolbox.ToolBox; @@ -81,24 +83,53 @@ class Ident { Path classes = base.resolve("classes"); tb.createDirectories(classes); - new toolbox.JavacTask(tb) - .options("--enable-preview", "-source", Integer.toString(Runtime.version().feature())) + List log; + List expected; + + expected = List.of( + "Ident.java:2:5: compiler.warn.declared.using.preview: kindname.class, Val", + "Val.java:1:1: compiler.warn.preview.feature.use.plural: (compiler.misc.feature.value.classes)", + "2 warnings" + ); + + log = new toolbox.JavacTask(tb) + .options("--enable-preview", + "-source", Integer.toString(Runtime.version().feature()), + "-XDrawDiagnostics", + "-Xlint:preview") .outdir(classes) .files(findJavaFiles(src)) .run() - .writeAll(); + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + tb.checkEqual(log, expected); + Path classFilePath = classes.resolve("Ident.class"); var classFile = ClassFile.of().parse(classFilePath); Assert.check(classFile.minorVersion() == 65535); Assert.check(classFile.findAttribute(Attributes.loadableDescriptors()).isPresent()); + expected = List.of( + "- compiler.warn.preview.feature.use.classfile: Val.class, 28", + "Ident.java:2:5: compiler.warn.declared.using.preview: kindname.class, Val", + "2 warnings" + ); + // now with the value class in the classpath - new toolbox.JavacTask(tb) - .options("--enable-preview", "-source", Integer.toString(Runtime.version().feature()), "-cp", classes.toString()) + log = new toolbox.JavacTask(tb) + .options("--enable-preview", + "-source", Integer.toString(Runtime.version().feature()), + "-cp", classes.toString(), + "-XDrawDiagnostics", + "-Xlint:preview") .outdir(classes) .files(src.resolve("Ident.java")) .run() - .writeAll(); + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + tb.checkEqual(log, expected); classFilePath = classes.resolve("Ident.class"); classFile = ClassFile.of().parse(classFilePath); @@ -121,24 +152,53 @@ void m(Val val) {} Path classes = base.resolve("classes"); tb.createDirectories(classes); - new toolbox.JavacTask(tb) - .options("--enable-preview", "-source", Integer.toString(Runtime.version().feature())) + List log; + List expected; + + expected = List.of( + "Ident.java:2:12: compiler.warn.declared.using.preview: kindname.class, Val", + "Val.java:1:1: compiler.warn.preview.feature.use.plural: (compiler.misc.feature.value.classes)", + "2 warnings" + ); + + log = new toolbox.JavacTask(tb) + .options("--enable-preview", + "-source", Integer.toString(Runtime.version().feature()), + "-XDrawDiagnostics", + "-Xlint:preview") .outdir(classes) .files(findJavaFiles(src)) .run() - .writeAll(); + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + tb.checkEqual(log, expected); + Path classFilePath = classes.resolve("Ident.class"); var classFile = ClassFile.of().parse(classFilePath); Assert.check(classFile.minorVersion() == 65535); Assert.check(classFile.findAttribute(Attributes.loadableDescriptors()).isPresent()); + expected = List.of( + "- compiler.warn.preview.feature.use.classfile: Val.class, 28", + "Ident.java:2:12: compiler.warn.declared.using.preview: kindname.class, Val", + "2 warnings" + ); + // now with the value class in the classpath - new toolbox.JavacTask(tb) - .options("--enable-preview", "-source", Integer.toString(Runtime.version().feature()), "-cp", classes.toString()) + log = new toolbox.JavacTask(tb) + .options("--enable-preview", + "-source", Integer.toString(Runtime.version().feature()), + "-cp", classes.toString(), + "-XDrawDiagnostics", + "-Xlint:preview") .outdir(classes) .files(src.resolve("Ident.java")) .run() - .writeAll(); + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + tb.checkEqual(log, expected); classFilePath = classes.resolve("Ident.class"); classFile = ClassFile.of().parse(classFilePath); @@ -164,25 +224,52 @@ Val m() { Path classes = base.resolve("classes"); tb.createDirectories(classes); - new toolbox.JavacTask(tb) - .options("--enable-preview", "-source", Integer.toString(Runtime.version().feature())) + List log; + List expected; + + expected = List.of( + "Ident.java:2:5: compiler.warn.declared.using.preview: kindname.class, Val", + "Val.java:1:1: compiler.warn.preview.feature.use.plural: (compiler.misc.feature.value.classes)", + "2 warnings" + ); + + log = new toolbox.JavacTask(tb) + .options("--enable-preview", + "-source", Integer.toString(Runtime.version().feature()), + "-XDrawDiagnostics", + "-Xlint:preview") .outdir(classes) .files(findJavaFiles(src)) .run() - .writeAll(); + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + tb.checkEqual(log, expected); + Path classFilePath = classes.resolve("Ident.class"); var classFile = ClassFile.of().parse(classFilePath); Assert.check(classFile.minorVersion() == 65535); Assert.check(classFile.findAttribute(Attributes.loadableDescriptors()).isPresent()); + expected = List.of( + "Ident.java:2:5: compiler.warn.declared.using.preview: kindname.class, Val", + "Val.java:1:1: compiler.warn.preview.feature.use.plural: (compiler.misc.feature.value.classes)", + "2 warnings" + ); // now with the value class in the classpath new toolbox.JavacTask(tb) - .options("--enable-preview", "-source", Integer.toString(Runtime.version().feature()), "-cp", classes.toString()) + .options("--enable-preview", + "-source", Integer.toString(Runtime.version().feature()), "-cp", classes.toString(), + "-XDrawDiagnostics", + "-Xlint:preview") .outdir(classes) .files(src.resolve("Ident.java")) .run() - .writeAll(); + .writeAll() + .getOutputLines(OutputKind.DIRECT); + + tb.checkEqual(log, expected); classFilePath = classes.resolve("Ident.class"); classFile = ClassFile.of().parse(classFilePath);