libjava/ChangeLog:
[official-gcc.git] / libjava / classpath / tools / gnu / classpath / tools / gjdoc / ClassDocReflectedImpl.java
blob2920e89f23517de085d12ff13f7867375dad2cba
1 /* gnu.classpath.tools.gjdoc.ClassDocReflectedImpl
2 Copyright (C) 2001 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
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.
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.
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. */
21 package gnu.classpath.tools.gjdoc;
23 import com.sun.javadoc.*;
24 import java.util.Map;
25 import java.util.HashMap;
27 public class ClassDocReflectedImpl
28 implements ClassDoc, WritableType
30 private Class clazz;
31 private String name;
32 private ClassDoc superclassDoc;
33 private ClassDoc[] unfilteredInnerClasses;
34 private String dimension = "";
36 private static Map reflectionCache = new HashMap();
38 public static ClassDocReflectedImpl newInstance(Class clazz)
40 ClassDocReflectedImpl result
41 = (ClassDocReflectedImpl)reflectionCache.get(clazz);
42 if (null != result) {
43 return result;
45 else {
46 return new ClassDocReflectedImpl(clazz);
50 public ClassDocReflectedImpl(Class clazz)
52 reflectionCache.put(clazz, this);
54 //System.err.println("ClassDocReflectedImpl: " + clazz);
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);
62 else {
63 this.name = className;
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);
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 + "]");
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)
96 if (filtered) {
97 return new ClassDoc[0];
99 else {
100 return unfilteredInnerClasses;
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;
116 public ClassDoc containingClass()
118 Class declaringClass = clazz.getDeclaringClass();
119 if (null != declaringClass) {
120 return new ClassDocReflectedImpl(declaringClass);
122 else {
123 return null;
126 public PackageDoc containingPackage()
128 Class outerClass = clazz;
129 while (null != outerClass.getDeclaringClass()) {
130 outerClass = outerClass.getDeclaringClass();
133 String packageName = outerClass.getName();
134 int ndx = packageName.lastIndexOf('.');
135 if (ndx > 0) {
136 packageName = packageName.substring(0, ndx);
138 else {
139 packageName = "";
141 PackageDoc result = Main.getRootDoc().findOrCreatePackageDoc(packageName);
142 return result;
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; }
179 public String toString() { return "ClassDocReflectedImpl{"+qualifiedName()+"}"; }
181 public int compareTo(java.lang.Object o) {
182 if (o instanceof Doc) {
183 return Main.getInstance().getCollator().compare(name(), ((Doc)o).name());
185 else {
186 return 0;
190 public String dimension() { return dimension; }
192 public void setDimension(String dimension) {
193 this.dimension = dimension;
196 public Object clone() throws CloneNotSupportedException {
197 return super.clone();
200 public TypeVariable[] typeParameters() { return new TypeVariable[0]; }