test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java

changeset 2134
b0c086cd4520
parent 2103
b1b4a6dcc282
child 2525
2eb010b6cb22
     1.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java	Tue Oct 15 22:15:35 2013 +0200
     1.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java	Tue Oct 15 15:57:13 2013 -0700
     1.3 @@ -1,41 +1,96 @@
     1.4  /*
     1.5   * @test /nodynamiccopyright/
     1.6   * @bug 8006733 8006775
     1.7 -
     1.8 - * @summary A static outer class cannot be annotated.
     1.9 + * @summary Ensure behavior for nested types is correct.
    1.10   * @author Werner Dietl
    1.11 - * @compile/fail/ref=CantAnnotateStaticClass.out -XDrawDiagnostics CantAnnotateStaticClass.java
    1.12 + * @compile CantAnnotateStaticClass.java
    1.13   */
    1.14  
    1.15  import java.util.List;
    1.16 +import java.util.ArrayList;
    1.17 +import java.util.HashMap;
    1.18  import java.lang.annotation.*;
    1.19  
    1.20 -class CantAnnotateStaticClass {
    1.21 +class Top {
    1.22      @Target(ElementType.TYPE_USE)
    1.23 -    @interface A {}
    1.24 +    @interface TA {}
    1.25  
    1.26 -    static class Outer {
    1.27 -        class Inner {}
    1.28 +    @Target(ElementType.TYPE_USE)
    1.29 +    @interface TB {}
    1.30 +
    1.31 +    @Target(ElementType.TYPE_USE)
    1.32 +    @interface TC {}
    1.33 +
    1.34 +    class Outer {
    1.35 +        class Inner {
    1.36 +            Object o1 = Top.this;
    1.37 +            Object o2 = Outer.this;
    1.38 +            Object o3 = this;
    1.39 +        }
    1.40 +        // Illegal
    1.41 +        // static class SInner {}
    1.42 +        // interface IInner {}
    1.43      }
    1.44  
    1.45 -    // 8 errors:
    1.46 -    @A Outer.Inner f1;
    1.47 -    @A Outer.Inner f1r() { return null; }
    1.48 -    void f1p(@A Outer.Inner p) { }
    1.49 -    void f1c(Object o) {
    1.50 -        Object l = (@A Outer.Inner) o;
    1.51 +    // All combinations are OK
    1.52 +
    1.53 +    Top.@TB Outer f1;
    1.54 +    @TB Outer.Inner f1a;
    1.55 +    Outer. @TC Inner f1b;
    1.56 +    @TB Outer. @TC Inner f1c;
    1.57 +
    1.58 +    @TA Top. @TB Outer f2;
    1.59 +    @TA Top. @TB Outer.Inner f2a;
    1.60 +    @TA Top. Outer. @TC Inner f2b;
    1.61 +    @TA Top. @TB Outer. @TC Inner f2c;
    1.62 +
    1.63 +    @TB Outer f1r() { return null; }
    1.64 +    @TB Outer.Inner f1ra() { return null; }
    1.65 +    Outer. @TC Inner f1rb() { return null; }
    1.66 +    @TB Outer. @TC Inner f1rc() { return null; }
    1.67 +
    1.68 +    void f1param(@TB Outer p,
    1.69 +            @TB Outer.Inner p1,
    1.70 +            Outer. @TC Inner p2,
    1.71 +            @TB Outer. @TC Inner p3) { }
    1.72 +
    1.73 +    void f1cast(Object o) {
    1.74 +        Object l;
    1.75 +        l = (@TB Outer) o;
    1.76 +        l = (@TB Outer.Inner) o;
    1.77 +        l = (Outer. @TC Inner) o;
    1.78 +        l = (@TB Outer. @TC Inner) o;
    1.79      }
    1.80  
    1.81 -    List<@A Outer.Inner> f2;
    1.82 -    List<@A Outer.Inner> f2r() { return null; }
    1.83 -    void f2p(List<@A Outer.Inner> p) { }
    1.84 -    void f2c(Object o) {
    1.85 -        Object l = (List<@A Outer.Inner>) o;
    1.86 +    List<@TB Outer> g1;
    1.87 +    List<@TB Outer.Inner> g1a;
    1.88 +    List<Outer. @TC Inner> g1b;
    1.89 +    List<@TB Outer. @TC Inner> g1c;
    1.90 +
    1.91 +    List<@TA Top. @TB Outer> g2;
    1.92 +    List<@TA Top. @TB Outer.Inner> g2a;
    1.93 +    List<@TA Top. Outer. @TC Inner> g2b;
    1.94 +    List<@TA Top. @TB Outer. @TC Inner> g2c;
    1.95 +
    1.96 +    List<@TB Outer> g1r() { return null; }
    1.97 +    List<@TB Outer.Inner> g1ra() { return null; }
    1.98 +    List<Outer. @TC Inner> g1rb() { return null; }
    1.99 +    List<@TB Outer. @TC Inner> g1rc() { return null; }
   1.100 +
   1.101 +    void g1param(List<@TB Outer> p,
   1.102 +            List<@TB Outer.Inner> p1,
   1.103 +            List<Outer. @TC Inner> p2,
   1.104 +            List<@TB Outer. @TC Inner> p3) { }
   1.105 +
   1.106 +    void g1new(Object o) {
   1.107 +        Object l;
   1.108 +        l = new @TB ArrayList<@TB Outer>();
   1.109 +        l = new @TB ArrayList<@TB Outer.Inner>();
   1.110 +        l = new @TB HashMap<String, Outer. @TC Inner>();
   1.111 +        l = new @TB HashMap<String, @TB Outer. Inner>();
   1.112 +        l = new @TB HashMap<String, @TB Outer. @TC Inner>();
   1.113 +        l = new @TB HashMap<String, @TA Top. Outer. @TC Inner>();
   1.114 +        l = new @TB HashMap<String, @TA Top. @TB Outer. Inner>();
   1.115 +        l = new @TB HashMap<String, @TA Top. @TB Outer. @TC Inner>();
   1.116      }
   1.117 -
   1.118 -    // OK:
   1.119 -    @A Outer g1;
   1.120 -    List<@A Outer> g2;
   1.121 -    Outer. @A Inner g3;
   1.122 -    List<Outer. @A Inner> g4;
   1.123  }

mercurial