/* * @(#)Util.java 1.3 00/02/02 * * Copyright 1998-2000 Sun Microsystems, Inc. All Rights Reserved. * * This software is the proprietary information of Sun Microsystems, Inc. * Use is subject to license terms. * */ package com.sun.tools.doclets; import com.sun.javadoc.*; import java.lang.*; import java.util.*; import java.io.*; /** * Utilities Class for Doclets. * * @author Atul M Dambalkar */ public class Util { /** * Return array of class members whose documentation is to be generated. * If the member is deprecated do not include such a member in the * returned array. * * @param members Array of members to choose from. * @return ProgramElementDoc[] Array of eligible members for whom * documentation is getting generated. */ public static ProgramElementDoc[] excludeDeprecatedMembers( ProgramElementDoc[] members) { return toProgramElementDocArray(excludeDeprecatedMembersAsList(members)); } /** * Return array of class members whose documentation is to be generated. * If the member is deprecated do not include such a member in the * returned array. * * @param members Array of members to choose from. * @return List List of eligible members for whom * documentation is getting generated. */ public static List excludeDeprecatedMembersAsList( ProgramElementDoc[] members) { List list = new ArrayList(); for (int i = 0; i < members.length; i++) { if (members[i].tags("deprecated").length == 0) { list.add(members[i]); } } Collections.sort(list); return list; } /** * Return the list of ProgramElementDoc objects as Array. */ public static ProgramElementDoc[] toProgramElementDocArray(List list) { ProgramElementDoc[] pgmarr = new ProgramElementDoc[list.size()]; for (int i = 0; i < list.size(); i++) { pgmarr[i] = (ProgramElementDoc)(list.get(i)); } return pgmarr; } /** * Return true if a non-public member found in the given array. * * @param members Array of members to look into. * @return boolean True if non-public member found, false otherwise. */ public static boolean nonPublicMemberFound(ProgramElementDoc[] members) { for (int i = 0; i < members.length; i++) { if (!members[i].isPublic()) { return true; } } return false; } /** * Search for the given method in the given class. * * @param cd Class to search into. * @param method Method to be searched. * @return MethodDoc Method found, null otherwise. */ public static MethodDoc findMethod(ClassDoc cd, MethodDoc method) { MethodDoc[] methods = cd.methods(); for (int i = 0; i < methods.length; i++) { if (method.name().equals(methods[i].name()) && method.signature().equals(methods[i].signature())) { return methods[i]; } } return null; } /** * According to the Java Language Specifications, all the outer classes * and static inner classes are core classes. */ public static boolean isCoreClass(ClassDoc cd) { return cd.containingClass() == null || cd.isStatic(); } public static boolean matches(ProgramElementDoc doc1, ProgramElementDoc doc2) { if (doc1 instanceof ExecutableMemberDoc && doc2 instanceof ExecutableMemberDoc) { ExecutableMemberDoc ed1 = (ExecutableMemberDoc)doc1; ExecutableMemberDoc ed2 = (ExecutableMemberDoc)doc2; return ed1.name().equals(ed2.name()) && ed1.signature().equals(ed2.signature()); } else { return doc1.name().equals(doc2.name()); } } /** * Copy source file to destination file. * * @throws SecurityException * @throws IOException */ public static void copyFile(File destfile, File srcfile) throws IOException { byte[] bytearr = new byte[512]; int len = 0; FileInputStream input = new FileInputStream(srcfile); FileOutputStream output = new FileOutputStream(destfile); try { while ((len = input.read(bytearr)) != -1) { output.write(bytearr, 0, len); } } catch (FileNotFoundException exc) { } catch (SecurityException exc) { } finally { input.close(); output.close(); } } /** * For the class return all implemented interfaces including the * superinterfaces of the implementing interfaces, also iterate over for * all the superclasses. For interface return all the extended interfaces * as well as superinterfaces for those extended interfaces. * * @param cd Class or interface whose implemented or * super interfaces are sought. * @return ClassDoc[] Array of all the required interfaces. */ public static ClassDoc[] getAllInterfaces(ClassDoc classdoc) { Set interfaces = new HashSet(); buildInterfaces(interfaces, classdoc); if (classdoc.isClass()) { ClassDoc icd = classdoc.superclass(); while (icd != null) { buildInterfaces(interfaces, icd); icd = icd.superclass(); } } ClassDoc[] intarr = new ClassDoc[interfaces.size()]; interfaces.toArray(intarr); Arrays.sort(intarr); return intarr; } private static void buildInterfaces(Set interfaces, ClassDoc cd) { ClassDoc[] iin = cd.interfaces(); for (int i = 0; i < iin.length; i++) { interfaces.add(iin[i]); buildInterfaces(interfaces, iin[i]); } } public static List asList(ProgramElementDoc[] members) { List list = new ArrayList(); for (int i = 0; i < members.length; i++) { list.add(members[i]); } return list; } }