diff --git a/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java b/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java index b3c149492ac..15798240506 100644 --- a/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java +++ b/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java @@ -152,12 +152,14 @@ private static RuntimeException newIAE(String message, Throwable cause) { return new IllegalArgumentException(message, cause); } - private static final Function CREATE_RESERVATION = new Function<>() { - @Override - public Object apply(Object key) { - return new Object(); - } - }; + private static class CacheHolder { + static final Function CREATE = new Function<>() { + @Override + public Object apply(Object key) { + return new CacheHolder(); + } + }; + } public final S findSpecies(K key) { // Note: Species instantiation may throw VirtualMachineError because of @@ -180,12 +182,12 @@ public final S findSpecies(K key) { // concrete class if ever. // The concrete class is published via SpeciesData instance // returned here only after the class and species data are linked together. - Object speciesDataOrReservation = cache.computeIfAbsent(key, CREATE_RESERVATION); + Object speciesDataOrReservation = cache.computeIfAbsent(key, CacheHolder.CREATE); // Separating the creation of a placeholder SpeciesData instance above // from the loading and linking a real one below ensures we can never // accidentally call computeIfAbsent recursively. S speciesData; - if (speciesDataOrReservation.getClass() == Object.class) { + if (speciesDataOrReservation.getClass() == CacheHolder.class) { synchronized (speciesDataOrReservation) { Object existingSpeciesData = cache.get(key); if (existingSpeciesData == speciesDataOrReservation) { // won the race diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 998083ebaeb..1a7c7c16acf 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -56,6 +56,7 @@ import static com.sun.tools.javac.resources.CompilerProperties.Fragments.DiamondInvalidArgs; import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.resources.CompilerProperties.Fragments; +import com.sun.tools.javac.resources.CompilerProperties.Notes; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.*; import com.sun.tools.javac.tree.JCTree.*; @@ -2830,6 +2831,9 @@ public void visitNewClass(final JCNewClass tree) { clazztype = TreeInfo.isEnumInit(env.tree) ? attribIdentAsEnumType(env, (JCIdent)clazz) : attribType(clazz, env); + if (clazztype.tsym == syms.objectType.tsym && cdef == null && !tree.classDeclRemoved()) { + log.note(tree.pos(), Notes.CantInstantiateObjectDirectly); + } } finally { env.info.isNewClass = false; } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java index 6f55d422101..65283f2d40e 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java @@ -2851,7 +2851,12 @@ public void visitNewClass(JCNewClass tree) { } else { tree.clazz = access(c, tree.clazz, enclOp, false); } - result = tree; + if (tree.clazz.type.tsym == syms.objectType.tsym) { + Assert.check(tree.def == null && tree.encl == null); + result = makeCall(make.Ident(syms.objectsType.tsym), names.newIdentity, List.nil()); + } else { + result = tree; + } } // Simplify conditionals with known constant controlling expressions. diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 8e627034204..f8e23ad3388 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -3903,3 +3903,6 @@ compiler.warn.declared.using.preview=\ compiler.warn.attempt.to.synchronize.on.instance.of.value.based.class=\ attempt to synchronize on an instance of a value-based class + +compiler.note.cant.instantiate.object.directly=\ + Object cannot be instantiated directly; a subclass of Object will be instantiated instead, by invoking java.util.Objects.newIdentity() diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/IntHashTable.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/IntHashTable.java index 409dc703d60..a9a16afc151 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/IntHashTable.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/IntHashTable.java @@ -40,7 +40,7 @@ public class IntHashTable { protected int[] ints; // the image set protected int mask; // used to clip int's into the domain protected int num_bindings; // the number of mappings (including DELETED) - private static final Object DELETED = new Object(); + private static final Object DELETED = new Object() {}; /** * Construct an Object {@literal ->} int hash table. diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Names.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Names.java index ec9e3ea05b1..afeb918e1ad 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Names.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Names.java @@ -94,6 +94,7 @@ public static Names instance(Context context) { public final Name init; public final Name iterator; public final Name length; + public final Name newIdentity; public final Name next; public final Name ordinal; public final Name provider; @@ -281,6 +282,7 @@ public Names(Context context) { iterator = fromString("iterator"); length = fromString("length"); next = fromString("next"); + newIdentity = fromString("newIdentity"); ordinal = fromString("ordinal"); provider = fromString("provider"); serialVersionUID = fromString("serialVersionUID"); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java b/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java index 9da65c566a2..41d36d8739f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java @@ -208,7 +208,7 @@ public boolean transform(final CompilationService sjavac, // Prepare compilation calls List> compilationCalls = new ArrayList<>(); - final Object lock = new Object(); + final Object lock = new Object() {}; for (int i = 0; i < numCompiles; i++) { CompileChunk cc = compileChunks[i]; if (cc.srcs.isEmpty()) { diff --git a/test/hotspot/jtreg/compiler/escapeAnalysis/TestGetClass.java b/test/hotspot/jtreg/compiler/escapeAnalysis/TestGetClass.java index ffdb357e556..dcf99300323 100644 --- a/test/hotspot/jtreg/compiler/escapeAnalysis/TestGetClass.java +++ b/test/hotspot/jtreg/compiler/escapeAnalysis/TestGetClass.java @@ -36,10 +36,10 @@ package compiler.escapeAnalysis; public class TestGetClass { - static Object obj = new Object(); + static Object obj = new Object() {}; public static boolean test() { - if (obj.getClass() == Object.class) { + if (obj.getClass().getSuperclass() == Object.class) { synchronized (obj) { return true; } diff --git a/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ForObjectDataProvider.java b/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ForObjectDataProvider.java index 85d22f2efda..67573a69d5a 100644 --- a/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ForObjectDataProvider.java +++ b/test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ForObjectDataProvider.java @@ -30,7 +30,7 @@ public class ForObjectDataProvider { public static Object[][] forObjectDataProvider() { return new Object[][]{ {TestHelper.DUMMY_CLASS_INSTANCE.objectField, - "Object[Object@" + TestHelper.DUMMY_CLASS_INSTANCE.objectField.hashCode() + "]"}, + "Object[Objects$1@" + TestHelper.DUMMY_CLASS_INSTANCE.objectField.hashCode() + "]"}, {TestHelper.DUMMY_CLASS_INSTANCE.stringField, "Object[String:\"" + TestHelper.DUMMY_CLASS_INSTANCE.stringField + "\"]"}, {TestHelper.DUMMY_CLASS_INSTANCE.booleanField, diff --git a/test/hotspot/jtreg/runtime/HiddenClasses/CastToParentTest.java b/test/hotspot/jtreg/runtime/HiddenClasses/CastToParentTest.java index cde54e3125b..53ca318cac0 100644 --- a/test/hotspot/jtreg/runtime/HiddenClasses/CastToParentTest.java +++ b/test/hotspot/jtreg/runtime/HiddenClasses/CastToParentTest.java @@ -73,7 +73,7 @@ public static void main(String[] args) throws Throwable { } // Try to cast using a different mechanism. - new java.lang.Object().getClass().cast(hiddenClassObj); + new java.lang.Object() {}.getClass().getSuperclass().cast(hiddenClassObj); } } diff --git a/test/hotspot/jtreg/runtime/modules/CCE_module_msg.java b/test/hotspot/jtreg/runtime/modules/CCE_module_msg.java index 03ad581585a..541c54d67d7 100644 --- a/test/hotspot/jtreg/runtime/modules/CCE_module_msg.java +++ b/test/hotspot/jtreg/runtime/modules/CCE_module_msg.java @@ -59,7 +59,7 @@ public static void main(String[] args) throws Throwable { } public static void invalidObjectToDerived() { - java.lang.Object instance = new java.lang.Object(); + java.lang.Object instance = java.util.Objects.newIdentity(); int left = 23; int right = 42; try { @@ -69,7 +69,7 @@ public static void invalidObjectToDerived() { throw new RuntimeException("ClassCastException wasn't thrown, test failed."); } catch (ClassCastException cce) { System.out.println(cce.toString()); - if (!cce.getMessage().contains("class java.lang.Object cannot be cast to class Derived (java.lang.Object is in module java.base of loader 'bootstrap'; Derived is in unnamed module of loader 'app')")) { + if (!cce.getMessage().contains("class java.util.Objects$1 cannot be cast to class Derived (java.util.Objects$1 is in module java.base of loader 'bootstrap'; Derived is in unnamed module of loader 'app')")) { throw new RuntimeException("Wrong message: " + cce.getMessage()); } } diff --git a/test/hotspot/jtreg/serviceability/dcmd/gc/ClassHistogramTest.java b/test/hotspot/jtreg/serviceability/dcmd/gc/ClassHistogramTest.java index 8deb511a4f5..762ceb77293 100644 --- a/test/hotspot/jtreg/serviceability/dcmd/gc/ClassHistogramTest.java +++ b/test/hotspot/jtreg/serviceability/dcmd/gc/ClassHistogramTest.java @@ -80,7 +80,7 @@ public void run(CommandExecutor executor, String classHistogramArgs, String expa output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.String " + moduleRegex + "\\s*$"); /* Require at least one java.lang.Object */ - output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.lang.Object " + moduleRegex + "\\s*$"); + output.shouldMatch("^\\s+\\d+:\\s+\\d+\\s+\\d+\\s+java.util.Objects\\$1 " + moduleRegex + "\\s*$"); /* Require at exactly one TestClass[] */ output.shouldMatch("^\\s+\\d+:\\s+1\\s+\\d+\\s+" + diff --git a/test/hotspot/jtreg/serviceability/tmtools/jstack/WaitNotifyThreadTest.java b/test/hotspot/jtreg/serviceability/tmtools/jstack/WaitNotifyThreadTest.java index 21a012040a4..e6349063854 100644 --- a/test/hotspot/jtreg/serviceability/tmtools/jstack/WaitNotifyThreadTest.java +++ b/test/hotspot/jtreg/serviceability/tmtools/jstack/WaitNotifyThreadTest.java @@ -38,8 +38,8 @@ public class WaitNotifyThreadTest { - private Object monitor = new Object(); - private final String OBJECT = "a java.lang.Object"; + private Object monitor = java.util.Objects.newIdentity(); + private final String OBJECT = "a java.util.Objects$1"; private final String OBJECT_WAIT = "java.lang.Object.wait"; private final String RUN_METHOD = "WaitNotifyThreadTest$WaitThread.run"; diff --git a/test/jdk/jdk/dynalink/BeanLinkerTest.java b/test/jdk/jdk/dynalink/BeanLinkerTest.java index fafc1be447f..53d702639f5 100644 --- a/test/jdk/jdk/dynalink/BeanLinkerTest.java +++ b/test/jdk/jdk/dynalink/BeanLinkerTest.java @@ -179,11 +179,13 @@ public void afterTest() { this.linker = null; } + private static class TestObject {} + @Test(dataProvider = "flags") public void getPropertyTest(final boolean publicLookup) throws Throwable { final MethodType mt = MethodType.methodType(Object.class, Object.class, String.class); final CallSite cs = createCallSite(publicLookup, GET_PROPERTY, mt); - Assert.assertEquals(cs.getTarget().invoke(new Object(), "class"), Object.class); + Assert.assertEquals(cs.getTarget().invoke(new TestObject(), "class"), TestObject.class); Assert.assertEquals(cs.getTarget().invoke(new Date(), "class"), Date.class); } @@ -191,14 +193,14 @@ public void getPropertyTest(final boolean publicLookup) throws Throwable { public void getPropertyNegativeTest(final boolean publicLookup) throws Throwable { final MethodType mt = MethodType.methodType(Object.class, Object.class, String.class); final CallSite cs = createCallSite(publicLookup, GET_PROPERTY, mt); - Assert.assertNull(cs.getTarget().invoke(new Object(), "DOES_NOT_EXIST")); + Assert.assertNull(cs.getTarget().invoke(new TestObject(), "DOES_NOT_EXIST")); } @Test(dataProvider = "flags") public void getPropertyTest2(final boolean publicLookup) throws Throwable { final MethodType mt = MethodType.methodType(Object.class, Object.class); final CallSite cs = createCallSite(publicLookup, GET_PROPERTY, "class", mt); - Assert.assertEquals(cs.getTarget().invoke(new Object()), Object.class); + Assert.assertEquals(cs.getTarget().invoke(new TestObject()), TestObject.class); Assert.assertEquals(cs.getTarget().invoke(new Date()), Date.class); } @@ -208,7 +210,7 @@ public void getPropertyNegativeTest2(final boolean publicLookup) throws Throwabl final CallSite cs = createCallSite(publicLookup, GET_PROPERTY, "DOES_NOT_EXIST", mt); try { - cs.getTarget().invoke(new Object()); + cs.getTarget().invoke(new TestObject()); throw new RuntimeException("Expected NoSuchDynamicMethodException"); } catch (final Throwable th) { Assert.assertTrue(th instanceof NoSuchDynamicMethodException); diff --git a/test/jdk/jdk/dynalink/TrustedDynamicLinkerFactoryTest.java b/test/jdk/jdk/dynalink/TrustedDynamicLinkerFactoryTest.java index 560c307b1ce..d56219bd532 100644 --- a/test/jdk/jdk/dynalink/TrustedDynamicLinkerFactoryTest.java +++ b/test/jdk/jdk/dynalink/TrustedDynamicLinkerFactoryTest.java @@ -177,6 +177,8 @@ public void priorityAndFallbackLinkerTest() { Assert.assertEquals(linkerReachCounter[0], 2); } + private static class TestObject {} + @Test public void prelinkTransformerTest() throws Throwable { final DynamicLinkerFactory factory = newDynamicLinkerFactory(true); @@ -193,7 +195,7 @@ public void prelinkTransformerTest() throws Throwable { final CallSite cs = linker.link(new SimpleRelinkableCallSite(new CallSiteDescriptor( MethodHandles.publicLookup(), GET_PROPERTY, mt))); Assert.assertFalse(reachedPrelinkTransformer[0]); - Assert.assertEquals(cs.getTarget().invoke(new Object(), "class"), Object.class); + Assert.assertEquals(cs.getTarget().invoke(new TestObject(), "class"), TestObject.class); Assert.assertTrue(reachedPrelinkTransformer[0]); } @@ -212,13 +214,13 @@ public void internalObjectsFilterTest() throws Throwable { final CallSite cs = linker.link(new SimpleRelinkableCallSite(new CallSiteDescriptor( MethodHandles.publicLookup(), GET_PROPERTY, mt))); Assert.assertFalse(reachedInternalObjectsFilter[0]); - Assert.assertEquals(cs.getTarget().invoke(new Object(), "class"), Object.class); + Assert.assertEquals(cs.getTarget().invoke(new TestObject(), "class"), TestObject.class); Assert.assertTrue(reachedInternalObjectsFilter[0]); } @Test public void autoLoadedLinkerTest() { - testAutoLoadedLinkerInvoked(new Object(), "toString"); + testAutoLoadedLinkerInvoked(new TestObject(), "toString"); } @Test diff --git a/test/langtools/jdk/jshell/TypeNameTest.java b/test/langtools/jdk/jshell/TypeNameTest.java index dc2b2152ca8..082006d1595 100644 --- a/test/langtools/jdk/jshell/TypeNameTest.java +++ b/test/langtools/jdk/jshell/TypeNameTest.java @@ -51,7 +51,7 @@ public void testTypeInference() { assertEval("import java.util.ArrayList;"); assertEval("import java.util.Arrays;"); - assertType("new Object().getClass().getSuperclass() ", "Class"); + assertType("new Object() {}.getClass().getSuperclass().getSuperclass() ", "Class"); assertType("new ArrayList().getClass().getSuperclass()", "Class"); assertType("new ArrayList().getClass()", "Class"); assertType("ArrayList.class", "Class"); diff --git a/test/langtools/jdk/jshell/VariablesTest.java b/test/langtools/jdk/jshell/VariablesTest.java index 4224331b331..cf23d34be2f 100644 --- a/test/langtools/jdk/jshell/VariablesTest.java +++ b/test/langtools/jdk/jshell/VariablesTest.java @@ -509,7 +509,7 @@ public void varDeclRedefNoInit() { assertVarDeclRedefNoInit("double", "d", "3.1415926", "0.0"); assertVarDeclRedefNoInit("boolean", "n", "true", "false"); assertVarDeclRedefNoInit("char", "c", "'x'", "'\\000'"); - assertVarDeclRedefNoInit("Object", "o", "new Object()", IGNORE_VALUE, "null"); + assertVarDeclRedefNoInit("Object", "o", "new String()", IGNORE_VALUE, "null"); assertVarDeclRedefNoInit("String", "s", "\"hi\"", "null"); } diff --git a/test/langtools/tools/javac/T6873849.java b/test/langtools/tools/javac/T6873849.java index 9e4ed0c90ca..d2f05ccc36a 100644 --- a/test/langtools/tools/javac/T6873849.java +++ b/test/langtools/tools/javac/T6873849.java @@ -68,7 +68,7 @@ void test(String opt, String expect) throws Exception { void m(List t) { // force a note about unchecked usage - t.add(new Object()); + t.add(new Object() {}); } private File testSrc = new File(System.getProperty("test.src", ".")); diff --git a/test/langtools/tools/javac/TryWithResources/ResourceRedecl.java b/test/langtools/tools/javac/TryWithResources/ResourceRedecl.java index 4278dd5be3d..79990b1a464 100644 --- a/test/langtools/tools/javac/TryWithResources/ResourceRedecl.java +++ b/test/langtools/tools/javac/TryWithResources/ResourceRedecl.java @@ -16,9 +16,9 @@ public void test() { // or as a resource in a try-with-resources statement try { } catch (Exception exParam1) { - Object exParam1 = new Object(); + Object exParam1 = new Object() {}; try (java.io.FileInputStream exParam1 = new java.io.FileInputStream("foo.txt")) { - Object exParam1 = new Object(); + Object exParam1 = new Object() {}; } catch (IOException exParam1) { } } @@ -26,7 +26,7 @@ public void test() { // compiler error if resource is redeclared within the try Block as a local var // or as an exception param of a catch clause in a try statement try (java.io.FileInputStream exParam2 = new java.io.FileInputStream("bar.txt")) { - Object exParam2 = new Object(); + Object exParam2 = new Object() {}; try (BufferedReader br = new BufferedReader(new FileReader("zee.txt"))) { } catch (IOException exParam2) { } diff --git a/test/langtools/tools/javac/TryWithResources/TwrForVariable3.java b/test/langtools/tools/javac/TryWithResources/TwrForVariable3.java index c947fc8f0a4..c121c687ee3 100644 --- a/test/langtools/tools/javac/TryWithResources/TwrForVariable3.java +++ b/test/langtools/tools/javac/TryWithResources/TwrForVariable3.java @@ -6,7 +6,7 @@ public class TwrForVariable3 implements AutoCloseable { public static void main(String... args) { TwrForVariable3 v1 = new TwrForVariable3(); - Object v2 = new Object(); + Object v2 = new Object() {}; Object v3 = new Object() { public void close() { } diff --git a/test/langtools/tools/javac/TryWithResources/TwrVarRedeclaration.java b/test/langtools/tools/javac/TryWithResources/TwrVarRedeclaration.java index 3bc4b83082e..b8ffe743a8e 100644 --- a/test/langtools/tools/javac/TryWithResources/TwrVarRedeclaration.java +++ b/test/langtools/tools/javac/TryWithResources/TwrVarRedeclaration.java @@ -15,7 +15,7 @@ public static void main(String... args) { } try (r) { - Object r = new Object(); + Object r = new Object() {}; } try (r) { diff --git a/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.java b/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.java index 8a300cc42a9..d5fcecead8e 100644 --- a/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.java +++ b/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.java @@ -16,5 +16,5 @@ class InvalidRepAnnoOnCast { @Target(ElementType.TYPE_PARAMETER) @interface TC { T[] value(); } - String s = (@T(1) @T(2) String) new Object(); + String s = (@T(1) @T(2) String) new Object() {}; } diff --git a/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.out b/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.out index 612fd39fab6..03a85e6c5b5 100644 --- a/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.out +++ b/test/langtools/tools/javac/annotations/repeatingAnnotations/InvalidRepAnnoOnCast.out @@ -1,2 +1,3 @@ InvalidRepAnnoOnCast.java:19:17: compiler.err.invalid.repeatable.annotation.not.applicable.in.context: InvalidRepAnnoOnCast.TC -1 error +InvalidRepAnnoOnCast.java:19:37: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: compiler.misc.anonymous.class: java.lang.Object, @InvalidRepAnnoOnCast.T(1),@InvalidRepAnnoOnCast.T(2) java.lang.String) +2 errors diff --git a/test/langtools/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.java b/test/langtools/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.java index 65029ceb9f1..918bbe51285 100644 --- a/test/langtools/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.java +++ b/test/langtools/tools/javac/annotations/typeAnnotations/failures/common/arrays/DeclarationAnnotation.java @@ -9,7 +9,7 @@ class DeclarationAnnotation { Object e1 = new @DA int[5]; Object e2 = new @DA String[42]; - Object e3 = new @DA Object(); + Object e3 = new @DA Object() {}; Object e4 = new @DA Object() { }; } diff --git a/test/langtools/tools/javac/diags/examples/CantInstantiateObjectDirectly.java b/test/langtools/tools/javac/diags/examples/CantInstantiateObjectDirectly.java new file mode 100644 index 00000000000..dfe1e9f505f --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/CantInstantiateObjectDirectly.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2021, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// key: compiler.note.cant.instantiate.object.directly + +class CantInstantiateObjectDirectly { + { new Object(); } +} diff --git a/test/langtools/tools/javac/generics/UnsoundInference.java b/test/langtools/tools/javac/generics/UnsoundInference.java index d2b3693a8f7..9711b418fd3 100644 --- a/test/langtools/tools/javac/generics/UnsoundInference.java +++ b/test/langtools/tools/javac/generics/UnsoundInference.java @@ -13,7 +13,7 @@ public class UnsoundInference { public static void main(String[] args) { - Object[] objArray = {new Object()}; + Object[] objArray = {new Object() {}}; ArrayList strList = new ArrayList(); transferBug(objArray, strList); String str = strList.get(0); diff --git a/test/langtools/tools/javac/generics/diamond/8065986/T8065986a.java b/test/langtools/tools/javac/generics/diamond/8065986/T8065986a.java index 311b276c424..a59202827c9 100644 --- a/test/langtools/tools/javac/generics/diamond/8065986/T8065986a.java +++ b/test/langtools/tools/javac/generics/diamond/8065986/T8065986a.java @@ -10,7 +10,7 @@ class T8065986a { T8065986a() { - super(new Object<>()); + super(new Object<>() {}); } T8065986a(boolean b) { diff --git a/test/langtools/tools/javac/generics/diamond/8065986/T8065986b.java b/test/langtools/tools/javac/generics/diamond/8065986/T8065986b.java index 9793363d9c9..3f797c308df 100644 --- a/test/langtools/tools/javac/generics/diamond/8065986/T8065986b.java +++ b/test/langtools/tools/javac/generics/diamond/8065986/T8065986b.java @@ -10,7 +10,7 @@ class T8065986b { T8065986b() { - this(new Object<>()); + this(new Object<>() {}); } T8065986b(boolean b) { diff --git a/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.java b/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.java index a69cae79b1c..bbbdc97f446 100644 --- a/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.java +++ b/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.java @@ -19,6 +19,6 @@ class CaptureLowerBoundDeref { K m(I arg) { return null; } void test(Wrapper w) { - m(w.get()).take(new Object()); + m(w.get()).take(new Object() {}); } } \ No newline at end of file diff --git a/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.out b/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.out index 1d158ee72ef..8756d45b213 100644 --- a/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.out +++ b/test/langtools/tools/javac/generics/inference/CaptureLowerBoundDeref.out @@ -1,2 +1,2 @@ -CaptureLowerBoundDeref.java:22:19: compiler.err.cant.apply.symbol: kindname.method, take, compiler.misc.type.captureof: 1, ?, java.lang.Object, kindname.interface, CaptureLowerBoundDeref.K, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.inconvertible.types: java.lang.Object, compiler.misc.type.captureof: 1, ?)) +CaptureLowerBoundDeref.java:22:19: compiler.err.cant.apply.symbol: kindname.method, take, compiler.misc.type.captureof: 1, ?, compiler.misc.anonymous.class: java.lang.Object, kindname.interface, CaptureLowerBoundDeref.K, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.inconvertible.types: compiler.misc.anonymous.class: java.lang.Object, compiler.misc.type.captureof: 1, ?)) 1 error diff --git a/test/langtools/tools/javac/implicitThis/NewBeforeOuterConstructed2.java b/test/langtools/tools/javac/implicitThis/NewBeforeOuterConstructed2.java index 1c9a299e266..2e2c705b093 100644 --- a/test/langtools/tools/javac/implicitThis/NewBeforeOuterConstructed2.java +++ b/test/langtools/tools/javac/implicitThis/NewBeforeOuterConstructed2.java @@ -25,7 +25,7 @@ void f() { } } public static void main(String[] args) { - NewBeforeOuterConstructed2 c = new NewBeforeOuterConstructed2(new Object()); + NewBeforeOuterConstructed2 c = new NewBeforeOuterConstructed2(new Object() {}); Middle m = c.new Middle(); m.f(); } diff --git a/test/langtools/tools/javac/lambda/T8031967.java b/test/langtools/tools/javac/lambda/T8031967.java index 06d75daf914..e1907b5fff8 100644 --- a/test/langtools/tools/javac/lambda/T8031967.java +++ b/test/langtools/tools/javac/lambda/T8031967.java @@ -117,9 +117,9 @@ private void gen(StringBuilder code, int depth) { } code.append(".addGap(1)\n" + - ".addComponent(new Object())\n" + + ".addComponent(new Object() {})\n" + ".addGap(1)\n" + - ".addComponent(new Object())"); + ".addComponent(new Object() {})"); } class JavaSource extends SimpleJavaFileObject { diff --git a/test/langtools/tools/javac/lambda/TargetType38.java b/test/langtools/tools/javac/lambda/TargetType38.java index e6ec4d1b381..b2b8fb072fd 100644 --- a/test/langtools/tools/javac/lambda/TargetType38.java +++ b/test/langtools/tools/javac/lambda/TargetType38.java @@ -16,7 +16,7 @@ interface SAM { static Object m() { return null; } void test() { - Object o1 = (SAM)()->new Object(); + Object o1 = (SAM)()->new Object() {}; Object o2 = (SAM)TargetType38::m; } } diff --git a/test/langtools/tools/javac/lambda/TargetType38.out b/test/langtools/tools/javac/lambda/TargetType38.out index df741eb6681..185f990251c 100644 --- a/test/langtools/tools/javac/lambda/TargetType38.out +++ b/test/langtools/tools/javac/lambda/TargetType38.out @@ -1,3 +1,3 @@ -TargetType38.java:19:30: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.inconvertible.types: java.lang.Object, TargetType38.I)) +TargetType38.java:19:30: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.inconvertible.types: compiler.misc.anonymous.class: java.lang.Object, TargetType38.I)) TargetType38.java:20:26: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.mref: (compiler.misc.inconvertible.types: java.lang.Object, TargetType38.I)) 2 errors diff --git a/test/langtools/tools/javac/lambda/self_initializer/T8024809/SelfInitializerInLambdaTesta.java b/test/langtools/tools/javac/lambda/self_initializer/T8024809/SelfInitializerInLambdaTesta.java index 50d1495c4bb..72ac182efa9 100644 --- a/test/langtools/tools/javac/lambda/self_initializer/T8024809/SelfInitializerInLambdaTesta.java +++ b/test/langtools/tools/javac/lambda/self_initializer/T8024809/SelfInitializerInLambdaTesta.java @@ -9,7 +9,7 @@ public class SelfInitializerInLambdaTesta { final Runnable r1 = ()->System.out.println(r1); - final Object lock = new Object(); + final Object lock = new Object() {}; final Runnable r2 = ()->{ System.out.println(r2); diff --git a/test/langtools/tools/javac/lambda/speculative/Main.java b/test/langtools/tools/javac/lambda/speculative/Main.java index cf379494aba..5ec80ee3370 100644 --- a/test/langtools/tools/javac/lambda/speculative/Main.java +++ b/test/langtools/tools/javac/lambda/speculative/Main.java @@ -7,7 +7,7 @@ */ class Main { void test() { - m(new A(new Object())); + m(new A(new Object() {})); m(new A(null)); } diff --git a/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.java b/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.java index b2d72c8545c..c2d60bd5283 100644 --- a/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.java +++ b/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.java @@ -9,6 +9,6 @@ import java.util.List; primitive class X { - List ls = new Object(); + List ls = new Object() {}; X.ref[] xa = new Object[10]; // no support for Object.ref yet, but they are the same. } diff --git a/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.out b/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.out index 609bca6d944..0cdd13736ac 100644 --- a/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.out +++ b/test/langtools/tools/javac/valhalla/lworld-values/CheckQuestionInMessages.out @@ -1,3 +1,3 @@ -CheckQuestionInMessages.java:12:22: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: java.lang.Object, java.util.List) +CheckQuestionInMessages.java:12:22: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: compiler.misc.anonymous.class: java.lang.Object, java.util.List) CheckQuestionInMessages.java:13:18: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: java.lang.Object[], X.ref[]) 2 errors