15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.javadoc.internal.doclets.toolkit.util;
27
28 import javax.lang.model.element.Element;
29 import javax.lang.model.element.ExecutableElement;
30 import javax.lang.model.element.TypeElement;
31 import javax.lang.model.element.VariableElement;
32 import javax.lang.model.type.TypeKind;
33 import javax.lang.model.type.TypeMirror;
34 import javax.lang.model.util.Elements;
35 import javax.lang.model.util.SimpleElementVisitor9;
36 import java.lang.ref.SoftReference;
37 import java.util.ArrayList;
38 import java.util.Collections;
39 import java.util.EnumMap;
40 import java.util.EnumSet;
41 import java.util.HashMap;
42 import java.util.LinkedHashMap;
43 import java.util.LinkedHashSet;
44 import java.util.List;
45 import java.util.Map;
46 import java.util.Set;
47 import java.util.function.Predicate;
48 import java.util.stream.Collectors;
49
50 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
51 import jdk.javadoc.internal.doclets.toolkit.PropertyUtils;
52
53 /**
54 * This class computes the main data structure for the doclet's
55 * operations. Essentially, the implementation encapsulating the
683 break;
684 case CONSTRUCTOR:
685 addMember(e, Kind.CONSTRUCTORS);
686 break;
687 case ENUM_CONSTANT:
688 addMember(e, Kind.ENUM_CONSTANTS);
689 break;
690 }
691 }
692
693 // Freeze the data structures
694 for (Kind kind : Kind.values()) {
695 orderedMembers.computeIfPresent(kind, (k, v) -> Collections.unmodifiableList(v));
696 orderedMembers.computeIfAbsent(kind, t -> Collections.emptyList());
697
698 memberMap.computeIfPresent(kind, (k, v) -> Collections.unmodifiableMap(v));
699 memberMap.computeIfAbsent(kind, t -> Collections.emptyMap());
700 }
701 }
702
703 String getMemberKey(Element e) {
704 return new SimpleElementVisitor9<String, Void>() {
705 @Override
706 public String visitExecutable(ExecutableElement e, Void aVoid) {
707 return e.getSimpleName() + ":" + e.getParameters().size();
708 }
709
710 @Override
711 protected String defaultAction(Element e, Void aVoid) {
712 return e.getSimpleName().toString();
713 }
714 }.visit(e);
715 }
716
717 void addMember(Element e, Kind kind) {
718 List<Element> list = orderedMembers.computeIfAbsent(kind, k -> new ArrayList<>());
719 list.add(e);
720
721 Map<String, List<Element>> map = memberMap.computeIfAbsent(kind, k -> new HashMap<>());
722 list = map.computeIfAbsent(getMemberKey(e), l -> new ArrayList<>());
723 list.add(e);
724 }
|
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.javadoc.internal.doclets.toolkit.util;
27
28 import javax.lang.model.element.Element;
29 import javax.lang.model.element.ExecutableElement;
30 import javax.lang.model.element.TypeElement;
31 import javax.lang.model.element.VariableElement;
32 import javax.lang.model.type.TypeKind;
33 import javax.lang.model.type.TypeMirror;
34 import javax.lang.model.util.Elements;
35 import javax.lang.model.util.SimpleElementVisitor14;
36 import java.lang.ref.SoftReference;
37 import java.util.ArrayList;
38 import java.util.Collections;
39 import java.util.EnumMap;
40 import java.util.EnumSet;
41 import java.util.HashMap;
42 import java.util.LinkedHashMap;
43 import java.util.LinkedHashSet;
44 import java.util.List;
45 import java.util.Map;
46 import java.util.Set;
47 import java.util.function.Predicate;
48 import java.util.stream.Collectors;
49
50 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
51 import jdk.javadoc.internal.doclets.toolkit.PropertyUtils;
52
53 /**
54 * This class computes the main data structure for the doclet's
55 * operations. Essentially, the implementation encapsulating the
683 break;
684 case CONSTRUCTOR:
685 addMember(e, Kind.CONSTRUCTORS);
686 break;
687 case ENUM_CONSTANT:
688 addMember(e, Kind.ENUM_CONSTANTS);
689 break;
690 }
691 }
692
693 // Freeze the data structures
694 for (Kind kind : Kind.values()) {
695 orderedMembers.computeIfPresent(kind, (k, v) -> Collections.unmodifiableList(v));
696 orderedMembers.computeIfAbsent(kind, t -> Collections.emptyList());
697
698 memberMap.computeIfPresent(kind, (k, v) -> Collections.unmodifiableMap(v));
699 memberMap.computeIfAbsent(kind, t -> Collections.emptyMap());
700 }
701 }
702
703 @SuppressWarnings("preview")
704 String getMemberKey(Element e) {
705 return new SimpleElementVisitor14<String, Void>() {
706 @Override
707 public String visitExecutable(ExecutableElement e, Void aVoid) {
708 return e.getSimpleName() + ":" + e.getParameters().size();
709 }
710
711 @Override
712 protected String defaultAction(Element e, Void aVoid) {
713 return e.getSimpleName().toString();
714 }
715 }.visit(e);
716 }
717
718 void addMember(Element e, Kind kind) {
719 List<Element> list = orderedMembers.computeIfAbsent(kind, k -> new ArrayList<>());
720 list.add(e);
721
722 Map<String, List<Element>> map = memberMap.computeIfAbsent(kind, k -> new HashMap<>());
723 list = map.computeIfAbsent(getMemberKey(e), l -> new ArrayList<>());
724 list.add(e);
725 }
|