OSDN Git Service

libjava/ChangeLog:
[pf3gnuchains/gcc-fork.git] / libjava / classpath / tools / gnu / classpath / tools / gjdoc / ClassDocReflectedImpl.java
1 /* gnu.classpath.tools.gjdoc.ClassDocReflectedImpl
2    Copyright (C) 2001 Free Software Foundation, Inc.
3
4    This file is part of GNU Classpath.
5
6    GNU Classpath is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2, or (at your option)
9    any later version.
10  
11    GNU Classpath is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with GNU Classpath; see the file COPYING.  If not, write to the
18    Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA. */
20
21 package gnu.classpath.tools.gjdoc;
22
23 import com.sun.javadoc.*;
24 import java.util.Map;
25 import java.util.HashMap;
26
27 public class ClassDocReflectedImpl
28    implements ClassDoc, WritableType
29 {
30    private Class clazz;
31    private String name;
32    private ClassDoc superclassDoc;
33    private ClassDoc[] unfilteredInnerClasses;
34    private String dimension = "";
35
36    private static Map reflectionCache = new HashMap();
37
38    public static ClassDocReflectedImpl newInstance(Class clazz)
39    {
40       ClassDocReflectedImpl result 
41          = (ClassDocReflectedImpl)reflectionCache.get(clazz);
42       if (null != result) {
43          return result;
44       }
45       else {
46          return new ClassDocReflectedImpl(clazz);
47       }
48    }
49
50    public ClassDocReflectedImpl(Class clazz)
51    {
52       reflectionCache.put(clazz, this);
53
54       //System.err.println("ClassDocReflectedImpl: " + clazz);
55       
56       this.clazz = clazz;
57       String className = clazz.getName();
58       int ndx = className.lastIndexOf('.');
59       if (ndx >= 0) {
60          this.name = className.substring(ndx + 1);
61       }
62       else {
63          this.name = className;
64       }
65
66       Class superclass = clazz.getSuperclass();
67       if (null != superclass && !clazz.getName().equals("java.lang.Object")) {
68          this.superclassDoc = (ClassDocReflectedImpl)reflectionCache.get(superclass);
69          if (null == this.superclassDoc) {
70             this.superclassDoc = new ClassDocReflectedImpl(superclass);
71          }
72       }
73
74       Class[] innerclasses = clazz.getDeclaredClasses();
75       this.unfilteredInnerClasses = new ClassDoc[innerclasses.length];
76       for (int i=0; i<innerclasses.length; ++i) {
77          this.unfilteredInnerClasses[i] = (ClassDocReflectedImpl)reflectionCache.get(innerclasses[i]);
78          if (null == this.unfilteredInnerClasses[i]) {
79             this.unfilteredInnerClasses[i] = new ClassDocReflectedImpl(innerclasses[i]);
80             //System.err.println("adding " + this.unfilteredInnerClasses[i] + " [" + innerclasses[i] + "] as inner class of " + this + " [" + clazz + "]");
81          }
82       }
83    }
84
85    public ConstructorDoc[] constructors() { return new ConstructorDoc[0]; } 
86    public ConstructorDoc[] constructors(boolean filtered) { return new ConstructorDoc[0]; }
87    public boolean definesSerializableFields() { return false; } 
88    public FieldDoc[] fields() { return new FieldDoc[0]; } 
89    public FieldDoc[] fields(boolean filtered) { return new FieldDoc[0]; } 
90    public ClassDoc findClass(java.lang.String className) { return null; } 
91    public ClassDoc[] importedClasses() { return new ClassDoc[0]; } 
92    public PackageDoc[] importedPackages() { return new PackageDoc[0]; } 
93    public ClassDoc[] innerClasses() { return new ClassDoc[0]; } 
94    public ClassDoc[] innerClasses(boolean filtered) 
95    { 
96       if (filtered) {
97          return new ClassDoc[0];
98       }
99       else {
100          return unfilteredInnerClasses;
101       }
102    }
103    
104    public ClassDoc[] interfaces() { return new ClassDoc[0]; } 
105    public boolean isAbstract() { return false; } 
106    public boolean isExternalizable() { return false; } 
107    public boolean isSerializable() { return false; } 
108    public MethodDoc[] methods() { return new MethodDoc[0]; } 
109    public MethodDoc[] methods(boolean filtered) { return new MethodDoc[0]; } 
110    public FieldDoc[] serializableFields() { return new FieldDoc[0]; } 
111    public MethodDoc[] serializationMethods() { return new MethodDoc[0]; } 
112    public boolean subclassOf(ClassDoc cd) { return false; } 
113    public ClassDoc superclass() { 
114       return superclassDoc;
115    } 
116    public ClassDoc containingClass() 
117    {
118       Class declaringClass = clazz.getDeclaringClass();
119       if (null != declaringClass) {
120          return new ClassDocReflectedImpl(declaringClass);
121       }
122       else {
123          return null;
124       }
125    } 
126    public PackageDoc containingPackage() 
127    {
128       Class outerClass = clazz;
129       while (null != outerClass.getDeclaringClass()) {
130          outerClass = outerClass.getDeclaringClass();
131       }
132
133       String packageName = outerClass.getName();
134       int ndx = packageName.lastIndexOf('.');
135       if (ndx > 0) {
136          packageName = packageName.substring(0, ndx);
137       }
138       else {
139          packageName = "";
140       }
141       PackageDoc result =  Main.getRootDoc().findOrCreatePackageDoc(packageName);
142       return result;
143    }
144
145    public boolean isFinal() { return false; } 
146    public boolean isPackagePrivate() { return false; } 
147    public boolean isPrivate() { return false; } 
148    public boolean isProtected() { return false; } 
149    public boolean isPublic() { return false; } 
150    public boolean isStatic() { return false; } 
151    public String modifiers() { return ""; } 
152    public int modifierSpecifier() { return 0; } 
153    public String qualifiedName() { return clazz.getName().replace('$', '.'); } 
154    public String commentText() { return null; } 
155    public Tag[] firstSentenceTags() { return new Tag[0]; } 
156    public String getRawCommentText() { return null; } 
157    public Tag[] inlineTags() { return new Tag[0]; } 
158    public boolean isClass() { return false; } 
159    public boolean isConstructor() { return false; } 
160    public boolean isError() { return false; } 
161    public boolean isException() { return false; } 
162    public boolean isField() { return false; } 
163    public boolean isIncluded() { return false; } 
164    public boolean isInterface() { return false; } 
165    public boolean isMethod() { return false; } 
166    public boolean isOrdinaryClass() { return false; } 
167    public String name() { return name; } 
168    public SourcePosition position() { return null; }
169    public SeeTag[] seeTags() { return new SeeTag[0]; } 
170    public void setRawCommentText(java.lang.String rawDocumentation) {} 
171    public Tag[] tags() { return new Tag[0]; } 
172    public Tag[] tags(java.lang.String tagname) { return new Tag[0]; }
173    public String typeName() { return name; }
174    public String qualifiedTypeName() { return qualifiedName(); }
175    public ClassDoc asClassDoc() { return this; }
176    public TypeVariable asTypeVariable() { return null; }
177    public boolean isPrimitive() { return false; }
178
179    public String toString() { return "ClassDocReflectedImpl{"+qualifiedName()+"}"; }
180
181    public int compareTo(java.lang.Object o) {
182       if (o instanceof Doc) {
183          return Main.getInstance().getCollator().compare(name(), ((Doc)o).name());
184       }
185       else {
186          return 0;
187       }
188    }
189
190    public String dimension() { return dimension; }
191
192    public void setDimension(String dimension) {
193       this.dimension = dimension;
194    }
195
196    public Object clone() throws CloneNotSupportedException {
197       return super.clone();
198    }
199
200    public TypeVariable[] typeParameters() { return new TypeVariable[0]; } 
201
202 }