Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8133123

javac: AssertionError: isSubClass T

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P4
    • Resolution: Duplicate
    • Affects Version/s: 8u51
    • Fix Version/s: None
    • Component/s: tools
    • Labels:
    • Subcomponent:
    • CPU:
      x86_64
    • OS:
      windows_7

      Description

      FULL PRODUCT VERSION :
      java version "1.8.0_51"
      Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
      Java HotSpot(TM) Client VM (build 25.51-b03, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 6.1.7601]

      A DESCRIPTION OF THE PROBLEM :
      javac throws an AssertionError when compiling the following classes. While the structure of the classes looks similar to the case described in JDK-8067111 (which was resolved in 8u40), the problem still occurs with 8u51.

      The problem does NOT occur on java 9, javac 1.9.0-ea-b72 complies those classes as expected

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Compile the classes using

      javac *.java

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Classes compile without error
      ACTUAL -
      javac throws AssertionError, complete message/stack trace see below

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      An exception has occurred in the compiler (1.8.0_51). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
      java.lang.AssertionError: isSubClass T
              at com.sun.tools.javac.code.Symbol.isSubClass(Symbol.java:447)
              at com.sun.tools.javac.code.Symbol.isMemberOf(Symbol.java:456)
              at com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:1469)
              at com.sun.tools.javac.code.Types$ImplementationCache.implementationInternal(Types.java:2678)
              at com.sun.tools.javac.code.Types$ImplementationCache.get(Types.java:2660)
              at com.sun.tools.javac.code.Types.implementation(Types.java:2689)
              at com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:1529)
              at com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:1518)
              at com.sun.tools.javac.comp.Resolve.notOverriddenIn(Resolve.java:419)
              at com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:405)
              at com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:365)
              at com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:1458)
              at com.sun.tools.javac.comp.Resolve.findMethodInScope(Resolve.java:1628)
              at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1720)
              at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1672)
              at com.sun.tools.javac.comp.Resolve$MethodReferenceLookupHelper.lookup(Resolve.java:3179)
              at com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3335)
              at com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3320)
              at com.sun.tools.javac.comp.Resolve.getMemberReference(Resolve.java:2728)
              at com.sun.tools.javac.comp.DeferredAttr$DeferredChecker.visitReference(DeferredAttr.java:1182)
              at com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:1973)
              at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
              at com.sun.tools.javac.comp.DeferredAttr$FilterScanner.scan(DeferredAttr.java:912)
              at com.sun.tools.javac.comp.DeferredAttr.isDeferred(DeferredAttr.java:1099)
              at com.sun.tools.javac.comp.Attr.attribArgs(Attr.java:660)
              at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1797)
              at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
              at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
              at com.sun.tools.javac.comp.DeferredAttr.attribSpeculative(DeferredAttr.java:386)
              at com.sun.tools.javac.comp.DeferredAttr$2.complete(DeferredAttr.java:279)
              at com.sun.tools.javac.comp.DeferredAttr$DeferredType.check(DeferredAttr.java:245)
              at com.sun.tools.javac.comp.DeferredAttr$DeferredType.check(DeferredAttr.java:232)
              at com.sun.tools.javac.comp.Resolve$MethodResultInfo.check(Resolve.java:1003)
              at com.sun.tools.javac.comp.Resolve$4.checkArg(Resolve.java:829)
              at com.sun.tools.javac.comp.Resolve$AbstractMethodCheck.argumentsAcceptable(Resolve.java:734)
              at com.sun.tools.javac.comp.Resolve$4.argumentsAcceptable(Resolve.java:838)
              at com.sun.tools.javac.comp.Infer.instantiateMethod(Infer.java:162)
              at com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:567)
              at com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:1441)
              at com.sun.tools.javac.comp.Resolve.findMethodInScope(Resolve.java:1628)
              at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1699)
              at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1672)
              at com.sun.tools.javac.comp.Resolve$9.doLookup(Resolve.java:2425)
              at com.sun.tools.javac.comp.Resolve$BasicLookupHelper.lookup(Resolve.java:3084)
              at com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3335)
              at com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2422)
              at com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2416)
              at com.sun.tools.javac.comp.Attr.selectSym(Attr.java:3364)
              at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3246)
              at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1897)
              at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
              at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1806)
              at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
              at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
              at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:615)
              at com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1574)
              at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1296)
              at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
              at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
              at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:651)
              at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1105)
              at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
              at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
              at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
              at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:994)
              at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
              at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:566)
              at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:635)
              at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4330)
              at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4240)
              at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4169)
              at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4144)
              at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1248)
              at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
              at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
              at com.sun.tools.javac.main.Main.compile(Main.java:523)
              at com.sun.tools.javac.main.Main.compile(Main.java:381)
              at com.sun.tools.javac.main.Main.compile(Main.java:370)
              at com.sun.tools.javac.main.Main.compile(Main.java:361)
              at com.sun.tools.javac.Main.compile(Main.java:56)
              at com.sun.tools.javac.Main.main(Main.java:42)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      CollectionConsumer.java
      ====================
      import static java.util.stream.Collectors.toMap;

      import java.util.Collection;
      import java.util.function.Function;

      abstract class CollectionConsumer<T extends AbstractClass> {

        protected CollectionConsumer(Collection<T> col) {
          col.stream().collect(toMap(T::getId, Function.identity())); // crashes javac (1.8.0_51-b16), compiles fine with eclipse compiler
                                                                      // and javac (1.9.0-ea-b72)
          col.stream().collect(toMap(AbstractClass::getId, Function.identity())); // compiles fine with both javac (all versions) and
                                                                                  // eclipse compiler
        }

      }


      Intfc.java
      =======
      public interface Intfc {
        
        String getId();

      }


      SuperClassWithGetId.java
      =====================
      public abstract class SuperClassWithGetId {
        
        public String getId() {
          return "Id";
        }

      }


      AbstractClass.java
      ===============
      public abstract class AbstractClass extends SuperClassWithGetId implements Intfc {

      }



      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      See the the CollectionConsumer class in the test case for a working, equivalent alternative

        Attachments

        1. AbstractClass.java
          0.1 kB
          Pardeep Sharma
        2. CollectionConsumer.java
          0.7 kB
          Pardeep Sharma
        3. Intfc.java
          0.1 kB
          Pardeep Sharma
        4. SuperClassWithGetId.java
          0.1 kB
          Pardeep Sharma

          Issue Links

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: