/* gnu.classpath.tools.gjdoc.PackageDocImpl Copyright (C) 2001 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ package gnu.classpath.tools.gjdoc; import com.sun.javadoc.*; import java.util.*; import java.io.File; class PackageDocImpl extends DocImpl implements GjdocPackageDoc { private String packageName; private File packageDirectory; private Set allClassesSet = new TreeSet(); private List ordinaryClassesList = new ArrayList(); private List exceptionsList = new ArrayList(); private List interfacesList = new ArrayList(); private List errorsList = new ArrayList(); private ClassDoc[] allClasses; private ClassDoc[] ordinaryClasses; private ClassDoc[] exceptions; private ClassDoc[] interfaces; private ClassDoc[] errors; PackageDocImpl(String packageName) { super(null); this.packageName=packageName; } public void addClass(ClassDoc classDoc) { if (Main.getInstance().includeAccessLevel(((ClassDocImpl)classDoc).accessLevel)) { allClassesSet.add(classDoc); } } public void resolve() { for (Iterator it=allClassesSet.iterator(); it.hasNext(); ) { ClassDocImpl classDoc=(ClassDocImpl)it.next(); try { classDoc.resolve(); } catch (ParseException e) { System.err.println("FIXME: add try-catch to force compilation" + e); } if (classDoc.isInterface()) { interfacesList.add(classDoc); } else if (classDoc.isException()) { exceptionsList.add(classDoc); } else if (classDoc.isError()) { errorsList.add(classDoc); } else { ordinaryClassesList.add(classDoc); } } } public void resolveComments() { if (rawDocumentation!=null) { this.tagMap=parseCommentTags(rawDocumentation.toCharArray(), 0, rawDocumentation.length(), null, null, null, null); } resolveTags(); } public String name() { return packageName; } public ClassDoc[] allClasses() { if (null == this.allClasses) { this.allClasses = toClassDocArray(allClassesSet); } return this.allClasses; } public ClassDoc[] ordinaryClasses() { if (null == this.ordinaryClasses) { this.ordinaryClasses = toClassDocArray(ordinaryClassesList); } return this.ordinaryClasses; } public ClassDoc[] exceptions() { if (null == this.exceptions) { this.exceptions = toClassDocArray(exceptionsList); } return this.exceptions; } public ClassDoc[] interfaces() { if (null == this.interfaces) { this.interfaces = toClassDocArray(interfacesList); } return this.interfaces; } public ClassDoc[] errors() { if (null == this.errors) { this.errors = toClassDocArray(errorsList); } return this.errors; } private ClassDoc[] toClassDocArray(Collection classDocList) { ClassDoc[] result = (ClassDoc[])classDocList.toArray(new ClassDoc[classDocList.size()]); Arrays.sort(result); return result; } public ClassDoc findClass(String name) { return Main.getRootDoc().classNamed(packageName+"."+name); } public void dump(int level) { Debug.log(level, "All classes:"); Debug.dumpArray(level, allClasses()); Debug.log(level, "Ordinary classes:"); Debug.dumpArray(level, ordinaryClasses()); } public static final PackageDocImpl DEFAULT_PACKAGE = new PackageDocImpl(""); public boolean isPackage() { return true; } public boolean isIncluded() { return isIncluded; } void setIsIncluded(boolean b) { this.isIncluded=b; } private boolean isIncluded = false; public String toString() { return packageName; } public int compareTo(Object o) { if (o!=null && o instanceof PackageDocImpl) return name().compareTo(((PackageDocImpl)o).name()); else return 0; } public boolean equals(Object o) { if (o!=null && o instanceof PackageDocImpl) return name().equals(((PackageDocImpl)o).name()); else return false; } /** * Sets the directory containing this package's source files. */ public void setPackageDirectory(File packageDirectory) { this.packageDirectory = packageDirectory; } /** * Gets the directory containing this package's source files. */ public File packageDirectory() { return this.packageDirectory; } }