1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* 2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc. 3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License"); 5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License. 6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at 7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0 9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software 11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS, 12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and 14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License. 15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */ 16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava; 18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data; 20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.sun.javadoc.*; 22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.*; 23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class PackageInfo extends DocInfo implements ContainerInfo { 25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static final String DEFAULT_PACKAGE = "default package"; 263c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static final Comparator<PackageInfo> comparator = new Comparator<PackageInfo>() { 28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public int compare(PackageInfo a, PackageInfo b) { 29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return a.name().compareTo(b.name()); 30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson }; 32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public PackageInfo(PackageDoc pkg, String name, SourcePositionInfo position) { 34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson super(pkg.getRawCommentText(), position); 35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (name.isEmpty()) { 36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mName = DEFAULT_PACKAGE; 37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } else { 38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mName = name; 39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mPackage = pkg; 42d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein initializeMaps(); 43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 443c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public PackageInfo(String name) { 46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson super("", null); 47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mName = name; 48d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein initializeMaps(); 49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 503c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public PackageInfo(String name, SourcePositionInfo position) { 52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson super("", position); 533c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (name.isEmpty()) { 55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mName = "default package"; 56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } else { 57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mName = name; 58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 59d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein initializeMaps(); 60d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 61d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 62d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein private void initializeMaps() { 63d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mInterfacesMap = new HashMap<String, ClassInfo>(); 64d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mOrdinaryClassesMap = new HashMap<String, ClassInfo>(); 65d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mEnumsMap = new HashMap<String, ClassInfo>(); 66d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mExceptionsMap = new HashMap<String, ClassInfo>(); 67d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mErrorsMap = new HashMap<String, ClassInfo>(); 68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public String htmlPage() { 71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String s = mName; 72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson s = s.replace('.', '/'); 73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson s += "/package-summary.html"; 74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson s = Doclava.javadocDir + s; 75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return s; 76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson @Override 79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public ContainerInfo parent() { 80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return null; 81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson @Override 84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public boolean isHidden() { 85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return comment().isHidden(); 86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public boolean checkLevel() { 89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // TODO should return false if all classes are hidden but the package isn't. 90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // We don't have this so I'm not doing it now. 91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return !isHidden(); 92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public String name() { 95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mName; 96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public String qualifiedName() { 99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mName; 100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public TagInfo[] inlineTags() { 103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return comment().tags(); 104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 106920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public TagInfo[] firstSentenceTags() { 107920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return comment().briefTags(); 108920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 109920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 110920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static ClassInfo[] filterHidden(ClassInfo[] classes) { 111920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ArrayList<ClassInfo> out = new ArrayList<ClassInfo>(); 112920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 113920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (ClassInfo cl : classes) { 114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!cl.isHidden()) { 115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson out.add(cl); 116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return out.toArray(new ClassInfo[0]); 120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void makeLink(Data data, String base) { 123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (checkLevel()) { 124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data.setValue(base + ".link", htmlPage()); 125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data.setValue(base + ".name", name()); 127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data.setValue(base + ".since", getSince()); 128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void makeClassLinkListHDF(Data data, String base) { 131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson makeLink(data, base); 132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.makeLinkListHDF(data, base + ".interfaces", interfaces()); 133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.makeLinkListHDF(data, base + ".classes", ordinaryClasses()); 134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.makeLinkListHDF(data, base + ".enums", enums()); 135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.makeLinkListHDF(data, base + ".exceptions", exceptions()); 136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.makeLinkListHDF(data, base + ".errors", errors()); 137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data.setValue(base + ".since", getSince()); 138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public ClassInfo[] interfaces() { 141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (mInterfaces == null) { 142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mInterfaces = 143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.interfaces()))); 144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mInterfaces; 146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public ClassInfo[] ordinaryClasses() { 149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (mOrdinaryClasses == null) { 150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mOrdinaryClasses = 151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.ordinaryClasses()))); 152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 153920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mOrdinaryClasses; 154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public ClassInfo[] enums() { 157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (mEnums == null) { 158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mEnums = ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.enums()))); 159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 160920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mEnums; 161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 162920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 163920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public ClassInfo[] exceptions() { 164920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (mExceptions == null) { 165920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mExceptions = 166920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.exceptions()))); 167920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 168920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mExceptions; 169920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 170920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 171920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public ClassInfo[] errors() { 172920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (mErrors == null) { 173920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mErrors = ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.errors()))); 174920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 175920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mErrors; 176920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 177920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 178920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // in hashed containers, treat the name as the key 179920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson @Override 180920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public int hashCode() { 181920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mName.hashCode(); 182920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 183920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 184920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private String mName; 185920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private PackageDoc mPackage; 186920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private ClassInfo[] mInterfaces; 187920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private ClassInfo[] mOrdinaryClasses; 188920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private ClassInfo[] mEnums; 189920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private ClassInfo[] mExceptions; 190920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private ClassInfo[] mErrors; 1913c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 192d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein private HashMap<String, ClassInfo> mInterfacesMap; 193d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein private HashMap<String, ClassInfo> mOrdinaryClassesMap; 194d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein private HashMap<String, ClassInfo> mEnumsMap; 195d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein private HashMap<String, ClassInfo> mExceptionsMap; 196d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein private HashMap<String, ClassInfo> mErrorsMap; 197d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 198d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 199d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public ClassInfo getClass(String className) { 200d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein ClassInfo cls = mInterfacesMap.get(className); 201d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 202d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein if (cls != null) { 203d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return cls; 204d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 205d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 206d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein cls = mOrdinaryClassesMap.get(className); 207d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 208d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein if (cls != null) { 209d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return cls; 210d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 211d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 212d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein cls = mEnumsMap.get(className); 213d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 214d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein if (cls != null) { 215d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return cls; 216d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 217d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 218d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein cls = mEnumsMap.get(className); 219d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 220d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein if (cls != null) { 221d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return cls; 222d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 223d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 224d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return mErrorsMap.get(className); 225d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 226d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 227d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public void addInterface(ClassInfo cls) { 228d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mInterfacesMap.put(cls.name(), cls); 229d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 230d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 231d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public ClassInfo getInterface(String interfaceName) { 232d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return mInterfacesMap.get(interfaceName); 233d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 234d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 235d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public ClassInfo getOrdinaryClass(String className) { 236d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return mOrdinaryClassesMap.get(className); 237d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 238d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 239d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public void addOrdinaryClass(ClassInfo cls) { 240d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein mOrdinaryClassesMap.put(cls.name(), cls); 241d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 242d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 243d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public ClassInfo getEnum(String enumName) { 244d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return mEnumsMap.get(enumName); 245d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 246d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 247d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public void addEnum(ClassInfo cls) { 248d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein this.mEnumsMap.put(cls.name(), cls); 249d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 250d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 251d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public ClassInfo getException(String exceptionName) { 252d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return mExceptionsMap.get(exceptionName); 253d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 254d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 255d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein public ClassInfo getError(String errorName) { 256d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein return mErrorsMap.get(errorName); 257d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein } 258d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein 259920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // TODO: Leftovers from ApiCheck that should be better merged. 260920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson private HashMap<String, ClassInfo> mClasses = new HashMap<String, ClassInfo>(); 2613c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 262920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void addClass(ClassInfo cl) { 263920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mClasses.put(cl.name(), cl); 264920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 265920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 266920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public HashMap<String, ClassInfo> allClasses() { 267920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return mClasses; 268920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 2693c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main 270920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public boolean isConsistent(PackageInfo pInfo) { 271920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson boolean consistent = true; 272920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (ClassInfo cInfo : mClasses.values()) { 273920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (pInfo.mClasses.containsKey(cInfo.name())) { 274920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!cInfo.isConsistent(pInfo.mClasses.get(cInfo.name()))) { 275920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson consistent = false; 276920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 277920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } else { 278920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Errors.error(Errors.REMOVED_CLASS, cInfo.position(), "Removed public class " 279920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson + cInfo.qualifiedName()); 280920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson consistent = false; 281920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 282920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 283920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (ClassInfo cInfo : pInfo.mClasses.values()) { 284920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!mClasses.containsKey(cInfo.name())) { 285920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Errors.error(Errors.ADDED_CLASS, cInfo.position(), "Added class " + cInfo.name() 286920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson + " to package " + pInfo.name()); 287920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson consistent = false; 288920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 289920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 290920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return consistent; 291920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 292920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} 293