/* * Copyright 2008 CoreMedia AG * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package net.jangaroo.joodoc; import com.sun.javadoc.*; import net.jangaroo.jooc.*; import net.jangaroo.jooc.Type; import java.util.ArrayList; import java.lang.reflect.Modifier; /** * Created by IntelliJ IDEA. * User: htewis * Date: 20.07.2004 * Time: 08:59:00 * To change this template use File | Settings | File Templates. */ public class ClassDocImpl extends DocImpl implements ClassDoc { ArrayList declarations; ConstructorDoc[] constructors; ArrayList fields = new ArrayList(); ArrayList methods = new ArrayList(); private static final ConstructorDoc[] NO_CONSTRUCTOR = new ConstructorDoc[0]; public ClassDocImpl(ClassDeclaration declaration) { super (declaration); if (declaration!=null) { this.declarations = ((ClassDeclaration)declaration).getBody().getDeclararations(); // fields for (int i = 0; i < declarations.size(); i++) { NodeImplBase decl = (NodeImplBase)declarations.get(i); if (decl instanceof FieldDeclaration) { Doc fieldDoc = (Doc)DocMap.getDoc(decl); if (fieldDoc.isIncluded()) { fields.add(fieldDoc); } } } // constructor & methods ConstructorDoc constructor=null; for (int i = 0; i < declarations.size(); i++) { NodeImplBase decl = (NodeImplBase)declarations.get(i); if (decl instanceof MethodDeclaration) { MethodDoc methodDoc = (MethodDoc)DocMap.getDoc(decl); if (constructor==null) { constructor = (ConstructorDoc)methodDoc; } else { if (methodDoc.isIncluded()) { methods.add(methodDoc); } } } } constructors = constructor==null || !constructor.isIncluded() ? NO_CONSTRUCTOR : new ConstructorDoc[]{constructor}; } } protected ClassDeclaration getClassDeclaration() { return (ClassDeclaration)declaration; } public boolean isIncluded() { return isPublic() || isProtected(); } public boolean definesSerializableFields() { return false; } public boolean isAbstract() { return getClassDeclaration().isAbstract(); } public boolean isExternalizable() { return false; } public boolean isSerializable() { return false; } public ClassDoc superclass() { Extends optExtends = getClassDeclaration().getOptExtends(); Type type = null; Ide ide = null; if (optExtends!=null) type=optExtends.getSuperClass(); String[] qualIde = null; if (type instanceof IdeType) ide = ((IdeType)type).getIde(); if (ide instanceof QualifiedIde) { qualIde=((QualifiedIde)ide).getQualifiedName(); return (ClassDoc)DocMap.getDocByQualifiedName(Util.getQualifiedName(qualIde)); } return null; } public ClassDoc[] importedClasses() { return new ClassDoc[0]; } public ClassDoc[] innerClasses() { return new ClassDoc[0]; } public ClassDoc[] interfaces() { return new ClassDoc[0]; } public boolean subclassOf(ClassDoc classDoc) { ClassDoc superClass = this; while (superClass!=null && !superClass.equals(classDoc)) { superClass = superClass.superclass(); } return superClass!=null; } public ClassDoc[] innerClasses(boolean b) { return new ClassDoc[0]; } public ConstructorDoc[] constructors() { return constructors; } public ConstructorDoc[] constructors(boolean b) { return constructors(); } public FieldDoc[] fields() { return (FieldDoc[]) this.fields.toArray(new FieldDoc[0]); } public FieldDoc[] serializableFields() { return new FieldDoc[0]; } public FieldDoc[] fields(boolean b) { return fields(); } public MethodDoc[] methods() { return (MethodDoc[]) this.methods.toArray(new MethodDoc[0]); } public MethodDoc[] serializationMethods() { return new MethodDoc[0]; } public MethodDoc[] methods(boolean b) { return methods(); } public PackageDoc[] importedPackages() { return new PackageDoc[0]; } public ClassDoc findClass(String s) { return null; } public int modifierSpecifier() { int modifier = 0; if (isPublic()) modifier = Modifier.PUBLIC; else if (isProtected()) modifier=Modifier.PROTECTED; else if (isPrivate()) modifier=Modifier.PRIVATE; if (isStatic()) modifier |= Modifier.STATIC; return modifier; } public boolean isFinal() { return getClassDeclaration().isFinal(); } public boolean isPackagePrivate() { return !getClassDeclaration().isPublic() && !getClassDeclaration().isProtected(); } public boolean isPrivate() { return getClassDeclaration().isPrivate(); } public boolean isProtected() { return getClassDeclaration().isProtected(); } public boolean isPublic() { return getClassDeclaration().isPublic(); } public boolean isStatic() { return getClassDeclaration().isStatic(); } public ClassDoc containingClass() { return null; } public PackageDoc containingPackage() { return (PackageDoc)(DocMap.getDoc(getClassDeclaration().getPackageDeclaration())); } public String modifiers() { return (isPublic()?"public ":"")+ (isStatic()?"static ":"")+ (isFinal()?"final ":"")+ (isAbstract()?"abstract ":"") ; } public String qualifiedName() { String[] qual=((IdeDeclaration)declaration).getQualifiedName(); return Util.getQualifiedName(qual); } public boolean isClass() { return true; } public boolean isOrdinaryClass() { return true; } public String commentText() { return "hallo"; } public String getRawCommentText() { return "hello"; } public String name() { return getClassDeclaration().getName(); } public void setRawCommentText(String s) { } public ClassDoc asClassDoc() { return this; } public String dimension() { return ""; } public String qualifiedTypeName() { String[] qual=((IdeDeclaration)declaration).getQualifiedName(); return Util.getQualifiedName(qual); } public String typeName() { return null; } public TypeVariable asTypeVariable() { return null; //To change body of implemented methods use File | Settings | File Templates. } public ParamTag[] typeParamTags() { return new ParamTag[0]; //To change body of implemented methods use File | Settings | File Templates. } public FieldDoc[] enumConstants() { return new FieldDoc[0]; //To change body of implemented methods use File | Settings | File Templates. } public WildcardType asWildcardType() { return null; //To change body of implemented methods use File | Settings | File Templates. } public com.sun.javadoc.Type superclassType() { return null; //To change body of implemented methods use File | Settings | File Templates. } public AnnotationTypeDoc asAnnotationTypeDoc() { return null; //To change body of implemented methods use File | Settings | File Templates. } public ParameterizedType asParameterizedType() { return null; //To change body of implemented methods use File | Settings | File Templates. } public boolean isPrimitive() { return false; //To change body of implemented methods use File | Settings | File Templates. } public String simpleTypeName() { return sym.class.getSimpleName(); } public com.sun.javadoc.Type[] interfaceTypes() { return new com.sun.javadoc.Type[0]; //To change body of implemented methods use File | Settings | File Templates. } public TypeVariable[] typeParameters() { return new TypeVariable[0]; //To change body of implemented methods use File | Settings | File Templates. } public AnnotationDesc[] annotations() { return new AnnotationDesc[0]; //To change body of implemented methods use File | Settings | File Templates. } }