Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AsSuperVisitor: type is not an erased subtype of supertype #3598

Closed
cushon opened this issue Aug 16, 2020 · 1 comment · Fixed by #3603
Closed

AsSuperVisitor: type is not an erased subtype of supertype #3598

cushon opened this issue Aug 16, 2020 · 1 comment · Fixed by #3603
Assignees
Labels
Milestone

Comments

@cushon
Copy link
Contributor

cushon commented Aug 16, 2020

import java.util.Optional;
import java.util.function.Function;

interface A extends B {}

interface B { 
  interface C {}
}

class D extends E implements A {}

class E<F extends E<F, G>, G extends E.J<F, G>> implements B { 
  abstract static class J<H extends E<H, I>, I extends J<H, I>> implements B.C {}
}

class K extends L {}

class L extends D {}

class X<P extends A> implements Function<P, Optional<P>> {

  @Override
  public Optional<P> apply(P protoT) {
    return Optional.empty();
  }

  static Function<K, Optional<K>> f(K k) {
    return new X<>(k);
  }

  X(P p) {}
}
./checker/bin/javac -processor Nullness X.java
error: AsSuperVisitor: type is not an erased subtype of supertype.
  type: A
  superType: AccessControlPolicy
  ; The Checker Framework crashed.  Please report the crash.
  Compilation unit: X.java
  Last visited tree at line 31 column 5:
      return new X<>(a);
  Exception: java.lang.Throwable; java.lang.Throwable
        at org.checkerframework.javacutil.BugInCF.<init>(BugInCF.java:25)
        at org.checkerframework.framework.type.AsSuperVisitor.errorTypeNotErasedSubtypeOfSuperType(AsSuperVisitor.java:165)
        at org.checkerframework.framework.type.AsSuperVisitor.visitDeclared_Declared(AsSuperVisitor.java:349)
        at org.checkerframework.framework.type.AsSuperVisitor.visitDeclared_Declared(AsSuperVisitor.java:29)
        at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:314)
        at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visit(AbstractAtmComboVisitor.java:57)
        at org.checkerframework.framework.type.AsSuperVisitor.visit(AsSuperVisitor.java:96)
        at org.checkerframework.framework.type.AsSuperVisitor.asSuper(AsSuperVisitor.java:78)
        at org.checkerframework.framework.util.AnnotatedTypes.asSuper(AnnotatedTypes.java:110)
        at org.checkerframework.framework.util.AnnotatedTypes.castedAsSuper(AnnotatedTypes.java:138)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.visitDeclared_Declared(DefaultTypeHierarchy.java:504)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.visitDeclared_Declared(DefaultTypeHierarchy.java:43)
        at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:314)
@smillst
Copy link
Member

smillst commented Aug 19, 2020

Simplified testcase:

import java.util.function.Function;

class Issue3598 {

    static class DClass extends EClass { }

    static class EClass<F> { }

    // Must be Function, can't use interface defined in this class.
    static class XClass<P> implements Function<P, P> {

        @Override
        public P apply(P protoT) {
            return protoT;
        }

        // DClass extends a raw class.
        static Function<DClass, DClass> f(DClass k) {
            // Crash on this line.
            return new XClass<>(k);
        }

        XClass(P p) {}
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants