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)
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
21 package gnu
.classpath
.tools
.gjdoc
;
23 import com
.sun
.javadoc
.*;
25 import java
.util
.HashMap
;
27 public class ClassDocReflectedImpl
28 implements ClassDoc
, WritableType
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
);
46 return new ClassDocReflectedImpl(clazz
);
50 public ClassDocReflectedImpl(Class clazz
)
52 reflectionCache
.put(clazz
, this);
54 //System.err.println("ClassDocReflectedImpl: " + clazz);
57 String className
= clazz
.getName();
58 int ndx
= className
.lastIndexOf('.');
60 this.name
= className
.substring(ndx
+ 1);
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
)
97 return new ClassDoc
[0];
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
);
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('.');
136 packageName
= packageName
.substring(0, ndx
);
141 PackageDoc result
= Main
.getRootDoc().findOrCreatePackageDoc(packageName
);
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());
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]; }