[lworld] RFR: 8242900: [lworld] Allow an inline type to declare a superclass that meets specified restrictions

Srikanth Adayapalam sadayapalam at openjdk.java.net
Thu Apr 16 11:53:18 UTC 2020


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

-------------

Commit messages:
 - 8242900: Fix training white spaces
 - 8242900: Tests for supertypes constraints for inline types
 - 8242900: [lworld] Allow an inline type to declare a superclass that meets specified restrictions

Changes: https://git.openjdk.java.net/valhalla/pull/23/files
 Webrev: https://webrevs.openjdk.java.net/valhalla/23/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8242900
  Stats: 448 lines in 28 files changed: 397 ins; 11 del; 40 mod
  Patch: https://git.openjdk.java.net/valhalla/pull/23.diff
  Fetch: git fetch https://git.openjdk.java.net/valhalla pull/23/head:pull/23

PR: https://git.openjdk.java.net/valhalla/pull/23


More information about the valhalla-dev mailing list