1 /*
2  * Copyright (c) 1997, 2018, 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.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package com.sun.tools.javadoc.main;
27 
28 import com.sun.javadoc.*;
29 
30 import com.sun.tools.javac.code.Attribute;
31 import com.sun.tools.javac.code.Symbol.VarSymbol;
32 
33 /**
34  * ParameterImpl information.
35  * This includes a parameter type and parameter name.
36  *
37  *  <p><b>This is NOT part of any supported API.
38  *  If you write code that depends on this, you do so at your own risk.
39  *  This code and its internal interfaces are subject to change or
40  *  deletion without notice.</b>
41  *
42  * @author Kaiyang Liu (original)
43  * @author Robert Field (rewrite)
44  * @author Scott Seligman (generics, annotations)
45  */
46 @Deprecated(since="9", forRemoval=true)
47 @SuppressWarnings("removal")
48 class ParameterImpl implements Parameter {
49 
50     private final DocEnv env;
51     private final VarSymbol sym;
52     private final com.sun.javadoc.Type type;
53 
54     /**
55      * Constructor of parameter info class.
56      */
ParameterImpl(DocEnv env, VarSymbol sym)57     ParameterImpl(DocEnv env, VarSymbol sym) {
58         this.env = env;
59         this.sym = sym;
60         this.type = TypeMaker.getType(env, sym.type, false);
61     }
62 
63     /**
64      * Get the type of this parameter.
65      */
type()66     public com.sun.javadoc.Type type() {
67         return type;
68     }
69 
70     /**
71      * Get local name of this parameter.
72      * For example if parameter is the short 'index', returns "index".
73      */
name()74     public String name() {
75         return sym.toString();
76     }
77 
78     /**
79      * Get type name of this parameter.
80      * For example if parameter is the short 'index', returns "short".
81      */
typeName()82     public String typeName() {
83         return (type instanceof ClassDoc || type instanceof TypeVariable)
84                 ? type.typeName()       // omit formal type params or bounds
85                 : type.toString();
86     }
87 
88     /**
89      * Returns a string representation of the parameter.
90      * <p>
91      * For example if parameter is the short 'index', returns "short index".
92      *
93      * @return type name and parameter name of this parameter.
94      */
toString()95     public String toString() {
96         return typeName() + " " + sym;
97     }
98 
99     /**
100      * Get the annotations of this parameter.
101      * Return an empty array if there are none.
102      */
annotations()103     public AnnotationDesc[] annotations() {
104         AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
105         int i = 0;
106         for (Attribute.Compound a : sym.getRawAttributes()) {
107             res[i++] = new AnnotationDescImpl(env, a);
108         }
109         return res;
110     }
111 }
112