langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java
changeset 21041 99f5e5e97425
parent 21010 5ffe0d8a5e24
child 24895 dd091d389fbf
equal deleted inserted replaced
21040:3e32f68d2151 21041:99f5e5e97425
     1 /*
     1 /*
     2  * @test /nodynamiccopyright/
     2  * @test /nodynamiccopyright/
     3  * @bug 8006733 8006775
     3  * @bug 8006733 8006775
     4 
     4  * @summary Ensure behavior for nested types is correct.
     5  * @summary A static outer class cannot be annotated.
       
     6  * @author Werner Dietl
     5  * @author Werner Dietl
     7  * @compile/fail/ref=CantAnnotateStaticClass.out -XDrawDiagnostics CantAnnotateStaticClass.java
     6  * @compile CantAnnotateStaticClass.java
     8  */
     7  */
     9 
     8 
    10 import java.util.List;
     9 import java.util.List;
       
    10 import java.util.ArrayList;
       
    11 import java.util.HashMap;
    11 import java.lang.annotation.*;
    12 import java.lang.annotation.*;
    12 
    13 
    13 class CantAnnotateStaticClass {
    14 class Top {
    14     @Target(ElementType.TYPE_USE)
    15     @Target(ElementType.TYPE_USE)
    15     @interface A {}
    16     @interface TA {}
    16 
    17 
    17     static class Outer {
    18     @Target(ElementType.TYPE_USE)
    18         class Inner {}
    19     @interface TB {}
       
    20 
       
    21     @Target(ElementType.TYPE_USE)
       
    22     @interface TC {}
       
    23 
       
    24     class Outer {
       
    25         class Inner {
       
    26             Object o1 = Top.this;
       
    27             Object o2 = Outer.this;
       
    28             Object o3 = this;
       
    29         }
       
    30         // Illegal
       
    31         // static class SInner {}
       
    32         // interface IInner {}
    19     }
    33     }
    20 
    34 
    21     // 8 errors:
    35     // All combinations are OK
    22     @A Outer.Inner f1;
    36 
    23     @A Outer.Inner f1r() { return null; }
    37     Top.@TB Outer f1;
    24     void f1p(@A Outer.Inner p) { }
    38     @TB Outer.Inner f1a;
    25     void f1c(Object o) {
    39     Outer. @TC Inner f1b;
    26         Object l = (@A Outer.Inner) o;
    40     @TB Outer. @TC Inner f1c;
       
    41 
       
    42     @TA Top. @TB Outer f2;
       
    43     @TA Top. @TB Outer.Inner f2a;
       
    44     @TA Top. Outer. @TC Inner f2b;
       
    45     @TA Top. @TB Outer. @TC Inner f2c;
       
    46 
       
    47     @TB Outer f1r() { return null; }
       
    48     @TB Outer.Inner f1ra() { return null; }
       
    49     Outer. @TC Inner f1rb() { return null; }
       
    50     @TB Outer. @TC Inner f1rc() { return null; }
       
    51 
       
    52     void f1param(@TB Outer p,
       
    53             @TB Outer.Inner p1,
       
    54             Outer. @TC Inner p2,
       
    55             @TB Outer. @TC Inner p3) { }
       
    56 
       
    57     void f1cast(Object o) {
       
    58         Object l;
       
    59         l = (@TB Outer) o;
       
    60         l = (@TB Outer.Inner) o;
       
    61         l = (Outer. @TC Inner) o;
       
    62         l = (@TB Outer. @TC Inner) o;
    27     }
    63     }
    28 
    64 
    29     List<@A Outer.Inner> f2;
    65     List<@TB Outer> g1;
    30     List<@A Outer.Inner> f2r() { return null; }
    66     List<@TB Outer.Inner> g1a;
    31     void f2p(List<@A Outer.Inner> p) { }
    67     List<Outer. @TC Inner> g1b;
    32     void f2c(Object o) {
    68     List<@TB Outer. @TC Inner> g1c;
    33         Object l = (List<@A Outer.Inner>) o;
    69 
       
    70     List<@TA Top. @TB Outer> g2;
       
    71     List<@TA Top. @TB Outer.Inner> g2a;
       
    72     List<@TA Top. Outer. @TC Inner> g2b;
       
    73     List<@TA Top. @TB Outer. @TC Inner> g2c;
       
    74 
       
    75     List<@TB Outer> g1r() { return null; }
       
    76     List<@TB Outer.Inner> g1ra() { return null; }
       
    77     List<Outer. @TC Inner> g1rb() { return null; }
       
    78     List<@TB Outer. @TC Inner> g1rc() { return null; }
       
    79 
       
    80     void g1param(List<@TB Outer> p,
       
    81             List<@TB Outer.Inner> p1,
       
    82             List<Outer. @TC Inner> p2,
       
    83             List<@TB Outer. @TC Inner> p3) { }
       
    84 
       
    85     void g1new(Object o) {
       
    86         Object l;
       
    87         l = new @TB ArrayList<@TB Outer>();
       
    88         l = new @TB ArrayList<@TB Outer.Inner>();
       
    89         l = new @TB HashMap<String, Outer. @TC Inner>();
       
    90         l = new @TB HashMap<String, @TB Outer. Inner>();
       
    91         l = new @TB HashMap<String, @TB Outer. @TC Inner>();
       
    92         l = new @TB HashMap<String, @TA Top. Outer. @TC Inner>();
       
    93         l = new @TB HashMap<String, @TA Top. @TB Outer. Inner>();
       
    94         l = new @TB HashMap<String, @TA Top. @TB Outer. @TC Inner>();
    34     }
    95     }
    35 
       
    36     // OK:
       
    37     @A Outer g1;
       
    38     List<@A Outer> g2;
       
    39     Outer. @A Inner g3;
       
    40     List<Outer. @A Inner> g4;
       
    41 }
    96 }