blob: 7e4581851e516787f30c250427ff43ad9ea1a0ed [file] [log] [blame]
/*
* @test /nodynamiccopyright/
* @bug 8006775
* @summary Ensure unresolved upper bound annotation is handled correctly
* @author Werner Dietl
* @compile/fail/ref=BrokenAnnotation.out -XDrawDiagnostics BrokenAnnotation.java
*/
// No import, making the annotation @A invalid.
// import java.lang.annotation.*;
// Works: @Broke.A class...
// Works: class Broke<@Broke.A T> {
// Used to fail:
class BrokenAnnotation<T extends @BrokenAnnotation.A Object> {
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@interface A { }
}
// If the Annotation is e.g. on the top-level class, we
// get something like this:
//
// Broke.java:6: cannot find symbol
// symbol : class Target
// location: class Broke
// @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
// ^
// 1 error
//
// When the annotation is in the upper bound, one used to get
// the following stack trace:
//
// An exception has occurred in the compiler (1.7.0-jsr308-1.2.7). Please report this bug so we can fix it. For instructions, see http://types.cs.washington.edu/checker-framework/current/README-jsr308.html#reporting-bugs . Thank you.
// java.lang.NullPointerException
// at com.sun.tools.javac.code.Type.isCompound(Type.java:346)
// at com.sun.tools.javac.code.Types.getBounds(Types.java:1940)
// at com.sun.tools.javac.util.RichDiagnosticFormatter$1.visitTypeVar(RichDiagnosticFormatter.java:534)
// at com.sun.tools.javac.util.RichDiagnosticFormatter$1.visitTypeVar(RichDiagnosticFormatter.java:1)
// at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1049)
// at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3809)
// at com.sun.tools.javac.util.RichDiagnosticFormatter$1.visit(RichDiagnosticFormatter.java:450)
// at com.sun.tools.javac.util.RichDiagnosticFormatter$1.visitClassType(RichDiagnosticFormatter.java:518)
// at com.sun.tools.javac.util.RichDiagnosticFormatter$1.visitClassType(RichDiagnosticFormatter.java:1)
// at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:596)
// at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3809)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.preprocessType(RichDiagnosticFormatter.java:442)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.preprocessArgument(RichDiagnosticFormatter.java:172)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.preprocessDiagnostic(RichDiagnosticFormatter.java:155)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.preprocessArgument(RichDiagnosticFormatter.java:178)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.preprocessDiagnostic(RichDiagnosticFormatter.java:155)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:111)
// at com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:1)
// at com.sun.tools.javac.util.Log.writeDiagnostic(Log.java:514)
// at com.sun.tools.javac.util.Log.report(Log.java:496)
// at com.sun.tools.javac.comp.Resolve.logResolveError(Resolve.java:2160)
// at com.sun.tools.javac.comp.Resolve.access(Resolve.java:1553)
// at com.sun.tools.javac.comp.Resolve.access(Resolve.java:1580)
// at com.sun.tools.javac.comp.Resolve.access(Resolve.java:1592)
// at com.sun.tools.javac.comp.Resolve.resolveIdent(Resolve.java:1653)
// at com.sun.tools.javac.comp.Attr.visitIdent(Attr.java:2191)
// at com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:1873)
// at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:467)
// at com.sun.tools.javac.comp.Attr.attribType(Attr.java:503)
// at com.sun.tools.javac.comp.Attr.attribType(Attr.java:496)
// at com.sun.tools.javac.comp.Attr.attribAnnotationTypes(Attr.java:605)
// at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:944)
// at com.sun.tools.javac.code.Symbol.complete(Symbol.java:432)
// at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:832)
// at com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:775)
// at com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:350)
// at com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:346)
// at com.sun.tools.javac.comp.Resolve.findMemberType(Resolve.java:1346)
// at com.sun.tools.javac.comp.Resolve.findIdentInType(Resolve.java:1512)
// at com.sun.tools.javac.comp.Attr.selectSym(Attr.java:2434)
// at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:2312)
// at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1805)
// at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:467)
// at com.sun.tools.javac.comp.Attr.attribType(Attr.java:503)
// at com.sun.tools.javac.comp.Attr.attribType(Attr.java:496)
// at com.sun.tools.javac.comp.Attr.attribAnnotationTypes(Attr.java:605)
// at com.sun.tools.javac.comp.Attr.visitAnnotatedType(Attr.java:3016)
// at com.sun.tools.javac.tree.JCTree$JCAnnotatedType.accept(JCTree.java:2253)
// at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:467)
// at com.sun.tools.javac.comp.Attr.attribType(Attr.java:503)
// at com.sun.tools.javac.comp.Attr.attribType(Attr.java:496)
// at com.sun.tools.javac.comp.Attr.attribTypeVariables(Attr.java:569)
// at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:955)
// at com.sun.tools.javac.code.Symbol.complete(Symbol.java:432)
// at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:832)
// at com.sun.tools.javac.comp.Enter.complete(Enter.java:500)
// at com.sun.tools.javac.comp.Enter.main(Enter.java:478)
// at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:950)
// at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:841)
// at com.sun.tools.javac.main.Main.compile(Main.java:441)
// at com.sun.tools.javac.main.Main.compile(Main.java:358)
// at com.sun.tools.javac.main.Main.compile(Main.java:347)
// at com.sun.tools.javac.main.Main.compile(Main.java:338)
// at com.sun.tools.javac.Main.compile(Main.java:76)
// at com.sun.tools.javac.Main.main(Main.java:61)