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