1
2
3
4
5 package xjavadoc;
6
7 import java.util.Iterator;
8 import java.util.StringTokenizer;
9
10 /***
11 * This is a flyweight implementation of XParameter
12 *
13 * @author Ara Abrahamian (ara_e_w@yahoo.com)
14 * @author Aslak Hellesøy
15 * @created 9. mars 2003
16 * @version $Revision: 1.18 $
17 */
18 public final class ParameterImpl extends AbstractType implements XParameter
19 {
20 public static int instanceCount = 0;
21
22 /***
23 * XMember we're currently reresenting.
24 */
25 private AbstractExecutableMember _containingExecutableMember;
26
27 /***
28 * Index of the parameter we're currently representing.
29 */
30 private int _parameterIndex;
31
32 private String _description;
33
34 public ParameterImpl()
35 {
36 instanceCount++;
37 }
38
39 public final String getName()
40 {
41 return _containingExecutableMember.getParameterName( _parameterIndex );
42 }
43
44 /***
45 * Returns the class describing the type of this parameter.
46 *
47 * @return
48 */
49 public final XClass getType()
50 {
51 String type = _containingExecutableMember.getParameterType( _parameterIndex );
52 AbstractClass containingClass = _containingExecutableMember.getContainingAbstractClass();
53
54 XClass result = containingClass.qualify( type );
55
56 return result;
57 }
58
59 public final int getDimension()
60 {
61 return _containingExecutableMember.getParameterDimension( _parameterIndex );
62 }
63
64 public XTag getParamTag()
65 {
66 for( Iterator paramTags = _containingExecutableMember.getDoc().getTags( "param", true ).iterator(); paramTags.hasNext(); )
67 {
68 XTag paramTag = ( XTag ) paramTags.next();
69 StringTokenizer st = new StringTokenizer( paramTag.getValue() );
70
71 if( st.hasMoreTokens() )
72 {
73 if( st.nextToken().equals( getName() ) )
74 {
75
76
77
78 _description = paramTag.getValue().substring( getName().length() ).trim();
79 return paramTag;
80 }
81 }
82 }
83
84 _description = null;
85 return null;
86 }
87
88 public String getDescription()
89 {
90 XTag paramTag = getParamTag();
91
92 if( paramTag != null )
93 {
94 return _description;
95 }
96 else
97 {
98 return null;
99 }
100 }
101
102 public String getDimensionAsString()
103 {
104 return Util.appendDimensionAsString( getDimension(), new StringBuffer() ).toString();
105 }
106
107 public final String toString()
108 {
109 StringBuffer sb = new StringBuffer( getType().getQualifiedName() );
110
111 Util.appendDimensionAsString( getDimension(), sb ).append( " " ).append( getName() );
112 return sb.toString();
113 }
114
115 /***
116 * Sets the extrinsic flyweight state.
117 *
118 * @param containingExecutableMember The containing member
119 * @param parameterIndex
120 */
121 final void setState( AbstractExecutableMember containingExecutableMember, int parameterIndex )
122 {
123 _containingExecutableMember = containingExecutableMember;
124 _parameterIndex = parameterIndex;
125 }
126 }