langtools/test/tools/apt/mirror/declaration/MethodDecl.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 5010746
       
    28  * @summary MethodDeclaration tests
       
    29  * @library ../../lib
       
    30  * @compile -source 1.5 MethodDecl.java
       
    31  * @run main/othervm MethodDecl
       
    32  */
       
    33 
       
    34 
       
    35 import java.util.*;
       
    36 import com.sun.mirror.declaration.*;
       
    37 import com.sun.mirror.type.*;
       
    38 import com.sun.mirror.util.*;
       
    39 
       
    40 
       
    41 public class MethodDecl extends Tester {
       
    42 
       
    43     public static void main(String[] args) {
       
    44         (new MethodDecl()).run();
       
    45     }
       
    46 
       
    47 
       
    48     private MethodDeclaration meth1 = null;             // a method
       
    49     private MethodDeclaration meth2 = null;             // another method
       
    50 
       
    51     protected void init() {
       
    52         meth1 = getMethod("m1");
       
    53         meth2 = getMethod("m2");
       
    54     }
       
    55 
       
    56 
       
    57     // Declaration methods
       
    58 
       
    59     @Test(result="method")
       
    60     Collection<String> accept() {
       
    61         final Collection<String> res = new ArrayList<String>();
       
    62 
       
    63         meth1.accept(new SimpleDeclarationVisitor() {
       
    64             public void visitTypeDeclaration(TypeDeclaration t) {
       
    65                 res.add("type");
       
    66             }
       
    67             public void visitExecutableDeclaration(ExecutableDeclaration e) {
       
    68                 res.add("executable");
       
    69             }
       
    70             public void visitMethodDeclaration(MethodDeclaration m) {
       
    71                 res.add("method");
       
    72             }
       
    73             public void visitAnnotationTypeElementDeclaration(
       
    74                                         AnnotationTypeElementDeclaration a) {
       
    75                 res.add("anno type element");
       
    76             }
       
    77         });
       
    78         return res;
       
    79     }
       
    80 
       
    81     @Test(result={"@AT1"})
       
    82     Collection<AnnotationMirror> getAnnotationMirrors() {
       
    83         return meth1.getAnnotationMirrors();
       
    84     }
       
    85 
       
    86     @Test(result=" Sed Quis custodiet ipsos custodes?\n")
       
    87     String getDocComment() {
       
    88         return meth1.getDocComment();
       
    89     }
       
    90 
       
    91     @Test(result={"private", "static", "strictfp"})
       
    92     Collection<Modifier> getModifiers() {
       
    93         return meth1.getModifiers();
       
    94     }
       
    95 
       
    96     // Interface methods are implicitly public and abstract.
       
    97     @Test(result={"public", "abstract"})
       
    98     Collection<Modifier> getModifiersInterface() {
       
    99         for (TypeDeclaration t : thisClassDecl.getNestedTypes()) {
       
   100             for (MethodDeclaration m : t.getMethods()) {
       
   101                 return m.getModifiers();
       
   102             }
       
   103         }
       
   104         throw new AssertionError();
       
   105     }
       
   106 
       
   107     @Test(result="MethodDecl.java")
       
   108     String getPosition() {
       
   109         return meth1.getPosition().file().getName();
       
   110     }
       
   111 
       
   112     @Test(result="m2")
       
   113     String getSimpleName() {
       
   114         return meth2.getSimpleName();
       
   115     }
       
   116 
       
   117 
       
   118     // MemberDeclaration method
       
   119 
       
   120     @Test(result="MethodDecl")
       
   121     TypeDeclaration getDeclaringType() {
       
   122         return meth1.getDeclaringType();
       
   123     }
       
   124 
       
   125 
       
   126     // ExecutableDeclaration methods
       
   127 
       
   128     @Test(result={})
       
   129     Collection<TypeParameterDeclaration> getFormalTypeParameters1() {
       
   130         return meth1.getFormalTypeParameters();
       
   131     }
       
   132 
       
   133     @Test(result={"T", "N extends java.lang.Number"},
       
   134           ordered=true)
       
   135     Collection<TypeParameterDeclaration> getFormalTypeParameters2() {
       
   136         return meth2.getFormalTypeParameters();
       
   137     }
       
   138 
       
   139     @Test(result={})
       
   140     Collection<ParameterDeclaration> getParameters1() {
       
   141         return meth1.getParameters();
       
   142     }
       
   143 
       
   144     @Test(result={"N n", "java.lang.String[] ss"},
       
   145           ordered=true)
       
   146     Collection<ParameterDeclaration> getParameters2() {
       
   147         return meth2.getParameters();
       
   148     }
       
   149 
       
   150     @Test(result="true")
       
   151     boolean parameterEquals1() {
       
   152         ParameterDeclaration p1 =
       
   153             getMethod("m3").getParameters().iterator().next();
       
   154         ParameterDeclaration p2 =
       
   155             getMethod("m3").getParameters().iterator().next();
       
   156         return p1.equals(p2);
       
   157     }
       
   158 
       
   159     @Test(result="false")
       
   160     boolean parameterEquals2() {
       
   161         ParameterDeclaration p1 =
       
   162             getMethod("m3").getParameters().iterator().next();
       
   163         ParameterDeclaration p2 =
       
   164             getMethod("m4").getParameters().iterator().next();
       
   165         return p1.equals(p2);
       
   166     }
       
   167 
       
   168     @Test(result="true")
       
   169     boolean parameterHashCode() {
       
   170         ParameterDeclaration p1 =
       
   171             getMethod("m3").getParameters().iterator().next();
       
   172         ParameterDeclaration p2 =
       
   173             getMethod("m3").getParameters().iterator().next();
       
   174         return p1.hashCode() == p2.hashCode();
       
   175     }
       
   176 
       
   177     @Test(result={"java.lang.Throwable"})
       
   178     Collection<ReferenceType> getThrownTypes() {
       
   179         return meth2.getThrownTypes();
       
   180     }
       
   181 
       
   182     @Test(result="false")
       
   183     Boolean isVarArgs1() {
       
   184         return meth1.isVarArgs();
       
   185     }
       
   186 
       
   187     @Test(result="true")
       
   188     Boolean isVarArgs2() {
       
   189         return meth2.isVarArgs();
       
   190     }
       
   191 
       
   192 
       
   193     // MethodDeclaration methods
       
   194 
       
   195     @Test(result="void")
       
   196     TypeMirror getReturnType1() {
       
   197         return meth1.getReturnType();
       
   198     }
       
   199 
       
   200     @Test(result="N")
       
   201     TypeMirror getReturnType2() {
       
   202         return meth2.getReturnType();
       
   203     }
       
   204 
       
   205 
       
   206     // toString
       
   207 
       
   208     @Test(result="<T, N extends java.lang.Number> m2(N, java.lang.String...)")
       
   209     @Ignore("This is what it would be nice to see.")
       
   210     String toStringTest() {
       
   211         return meth2.toString();
       
   212     }
       
   213 
       
   214 
       
   215     // Declarations used by tests.
       
   216 
       
   217     /**
       
   218      * Sed Quis custodiet ipsos custodes?
       
   219      */
       
   220     @AT1
       
   221     private static strictfp void m1() {
       
   222     }
       
   223 
       
   224     private <T, N extends Number> N m2(N n, String... ss) throws Throwable {
       
   225         return null;
       
   226     }
       
   227 
       
   228     private void m3(String s) {
       
   229     }
       
   230 
       
   231     private void m4(String s) {
       
   232     }
       
   233 
       
   234     // A nested interface
       
   235     interface I {
       
   236         void m();
       
   237     }
       
   238 }
       
   239 
       
   240 
       
   241 // Annotation type used by tests.
       
   242 
       
   243 @interface AT1 {
       
   244 }