diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2013-07-16 21:07:25 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2013-07-16 21:07:25 +0000 |
commit | ab26ef78141c6d3e19e8011b7d5e5570b4e53f59 (patch) | |
tree | 2f06d03438c702d537ce93a79f7930297e601de0 /java/openjdk6/files/icedtea/security/20130618/langtools_generics.patch | |
parent | HostDB is a system for generating internal DNS zones, (diff) |
Add multiple security patches and improvements from IcedTea6 1.12.6.
http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2013-July/023941.html
Obtained from: IcedTea Project
PR: ports/180541
Diffstat (limited to 'java/openjdk6/files/icedtea/security/20130618/langtools_generics.patch')
-rw-r--r-- | java/openjdk6/files/icedtea/security/20130618/langtools_generics.patch | 600 |
1 files changed, 600 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/security/20130618/langtools_generics.patch b/java/openjdk6/files/icedtea/security/20130618/langtools_generics.patch new file mode 100644 index 000000000000..7e59e30347c4 --- /dev/null +++ b/java/openjdk6/files/icedtea/security/20130618/langtools_generics.patch @@ -0,0 +1,600 @@ +# HG changeset patch +# User andrew +# Date 1371740021 18000 +# Node ID a5c99fd80b4c9f5049351bf5bff8517dd6d3b613 +# Parent 335cdc9887c56f560991275fe8d32e6edb6b3f1e +Add generics + +diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java +--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java ++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java +@@ -41,29 +41,29 @@ + public class ClassUseWriter extends SubWriterHolderWriter { + + final ClassDoc classdoc; +- Set pkgToPackageAnnotations = null; +- final Map pkgToClassTypeParameter; +- final Map pkgToClassAnnotations; +- final Map pkgToMethodTypeParameter; +- final Map pkgToMethodArgTypeParameter; +- final Map pkgToMethodReturnTypeParameter; +- final Map pkgToMethodAnnotations; +- final Map pkgToMethodParameterAnnotations; +- final Map pkgToFieldTypeParameter; +- final Map pkgToFieldAnnotations; +- final Map pkgToSubclass; +- final Map pkgToSubinterface; +- final Map pkgToImplementingClass; +- final Map pkgToField; +- final Map pkgToMethodReturn; +- final Map pkgToMethodArgs; +- final Map pkgToMethodThrows; +- final Map pkgToConstructorAnnotations; +- final Map pkgToConstructorParameterAnnotations; +- final Map pkgToConstructorArgs; +- final Map pkgToConstructorArgTypeParameter; +- final Map pkgToConstructorThrows; +- final SortedSet pkgSet; ++ Set<PackageDoc> pkgToPackageAnnotations = null; ++ final Map<String,List<ProgramElementDoc>> pkgToClassTypeParameter; ++ final Map<String,List<ProgramElementDoc>> pkgToClassAnnotations; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodTypeParameter; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodArgTypeParameter; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodReturnTypeParameter; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodAnnotations; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodParameterAnnotations; ++ final Map<String,List<ProgramElementDoc>> pkgToFieldTypeParameter; ++ final Map<String,List<ProgramElementDoc>> pkgToFieldAnnotations; ++ final Map<String,List<ProgramElementDoc>> pkgToSubclass; ++ final Map<String,List<ProgramElementDoc>> pkgToSubinterface; ++ final Map<String,List<ProgramElementDoc>> pkgToImplementingClass; ++ final Map<String,List<ProgramElementDoc>> pkgToField; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodReturn; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodArgs; ++ final Map<String,List<ProgramElementDoc>> pkgToMethodThrows; ++ final Map<String,List<ProgramElementDoc>> pkgToConstructorAnnotations; ++ final Map<String,List<ProgramElementDoc>> pkgToConstructorParameterAnnotations; ++ final Map<String,List<ProgramElementDoc>> pkgToConstructorArgs; ++ final Map<String,List<ProgramElementDoc>> pkgToConstructorArgTypeParameter; ++ final Map<String,List<ProgramElementDoc>> pkgToConstructorThrows; ++ final SortedSet<PackageDoc> pkgSet; + final MethodWriterImpl methodSubWriter; + final ConstructorWriterImpl constrSubWriter; + final FieldWriterImpl fieldSubWriter; +diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java +--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java ++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java +@@ -52,12 +52,12 @@ + * + * @see Group + */ +- private Map groupPackageMap; ++ private Map<String,List<PackageDoc>> groupPackageMap; + + /** + * List to store the order groups as specified on the command line. + */ +- private List groupList; ++ private List<String> groupList; + + /** + * Construct the PackageIndexWriter. Also constructs the grouping +@@ -103,8 +103,8 @@ + */ + protected void addIndex(Content body) { + for (int i = 0; i < groupList.size(); i++) { +- String groupname = (String)groupList.get(i); +- List list = (List)groupPackageMap.get(groupname); ++ String groupname = groupList.get(i); ++ List<PackageDoc> list = groupPackageMap.get(groupname); + if (list != null && list.size() > 0) { + addIndexContents(list.toArray(new PackageDoc[list.size()]), + groupname, configuration.getText("doclet.Member_Table_Summary", +diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java +--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java ++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java +@@ -41,7 +41,7 @@ + public class PackageUseWriter extends SubWriterHolderWriter { + + final PackageDoc pkgdoc; +- final SortedMap usingPackageToUsedClasses = new TreeMap(); ++ final SortedMap<String,Set<ClassDoc>> usingPackageToUsedClasses = new TreeMap<String,Set<ClassDoc>>(); + + /** + * Constructor. +@@ -64,15 +64,15 @@ + ClassDoc[] content = pkgdoc.allClasses(); + for (int i = 0; i < content.length; ++i) { + ClassDoc usedClass = content[i]; +- Set usingClasses = (Set)mapper.classToClass.get(usedClass.qualifiedName()); ++ Set<ClassDoc> usingClasses = mapper.classToClass.get(usedClass.qualifiedName()); + if (usingClasses != null) { +- for (Iterator it = usingClasses.iterator(); it.hasNext(); ) { +- ClassDoc usingClass = (ClassDoc)it.next(); ++ for (Iterator<ClassDoc> it = usingClasses.iterator(); it.hasNext(); ) { ++ ClassDoc usingClass = it.next(); + PackageDoc usingPackage = usingClass.containingPackage(); +- Set usedClasses = (Set)usingPackageToUsedClasses ++ Set<ClassDoc> usedClasses = (Set)usingPackageToUsedClasses + .get(usingPackage.name()); + if (usedClasses == null) { +- usedClasses = new TreeSet(); ++ usedClasses = new TreeSet<ClassDoc>(); + usingPackageToUsedClasses.put(Util.getPackageName(usingPackage), + usedClasses); + } +@@ -153,9 +153,9 @@ + getPackageLinkString(pkgdoc, Util.getPackageName(pkgdoc), false)))); + table.addContent(getSummaryTableHeader(packageTableHeader, "col")); + Content tbody = new HtmlTree(HtmlTag.TBODY); +- Iterator it = usingPackageToUsedClasses.keySet().iterator(); ++ Iterator<String> it = usingPackageToUsedClasses.keySet().iterator(); + for (int i = 0; it.hasNext(); i++) { +- PackageDoc pkg = configuration.root.packageNamed((String)it.next()); ++ PackageDoc pkg = configuration.root.packageNamed(it.next()); + HtmlTree tr = new HtmlTree(HtmlTag.TR); + if (i % 2 == 0) { + tr.addStyle(HtmlStyle.altColor); +@@ -181,9 +181,9 @@ + configuration.getText("doclet.Class"), + configuration.getText("doclet.Description")) + }; +- Iterator itp = usingPackageToUsedClasses.keySet().iterator(); ++ Iterator<String> itp = usingPackageToUsedClasses.keySet().iterator(); + while (itp.hasNext()) { +- String packageName = (String)itp.next(); ++ String packageName = itp.next(); + PackageDoc usingPackage = configuration.root.packageNamed(packageName); + HtmlTree li = new HtmlTree(HtmlTag.LI); + li.addStyle(HtmlStyle.blockList); +@@ -199,9 +199,8 @@ + getPackageLinkString(usingPackage,Util.getPackageName(usingPackage), false)))); + table.addContent(getSummaryTableHeader(classTableHeader, "col")); + Content tbody = new HtmlTree(HtmlTag.TBODY); +- Iterator itc = +- ((Collection)usingPackageToUsedClasses.get(packageName)) +- .iterator(); ++ Iterator<ClassDoc> itc = ++ usingPackageToUsedClasses.get(packageName).iterator(); + for (int i = 0; itc.hasNext(); i++) { + HtmlTree tr = new HtmlTree(HtmlTag.TR); + if (i % 2 == 0) { +diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java +--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java ++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java +@@ -97,7 +97,7 @@ + * @param node the XML element that specifies which component to document. + * @param contentTree content tree to which the documentation will be added + */ +- protected void build(XMLNode node) { ++ protected void build(XMLNode node, Content contentTree) { + String component = node.name; + try { + invokeMethod("build" + component, +diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java +--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java ++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java +@@ -80,7 +80,7 @@ + */ + public XMLNode parseXML(String root) { + if (xmlElementsMap.containsKey(root)) { +- return (List) xmlElementsMap.get(root); ++ return xmlElementsMap.get(root); + } + try { + currentRoot = root; +diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java +--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java ++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java +@@ -375,8 +375,7 @@ + */ + public void buildFieldSerializationOverview(ClassDoc classDoc, Content classContentTree) { + if (classDoc.definesSerializableFields()) { +- FieldDoc serialPersistentField = +- Util.asList(classDoc.serializableFields()).get(0); ++ FieldDoc serialPersistentField = classDoc.serializableFields()[0]; + // Check to see if there are inline comments, tags or deprecation + // information to be printed. + if (fieldWriter.shouldPrintOverview(serialPersistentField)) { +diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java +--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java ++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java +@@ -46,150 +46,150 @@ + * Mapping of ClassDocs to set of PackageDoc used by that class. + * Entries may be null. + */ +- public Map classToPackage = new HashMap(); ++ public Map<String,Set<PackageDoc>> classToPackage = new HashMap<String,Set<PackageDoc>>(); + + /** + * Mapping of Annotations to set of PackageDoc that use the annotation. + */ +- public Map classToPackageAnnotations = new HashMap(); ++ public Map<String,List<PackageDoc>> classToPackageAnnotations = new HashMap<String,List<PackageDoc>>(); + + /** + * Mapping of ClassDocs to set of ClassDoc used by that class. + * Entries may be null. + */ +- public Map classToClass = new HashMap(); ++ public Map<String,Set<ClassDoc>> classToClass = new HashMap<String,Set<ClassDoc>>(); + + /** + * Mapping of ClassDocs to list of ClassDoc which are direct or + * indirect subclasses of that class. + * Entries may be null. + */ +- public Map classToSubclass = new HashMap(); ++ public Map<String,List<ClassDoc>> classToSubclass = new HashMap<String,List<ClassDoc>>(); + + /** + * Mapping of ClassDocs to list of ClassDoc which are direct or + * indirect subinterfaces of that interface. + * Entries may be null. + */ +- public Map classToSubinterface = new HashMap(); ++ public Map<String,List<ClassDoc>> classToSubinterface = new HashMap<String,List<ClassDoc>>(); + + /** + * Mapping of ClassDocs to list of ClassDoc which implement + * this interface. + * Entries may be null. + */ +- public Map classToImplementingClass = new HashMap(); ++ public Map<String,List<ClassDoc>> classToImplementingClass = new HashMap<String,List<ClassDoc>>(); + + /** + * Mapping of ClassDocs to list of FieldDoc declared as that class. + * Entries may be null. + */ +- public Map classToField = new HashMap(); ++ public Map<String,List<FieldDoc>> classToField = new HashMap<String,List<FieldDoc>>(); + + /** + * Mapping of ClassDocs to list of MethodDoc returning that class. + * Entries may be null. + */ +- public Map classToMethodReturn = new HashMap(); ++ public Map<String,List<MethodDoc>> classToMethodReturn = new HashMap<String,List<MethodDoc>>(); + + /** + * Mapping of ClassDocs to list of MethodDoc having that class + * as an arg. + * Entries may be null. + */ +- public Map classToMethodArgs = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToMethodArgs = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * Mapping of ClassDocs to list of MethodDoc which throws that class. + * Entries may be null. + */ +- public Map classToMethodThrows = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToMethodThrows = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * Mapping of ClassDocs to list of ConstructorDoc having that class + * as an arg. + * Entries may be null. + */ +- public Map classToConstructorArgs = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToConstructorArgs = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * Mapping of ClassDocs to list of ConstructorDoc which throws that class. + * Entries may be null. + */ +- public Map classToConstructorThrows = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToConstructorThrows = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * The mapping of AnnotationTypeDocs to constructors that use them. + */ +- public Map classToConstructorAnnotations = new HashMap(); +- +- /** +- * The mapping of AnnotationTypeDocs to Constructor parameters that use them. +- */ +- public Map classToConstructorParamAnnotation = new HashMap(); ++ public Map<String,List<ConstructorDoc>> classToConstructorAnnotations = new HashMap<String,List<ConstructorDoc>>(); ++ ++ /** ++ * The mapping of AnnotationTypeDocs to Constructor parameters that use them. ++ */ ++ public Map<String,List<ExecutableMemberDoc>> classToConstructorParamAnnotation = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * The mapping of ClassDocs to Constructor arguments that use them as type parameters. + */ +- public Map classToConstructorDocArgTypeParam = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToConstructorDocArgTypeParam = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * The mapping of ClassDocs to ClassDocs that use them as type parameters. + */ +- public Map classToClassTypeParam = new HashMap(); ++ public Map<String,List<ClassDoc>> classToClassTypeParam = new HashMap<String,List<ClassDoc>>(); + + /** + * The mapping of AnnotationTypeDocs to ClassDocs that use them. + */ +- public Map classToClassAnnotations = new HashMap(); ++ public Map<String,List<ClassDoc>> classToClassAnnotations = new HashMap<String,List<ClassDoc>>(); + + /** + * The mapping of ClassDocs to ExecutableMemberDocs that use them as type parameters. + */ +- public Map classToExecMemberDocTypeParam = new HashMap(); ++ public Map<String,List<MethodDoc>> classToExecMemberDocTypeParam = new HashMap<String,List<MethodDoc>>(); + + /** + * The mapping of ClassDocs to ExecutableMemberDocs arguments that use them as type parameters. + */ +- public Map classToExecMemberDocArgTypeParam = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToExecMemberDocArgTypeParam = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * The mapping of AnnotationTypeDocs to ExecutableMemberDocs that use them. + */ +- public Map classToExecMemberDocAnnotations = new HashMap(); ++ public Map<String,List<MethodDoc>> classToExecMemberDocAnnotations = new HashMap<String,List<MethodDoc>>(); + + /** + * The mapping of ClassDocs to ExecutableMemberDocs that have return type + * with type parameters of that class. + */ +- public Map classToExecMemberDocReturnTypeParam = new HashMap(); ++ public Map<String,List<MethodDoc>> classToExecMemberDocReturnTypeParam = new HashMap<String,List<MethodDoc>>(); + + /** + * The mapping of AnnotationTypeDocs to MethodDoc parameters that use them. + */ +- public Map classToExecMemberDocParamAnnotation = new HashMap(); ++ public Map<String,List<ExecutableMemberDoc>> classToExecMemberDocParamAnnotation = new HashMap<String,List<ExecutableMemberDoc>>(); + + /** + * The mapping of ClassDocs to FieldDocs that use them as type parameters. + */ +- public Map classToFieldDocTypeParam = new HashMap(); ++ public Map<String,List<FieldDoc>> classToFieldDocTypeParam = new HashMap<String,List<FieldDoc>>(); + + /** + * The mapping of AnnotationTypeDocs to FieldDocs that use them. + */ +- public Map annotationToFieldDoc = new HashMap(); ++ public Map<String,List<FieldDoc>> annotationToFieldDoc = new HashMap<String,List<FieldDoc>>(); + + + public ClassUseMapper(RootDoc root, ClassTree classtree) { + this.classtree = classtree; + + // Map subclassing, subinterfacing implementing, ... +- for (Iterator it = classtree.baseclasses().iterator(); it.hasNext();) { +- subclasses((ClassDoc)it.next()); ++ for (Iterator<ClassDoc> it = classtree.baseclasses().iterator(); it.hasNext();) { ++ subclasses(it.next()); + } +- for (Iterator it = classtree.baseinterfaces().iterator(); it.hasNext();) { ++ for (Iterator<ClassDoc> it = classtree.baseinterfaces().iterator(); it.hasNext();) { + // does subinterfacing as side-effect +- implementingClasses((ClassDoc)it.next()); ++ implementingClasses(it.next()); + } + // Map methods, fields, constructors using a class. + ClassDoc[] classes = root.classes(); +@@ -231,15 +231,15 @@ + /** + * Return all subclasses of a class AND fill-in classToSubclass map. + */ +- private Collection subclasses(ClassDoc cd) { +- Collection ret = (Collection)classToSubclass.get(cd.qualifiedName()); ++ private Collection<ClassDoc> subclasses(ClassDoc cd) { ++ Collection<ClassDoc> ret = classToSubclass.get(cd.qualifiedName()); + if (ret == null) { +- ret = new TreeSet(); +- List subs = classtree.subclasses(cd); ++ ret = new TreeSet<ClassDoc>(); ++ List<ClassDoc> subs = classtree.subclasses(cd); + if (subs != null) { + ret.addAll(subs); +- for (Iterator it = subs.iterator(); it.hasNext();) { +- ret.addAll(subclasses((ClassDoc)it.next())); ++ for (Iterator<ClassDoc> it = subs.iterator(); it.hasNext();) { ++ ret.addAll(subclasses(it.next())); + } + } + addAll(classToSubclass, cd, ret); +@@ -250,15 +250,15 @@ + /** + * Return all subinterfaces of an interface AND fill-in classToSubinterface map. + */ +- private Collection subinterfaces(ClassDoc cd) { +- Collection ret = (Collection)classToSubinterface.get(cd.qualifiedName()); ++ private Collection<ClassDoc> subinterfaces(ClassDoc cd) { ++ Collection<ClassDoc> ret = classToSubinterface.get(cd.qualifiedName()); + if (ret == null) { +- ret = new TreeSet(); +- List subs = classtree.subinterfaces(cd); ++ ret = new TreeSet<ClassDoc>(); ++ List<ClassDoc> subs = classtree.subinterfaces(cd); + if (subs != null) { + ret.addAll(subs); +- for (Iterator it = subs.iterator(); it.hasNext();) { +- ret.addAll(subinterfaces((ClassDoc)it.next())); ++ for (Iterator<ClassDoc> it = subs.iterator(); it.hasNext();) { ++ ret.addAll(subinterfaces(it.next())); + } + } + addAll(classToSubinterface, cd, ret); +@@ -272,19 +272,19 @@ + * implementing subinterfaces) AND fill-in both classToImplementingClass + * and classToSubinterface maps. + */ +- private Collection implementingClasses(ClassDoc cd) { +- Collection ret = (List)classToImplementingClass.get(cd.qualifiedName()); ++ private Collection<ClassDoc> implementingClasses(ClassDoc cd) { ++ Collection<ClassDoc> ret = classToImplementingClass.get(cd.qualifiedName()); + if (ret == null) { +- ret = new TreeSet(); +- List impl = classtree.implementingclasses(cd); ++ ret = new TreeSet<ClassDoc>(); ++ List<ClassDoc> impl = classtree.implementingclasses(cd); + if (impl != null) { + ret.addAll(impl); +- for (Iterator it = impl.iterator(); it.hasNext();) { +- ret.addAll(subclasses((ClassDoc)it.next())); ++ for (Iterator<ClassDoc> it = impl.iterator(); it.hasNext();) { ++ ret.addAll(subclasses(it.next())); + } + } +- for (Iterator it = subinterfaces(cd).iterator(); it.hasNext();) { +- ret.addAll(implementingClasses((ClassDoc)it.next())); ++ for (Iterator<ClassDoc> it = subinterfaces(cd).iterator(); it.hasNext();) { ++ ret.addAll(implementingClasses(it.next())); + } + addAll(classToImplementingClass, cd, ret); + } +@@ -298,7 +298,7 @@ + private void mapExecutable(ExecutableMemberDoc em) { + Parameter[] params = em.parameters(); + boolean isConstructor = em.isConstructor(); +- List classArgs = new ArrayList(); ++ List<Type> classArgs = new ArrayList(); + for (int k = 0; k < params.length; k++) { + Type pcd = params[k].type(); + // primitives don't get mapped, also avoid dups +@@ -325,34 +325,36 @@ + } + } + +- private List refList(Map map, ClassDoc cd) { +- List list = (List)map.get(cd.qualifiedName()); ++ private <T> List<T> refList(Map<String,List<T>> map, ClassDoc cd) { ++ List<T> list = map.get(cd.qualifiedName()); + if (list == null) { +- list = new ArrayList(); ++ List<T> l = new ArrayList<T>(); ++ list = l; + map.put(cd.qualifiedName(), list); + } + return list; + } + +- private Set packageSet(ClassDoc cd) { +- Set pkgSet = (Set)classToPackage.get(cd.qualifiedName()); ++ private Set<PackageDoc> packageSet(ClassDoc cd) { ++ Set<PackageDoc> pkgSet = classToPackage.get(cd.qualifiedName()); + if (pkgSet == null) { +- pkgSet = new TreeSet(); ++ pkgSet = new TreeSet<PackageDoc>(); + classToPackage.put(cd.qualifiedName(), pkgSet); + } + return pkgSet; + } + +- private Set classSet(ClassDoc cd) { +- Set clsSet = (Set)classToClass.get(cd.qualifiedName()); ++ private Set<ClassDoc> classSet(ClassDoc cd) { ++ Set<ClassDoc> clsSet = classToClass.get(cd.qualifiedName()); + if (clsSet == null) { +- clsSet = new TreeSet(); ++ Set<ClassDoc> s = new TreeSet<ClassDoc>(); ++ clsSet = s; + classToClass.put(cd.qualifiedName(), clsSet); + } + return clsSet; + } + +- private void add(Map map, ClassDoc cd, ProgramElementDoc ref) { ++ private <T extends ProgramElementDoc> void add(Map<String,List<T>> map, ClassDoc cd, T ref) { + // add to specified map + refList(map, cd).add(ref); + +@@ -361,7 +363,7 @@ + + classSet(cd).add(ref instanceof MemberDoc? + ((MemberDoc)ref).containingClass() : +- ref); ++ (ClassDoc)ref); + } + + private void addAll(Map map, ClassDoc cd, Collection refs) { +@@ -371,15 +373,13 @@ + // add to specified map + refList(map, cd).addAll(refs); + +- Set pkgSet = packageSet(cd); +- Set clsSet = classSet(cd); ++ Set<PackageDoc> pkgSet = packageSet(cd); ++ Set<ClassDoc> clsSet = classSet(cd); + // add ref's package to package map and class map +- for (Iterator it = refs.iterator(); it.hasNext();) { +- ProgramElementDoc pedoc = (ProgramElementDoc)it.next(); +- pkgSet.add(pedoc.containingPackage()); +- clsSet.add(pedoc instanceof MemberDoc? +- ((MemberDoc)pedoc).containingClass() : +- pedoc); ++ for (Iterator<ClassDoc> it = refs.iterator(); it.hasNext();) { ++ ClassDoc cls = it.next(); ++ pkgSet.add(cls.containingPackage()); ++ clsSet.add(cls); + + } + } +@@ -392,8 +392,8 @@ + * @param doc the doc whose type parameters are being checked. + * @param holder the holder that owns the type parameters. + */ +- private void mapTypeParameters(Map map, Object doc, +- ProgramElementDoc holder) { ++ private <T extends ProgramElementDoc> void mapTypeParameters(Map<String,List<T>> map, Object doc, ++ T holder) { + TypeVariable[] typeVariables; + if (doc instanceof ClassDoc) { + typeVariables = ((ClassDoc) doc).typeParameters(); +@@ -438,8 +438,8 @@ + * @param doc the doc whose type parameters are being checked. + * @param holder the holder that owns the type parameters. + */ +- private void mapAnnotations(Map map, Object doc, +- Object holder) { ++ private <T extends ProgramElementDoc> void mapAnnotations(Map<String,List<T>> map, Object doc, ++ T holder) { + TypeVariable[] typeVariables; + AnnotationDesc[] annotations; + boolean isPackage = false; +@@ -458,12 +458,31 @@ + if (isPackage) + refList(map, annotationDoc).add(holder); + else +- add(map, annotationDoc, (ProgramElementDoc) holder); ++ add(map, annotationDoc, holder); + } + } + +- private void addTypeParameterToMap(Map map, Type type, +- ProgramElementDoc holder) { ++ ++ /** ++ * Map the AnnotationType to the ProgramElementDocs that use them as ++ * type parameters. ++ * ++ * @param map the map the insert the information into. ++ * @param doc the doc whose type parameters are being checked. ++ * @param holder the holder that owns the type parameters. ++ */ ++ private <T extends PackageDoc> void mapAnnotations(Map<String,List<T>> map, PackageDoc doc, ++ T holder) { ++ AnnotationDesc[] annotations; ++ annotations = doc.annotations(); ++ for (int i = 0; i < annotations.length; i++) { ++ AnnotationTypeDoc annotationDoc = annotations[i].annotationType(); ++ refList(map, annotationDoc).add(holder); ++ } ++ } ++ ++ private <T extends ProgramElementDoc> void addTypeParameterToMap(Map<String,List<T>> map, Type type, ++ T holder) { + if (type instanceof ClassDoc) { + add(map, (ClassDoc) type, holder); + } else if (type instanceof ParameterizedType) { |