Instances of TypeMirror that are equal (TypeMirror::equals), aren't necessarily 
the same (Types::isSameType). If care is not taken when putting instances of 
TypeMirror into a set, that set might end up containing the same instances.

If Utils.getAllInterfaces is called on a type that extends or implements a 
particular interface multiple times (on different levels of that type's 
hierarchy), the returned set might contain multiple representations of that 
interface. For example, I've seen a case where getAllInterfaces that was passed 
a TypeElement corresponding to java.util.ArrayList returned a set containing 3 
instances of TypeMirror corresponding to `java.util.Collection<E>`.

A bit of archaeology. The old standard doclet (removed in JDK-8177511, commit 
33ab1995) collected instances of com.sun.javadoc.Type in a TreeMap, keying them 
by instances of com.sun.tools.javadoc.main.ClassDocImpl (removed in 
JDK-8215584, commit 151e628) which implemented Comparable. 
ClassDocImpl.compareTo worked by comparing instances of CollationKey derived 
from FQNs of types represented by respective instances of ClassDocImpl.

I'm not sure why `TreeMap<ClassDocImpl, Type>` was changed to 
`LinkedHashSet<TypeMirror>`.

-------------

Commit messages:
 - Initial commit

Changes: https://git.openjdk.java.net/jdk/pull/7659/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7659&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8282483
  Stats: 5 lines in 1 file changed: 0 ins; 0 del; 5 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7659.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7659/head:pull/7659

PR: https://git.openjdk.java.net/jdk/pull/7659

Reply via email to