[lworld] RFR: 8242900: [lworld] Allow an inline type to declare a superclass that meets specified restrictions
Jim Laskey
github.com+63007666+JimLaskey at openjdk.java.net
Thu Apr 23 13:06:28 UTC 2020
On Thu, 16 Apr 2020 11:29:18 GMT, Srikanth Adayapalam <sadayapalam at openjdk.org> wrote:
> Here is a change set that implements the changes for
>
> https://bugs.openjdk.java.net/browse/JDK-8242900 ([lworld] Allow an inline type to declare a superclass that meets
> specified restrictions)
> and its prerequisite blocker:
> https://bugs.openjdk.java.net/browse/JDK-8242912 (Abstract classes should not implement IdentityObject)
>
> Here is a roadmap that would make it easier for you to review:
>
> - Go over to the JBS tickets above and read up the description of the tasks
> - Start with the new tests to understand what is being implemented and tested:
>
> test/langtools/tools/javac/valhalla/lworld-values/BinarySuperclassConstraints.java
> test/langtools/tools/javac/valhalla/lworld-values/BinarySuperclassConstraints.out
> test/langtools/tools/javac/valhalla/lworld-values/SuperclassCollections.java
> test/langtools/tools/javac/valhalla/lworld-values/SuperclassConstraints.java
> test/langtools/tools/javac/valhalla/lworld-values/SuperclassConstraints.out
>
> - Review of source files is best taken up in this order:
> Flags.java: defines two new flags to decorate classes with initializer blocks and empty no-arg constructor as being
> such. Attr.java: During attribution flag classes that have initializer blocks and constructors that are empty no-arg
> constructors.
> Arrange to check for constraints of a super class of an inline class.
> Check.java: Check the superclass's constraints when asked by the attributor.
> ClassReader.java: When reading class files, flags constructors that are empty no-arg constructors (save for chaining to
> super's no-arg ctor) compiler.properties: new errors.
> TransValues.java: In earlier versions, Inline types implicitly extended jlO, so any super() chaining call must be jlO's
> ctor. This is no longer the case. So remove the assertion. TreeInfo.java: Tweak to a utility method to make it more
> general and suitable for our present needs. TypeEnter.java: Earlier specs forbid an inline type declaration to have an
> extends clause. This is no longer illegal. So we don't error anymore. Abstract types should not implement the new top
> interface (IdentityObject)
>
> - These changes are simply rolling back prior changes made at the time of injection of new top interfaces. Because we
> don't inject them anymore for abstract classes, we should not encode them in "golden" files:
> test/jdk/java/lang/annotation/TypeAnnotationReflection.java
> test/jdk/java/lang/reflect/Generics/TestC1.java
> test/jdk/java/lang/reflect/Generics/TestC2.java
> test/langtools/tools/javac/processing/rounds/OverwriteBetweenCompilations_2.out
> test/langtools/tools/javac/processing/rounds/OverwriteBetweenCompilations_3.out
> test/langtools/tools/javap/AnnoTest.java
>
> - To shut up CheckExamples.java from spuriously failing, for the time being add the new compiler message keys to the
> white list:
> test/langtools/tools/javac/diags/examples.not-yet.txt
>
> - Other minorly modified tests that you may want to eyeball: (The diagnostics change a little bit since "extends" clause
> is no longer illegal. I have added -XDallowEmptyValues in some cases to exercise different code paths and elicit
> different diagnostics)
>
> test/langtools/tools/javac/valhalla/lworld-values/CheckExtends.java
> test/langtools/tools/javac/valhalla/lworld-values/CheckExtends.out
> test/langtools/tools/javac/valhalla/lworld-values/IllegalByValueTest2.out
> test/langtools/tools/javac/valhalla/lworld-values/InlineAnnotationTest.java
> test/langtools/tools/javac/valhalla/lworld-values/InlineAnnotationTest.out
> test/langtools/tools/javac/valhalla/lworld-values/ValueAnnotationTest.out
> test/langtools/tools/javac/valhalla/lworld-values/ValueModifierTest.out
>
> - This one is an odd man out: (Earlier Number implemented IdentityObject, but not anymore since it is abstract, so it is
> injected deeper now and surfaces - but this whole express injection is a temporary thing and will go away with
> JDK-8242612
> test/langtools/tools/javac/varargs/6806876/T6806876.out
Marked as reviewed by JimLaskey at github.com (no known OpenJDK username).
-------------
PR: https://git.openjdk.java.net/valhalla/pull/23
More information about the valhalla-dev
mailing list