langtools/test/tools/apt/mirror/type/InterfaceTyp.java
changeset 11914 d1311b0c757f
parent 11913 be61e1597cc6
parent 11872 c51754cddc03
child 11915 33f703959597
child 11986 6f383069eb6d
equal deleted inserted replaced
11913:be61e1597cc6 11914:d1311b0c757f
     1 /*
       
     2  * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 
       
    25 /*
       
    26  * @test
       
    27  * @bug 4853450 5055963
       
    28  * @summary InterfaceType tests
       
    29  * @library ../../lib
       
    30  * @run main/othervm InterfaceTyp
       
    31  */
       
    32 
       
    33 
       
    34 import java.util.*;
       
    35 import com.sun.mirror.declaration.*;
       
    36 import com.sun.mirror.type.*;
       
    37 import com.sun.mirror.util.*;
       
    38 
       
    39 
       
    40 public class InterfaceTyp<T1,T2> extends Tester {
       
    41 
       
    42     public static void main(String[] args) {
       
    43         (new InterfaceTyp()).run();
       
    44     }
       
    45 
       
    46 
       
    47     // Declarations used by tests
       
    48 
       
    49     interface I1<S> extends Set<String> {
       
    50         interface I2<R> {
       
    51         }
       
    52     }
       
    53 
       
    54 
       
    55     // Generate some interface types to test
       
    56     private I1<T1> f0;
       
    57     private I1<String> f1;
       
    58     private I1 f2;
       
    59     private I1.I2<String> f3;
       
    60     private I1.I2 f4;
       
    61     private I1<T1> f5;
       
    62     private I3<T1> f6;
       
    63     private static final int NUMTYPES = 7;
       
    64 
       
    65     // Type mirrors corresponding to the types of the above fields
       
    66     private InterfaceType[] t = new InterfaceType[NUMTYPES];
       
    67 
       
    68     protected void init() {
       
    69         for (int i = 0; i < t.length; i++) {
       
    70             t[i] = (InterfaceType) getField("f"+i).getType();
       
    71         }
       
    72     }
       
    73 
       
    74 
       
    75     // TypeMirror methods
       
    76 
       
    77     @Test(result="interface")
       
    78     Collection<String> accept() {
       
    79         final Collection<String> res = new ArrayList<String>();
       
    80 
       
    81         t[0].accept(new SimpleTypeVisitor() {
       
    82             public void visitReferenceType(ReferenceType t) {
       
    83                 res.add("ref type");
       
    84             }
       
    85             public void visitClassType(ClassType t) {
       
    86                 res.add("class");
       
    87             }
       
    88             public void visitInterfaceType(InterfaceType t) {
       
    89                 res.add("interface");
       
    90             }
       
    91         });
       
    92         return res;
       
    93     }
       
    94 
       
    95     @Test(result="true")
       
    96     boolean equals1() {
       
    97         return t[0].equals(t[0]);
       
    98     }
       
    99 
       
   100     @Test(result="false")
       
   101     boolean equals2() {
       
   102         return t[0].equals(t[1]);
       
   103     }
       
   104 
       
   105     // Raw type is not same as type instantiated with unbounded type var.
       
   106     @Test(result="false")
       
   107     boolean equals3() {
       
   108         return t[0].equals(t[2]);
       
   109     }
       
   110 
       
   111     // I1<T1> is same type as I1<T1>
       
   112     @Test(result="true")
       
   113     boolean equals4() {
       
   114         return t[0].equals(t[5]);
       
   115     }
       
   116 
       
   117     @Test(result={
       
   118               "InterfaceTyp.I1<T1>",
       
   119               "InterfaceTyp.I1<java.lang.String>",
       
   120               "InterfaceTyp.I1",
       
   121               "InterfaceTyp.I1.I2<java.lang.String>",
       
   122               "InterfaceTyp.I1.I2",
       
   123               "InterfaceTyp.I1<T1>",
       
   124               "I3<T1>"
       
   125           },
       
   126           ordered=true)
       
   127     Collection<String> toStringTests() {
       
   128         Collection<String> res = new ArrayList<String>();
       
   129         for (InterfaceType i : t) {
       
   130             res.add(i.toString());
       
   131         }
       
   132         return res;
       
   133     }
       
   134 
       
   135 
       
   136     // DeclaredType methods
       
   137 
       
   138     @Test(result={"T1"})
       
   139     Collection<TypeMirror> getActualTypeArguments1() {
       
   140         return t[0].getActualTypeArguments();
       
   141     }
       
   142 
       
   143     @Test(result={})
       
   144     Collection<TypeMirror> getActualTypeArguments2() {
       
   145         return t[2].getActualTypeArguments();
       
   146     }
       
   147 
       
   148     @Test(result={"java.lang.String"})
       
   149     Collection<TypeMirror> getActualTypeArguments3() {
       
   150         return t[3].getActualTypeArguments();
       
   151     }
       
   152 
       
   153     @Test(result="InterfaceTyp")
       
   154     DeclaredType getContainingType1() {
       
   155         return t[0].getContainingType();
       
   156     }
       
   157 
       
   158     @Test(result="InterfaceTyp.I1")
       
   159     DeclaredType getContainingType2() {
       
   160         return t[3].getContainingType();
       
   161     }
       
   162 
       
   163     @Test(result="null")
       
   164     DeclaredType getContainingTypeTopLevel() {
       
   165         return t[6].getContainingType();
       
   166     }
       
   167 
       
   168     @Test(result={"java.util.Set<java.lang.String>"})
       
   169     Collection<InterfaceType> getSuperinterfaces() {
       
   170         return t[0].getSuperinterfaces();
       
   171     }
       
   172 
       
   173 
       
   174 
       
   175     // InterfaceType method
       
   176 
       
   177     @Test(result="InterfaceTyp.I1<S>")
       
   178     InterfaceDeclaration getDeclaration1() {
       
   179         return t[0].getDeclaration();
       
   180     }
       
   181 
       
   182     @Test(result="InterfaceTyp.I1.I2<R>")
       
   183     InterfaceDeclaration getDeclaration2a() {
       
   184         return t[3].getDeclaration();
       
   185     }
       
   186 
       
   187     @Test(result="InterfaceTyp.I1.I2<R>")
       
   188     InterfaceDeclaration getDeclaration2b() {
       
   189         return t[4].getDeclaration();
       
   190     }
       
   191 
       
   192     @Test(result="true")
       
   193     boolean getDeclarationCaching() {
       
   194         return t[0].getDeclaration() == t[5].getDeclaration();
       
   195     }
       
   196 }
       
   197 
       
   198 
       
   199 // A top-level interface used by tests.
       
   200 
       
   201 interface I3<T> {
       
   202 }