author | ksrini |
Wed, 25 Oct 2017 21:19:38 -0700 | |
changeset 47453 | b4beec6a0a25 |
parent 47395 | 2ea4edfdef8e |
permissions | -rw-r--r-- |
10 | 1 |
/* |
45417 | 2 |
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. |
10 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
5520 | 7 |
* published by the Free Software Foundation. Oracle designates this |
10 | 8 |
* particular file as subject to the "Classpath" exception as provided |
5520 | 9 |
* by Oracle in the LICENSE file that accompanied this code. |
10 | 10 |
* |
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
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 |
* |
|
5520 | 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. |
|
10 | 24 |
*/ |
25 |
||
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
26 |
package jdk.javadoc.internal.doclets.toolkit.util; |
10 | 27 |
|
14258 | 28 |
import java.util.*; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
29 |
import java.util.regex.Pattern; |
14258 | 30 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
31 |
import javax.lang.model.element.Element; |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
32 |
import javax.lang.model.element.ElementKind; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
33 |
import javax.lang.model.element.ExecutableElement; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
34 |
import javax.lang.model.element.TypeElement; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
35 |
import javax.lang.model.element.VariableElement; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
36 |
import javax.lang.model.type.TypeKind; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
37 |
import javax.lang.model.type.TypeMirror; |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
38 |
import javax.lang.model.util.ElementFilter; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
39 |
|
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
40 |
import com.sun.source.doctree.DocCommentTree; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
41 |
import com.sun.source.doctree.DocTree; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
42 |
|
45417 | 43 |
import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration; |
40303 | 44 |
import jdk.javadoc.internal.doclets.toolkit.Messages; |
10 | 45 |
|
46 |
/** |
|
47 |
* A data structure that encapsulates the visible members of a particular |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
48 |
* type for a given class tree. To use this data structure, you must specify |
10 | 49 |
* the type of member you are interested in (nested class, field, constructor |
50 |
* or method) and the leaf of the class tree. The data structure will map |
|
51 |
* all visible members in the leaf and classes above the leaf in the tree. |
|
52 |
* |
|
14260
727a84636f12
8000665: fix "internal API" comments on javadoc files
jjg
parents:
14259
diff
changeset
|
53 |
* <p><b>This is NOT part of any supported API. |
727a84636f12
8000665: fix "internal API" comments on javadoc files
jjg
parents:
14259
diff
changeset
|
54 |
* If you write code that depends on this, you do so at your own risk. |
727a84636f12
8000665: fix "internal API" comments on javadoc files
jjg
parents:
14259
diff
changeset
|
55 |
* This code and its internal interfaces are subject to change or |
727a84636f12
8000665: fix "internal API" comments on javadoc files
jjg
parents:
14259
diff
changeset
|
56 |
* deletion without notice.</b> |
10 | 57 |
* |
58 |
* @author Atul M Dambalkar |
|
59 |
* @author Jamie Ho (rewrite) |
|
60 |
*/ |
|
61 |
public class VisibleMemberMap { |
|
62 |
||
63 |
private boolean noVisibleMembers = true; |
|
64 |
||
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
65 |
public static enum Kind { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
66 |
INNER_CLASSES, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
67 |
ENUM_CONSTANTS, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
68 |
FIELDS, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
69 |
CONSTRUCTORS, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
70 |
METHODS, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
71 |
ANNOTATION_TYPE_FIELDS, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
72 |
ANNOTATION_TYPE_MEMBER_OPTIONAL, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
73 |
ANNOTATION_TYPE_MEMBER_REQUIRED, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
74 |
PROPERTIES; |
10 | 75 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
76 |
public static final EnumSet<Kind> summarySet = EnumSet.range(INNER_CLASSES, METHODS); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
77 |
public static final EnumSet<Kind> detailSet = EnumSet.range(ENUM_CONSTANTS, METHODS); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
78 |
public static String getNavLinkLabels(Kind kind) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
79 |
switch (kind) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
80 |
case INNER_CLASSES: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
81 |
return "doclet.navNested"; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
82 |
case ENUM_CONSTANTS: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
83 |
return "doclet.navEnum"; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
84 |
case FIELDS: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
85 |
return "doclet.navField"; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
86 |
case CONSTRUCTORS: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
87 |
return "doclet.navConstructor"; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
88 |
case METHODS: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
89 |
return "doclet.navMethod"; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
90 |
default: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
91 |
throw new AssertionError("unknown kind:" + kind); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
92 |
} |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
93 |
} |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
94 |
} |
10 | 95 |
|
96 |
public static final String STARTLEVEL = "start"; |
|
97 |
||
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
98 |
// properties aren't named setA* or getA* |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
99 |
private static final Pattern GETTERSETTERPATTERN = Pattern.compile("[sg]et\\p{Upper}.*"); |
10 | 100 |
/** |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
101 |
* List of TypeElement objects for which ClassMembers objects are built. |
10 | 102 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
103 |
private final Set<TypeElement> visibleClasses; |
10 | 104 |
|
105 |
/** |
|
106 |
* Map for each member name on to a map which contains members with same |
|
107 |
* name-signature. The mapped map will contain mapping for each MemberDoc |
|
108 |
* onto it's respecive level string. |
|
109 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
110 |
private final Map<Object, Map<Element, String>> memberNameMap = new HashMap<>(); |
10 | 111 |
|
112 |
/** |
|
113 |
* Map of class and it's ClassMembers object. |
|
114 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
115 |
private final Map<TypeElement, ClassMembers> classMap = new HashMap<>(); |
10 | 116 |
|
117 |
/** |
|
118 |
* Type whose visible members are requested. This is the leaf of |
|
119 |
* the class tree being mapped. |
|
120 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
121 |
private final TypeElement typeElement; |
10 | 122 |
|
123 |
/** |
|
124 |
* Member kind: InnerClasses/Fields/Methods? |
|
125 |
*/ |
|
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
126 |
public final Kind kind; |
10 | 127 |
|
128 |
/** |
|
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
129 |
* The configuration this VisibleMemberMap was created with. |
10 | 130 |
*/ |
45417 | 131 |
private final BaseConfiguration configuration; |
40303 | 132 |
private final Messages messages; |
25454
376a52c9540c
8039028: [javadoc] refactor the usage of Util.java
ksrini
parents:
22163
diff
changeset
|
133 |
private final Utils utils; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
134 |
private final Comparator<Element> comparator; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
135 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
136 |
private final Map<TypeElement, List<Element>> propertiesCache; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
137 |
private final Map<Element, Element> classPropertiesMap; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
138 |
private final Map<Element, GetterSetter> getterSetterMap; |
10 | 139 |
|
140 |
/** |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
141 |
* Construct a VisibleMemberMap of the given type for the given class. |
10 | 142 |
* |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
143 |
* @param typeElement whose members are being mapped. |
10 | 144 |
* @param kind the kind of member that is being mapped. |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
145 |
* @param configuration the configuration to use to construct this |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
146 |
* VisibleMemberMap. If the field configuration.nodeprecated is true the |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
147 |
* deprecated members are excluded from the map. If the field |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
148 |
* configuration.javafx is true the JavaFX features are used. |
10 | 149 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
150 |
public VisibleMemberMap(TypeElement typeElement, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
151 |
Kind kind, |
45417 | 152 |
BaseConfiguration configuration) { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
153 |
this.typeElement = typeElement; |
10 | 154 |
this.kind = kind; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
155 |
this.configuration = configuration; |
40303 | 156 |
this.messages = configuration.getMessages(); |
25454
376a52c9540c
8039028: [javadoc] refactor the usage of Util.java
ksrini
parents:
22163
diff
changeset
|
157 |
this.utils = configuration.utils; |
35419 | 158 |
propertiesCache = configuration.propertiesCache; |
159 |
classPropertiesMap = configuration.classPropertiesMap; |
|
160 |
getterSetterMap = configuration.getterSetterMap; |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
161 |
comparator = utils.makeGeneralPurposeComparator(); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
162 |
visibleClasses = new LinkedHashSet<>(); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
163 |
new ClassMembers(typeElement, STARTLEVEL).build(); |
10 | 164 |
} |
165 |
||
166 |
/** |
|
167 |
* Return the list of visible classes in this map. |
|
168 |
* |
|
169 |
* @return the list of visible classes in this map. |
|
170 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
171 |
public SortedSet<TypeElement> getVisibleClasses() { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
172 |
SortedSet<TypeElement> vClasses = new TreeSet<>(comparator); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
173 |
vClasses.addAll(visibleClasses); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
174 |
return vClasses; |
10 | 175 |
} |
176 |
||
177 |
/** |
|
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
178 |
* Returns the first method where the given method is visible. |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
179 |
* @param e the method whose visible enclosing type is to be found. |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
180 |
* @return the method found or null |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
181 |
*/ |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
182 |
public ExecutableElement getVisibleMethod(ExecutableElement e) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
183 |
if (kind != Kind.METHODS || e.getKind() != ElementKind.METHOD) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
184 |
throw new AssertionError("incompatible member type or visible member map" + e); |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
185 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
186 |
// start with the current class |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
187 |
for (Element m : getMembers(typeElement)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
188 |
ExecutableElement mthd = (ExecutableElement)m; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
189 |
if (utils.executableMembersEqual(mthd, e)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
190 |
return mthd; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
191 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
192 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
193 |
|
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
194 |
for (TypeElement te : visibleClasses) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
195 |
if (te == typeElement) |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
196 |
continue; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
197 |
for (Element m : getMembers(te)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
198 |
ExecutableElement mthd = (ExecutableElement)m; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
199 |
if (utils.executableMembersEqual(mthd, e)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
200 |
return mthd; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
201 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
202 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
203 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
204 |
return null; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
205 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
206 |
|
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
207 |
/** |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
208 |
* Returns the property field documentation belonging to the given member. |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
209 |
* @param element the member for which the property documentation is needed. |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
210 |
* @return the property field documentation, null if there is none. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
211 |
*/ |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
212 |
public Element getPropertyElement(Element element) { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
213 |
return classPropertiesMap.get(element); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
214 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
215 |
|
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
216 |
/** |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
217 |
* Returns the getter documentation belonging to the given property method. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
218 |
* @param propertyMethod the method for which the getter is needed. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
219 |
* @return the getter documentation, null if there is none. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
220 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
221 |
public Element getGetterForProperty(Element propertyMethod) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
222 |
return getterSetterMap.get(propertyMethod).getGetter(); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
223 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
224 |
|
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
225 |
/** |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
226 |
* Returns the setter documentation belonging to the given property method. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
227 |
* @param propertyMethod the method for which the setter is needed. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
228 |
* @return the setter documentation, null if there is none. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
229 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
230 |
public Element getSetterForProperty(Element propertyMethod) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
231 |
return getterSetterMap.get(propertyMethod).getSetter(); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
232 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
233 |
|
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
234 |
/** |
10 | 235 |
* Return the package private members inherited by the class. Only return |
236 |
* if parent is package private and not documented. |
|
237 |
* |
|
238 |
* @return the package private members inherited by the class. |
|
239 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
240 |
private List<Element> getInheritedPackagePrivateMethods() { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
241 |
List<Element> results = new ArrayList<>(); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
242 |
for (TypeElement currentClass : visibleClasses) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
243 |
if (currentClass != typeElement && |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
244 |
utils.isPackagePrivate(currentClass) && |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
245 |
!utils.isLinkable(currentClass)) { |
10 | 246 |
// Document these members in the child class because |
247 |
// the parent is inaccessible. |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
248 |
results.addAll(classMap.get(currentClass).members); |
10 | 249 |
} |
250 |
} |
|
251 |
return results; |
|
252 |
} |
|
253 |
||
254 |
/** |
|
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
255 |
* Returns a list of visible enclosed members of the mapped type element. |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
256 |
* |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
257 |
* In the case of methods, the list may contain those methods that are |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
258 |
* extended with no specification changes as indicated by the existence |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
259 |
* of a sole @inheritDoc or devoid of any API commments. |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
260 |
* |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
261 |
* This list may also contain appended members, inherited by inaccessible |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
262 |
* super types. These members are documented in the subtype when the |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
263 |
* super type is not documented. |
10 | 264 |
* |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
265 |
* @return a list of visible enclosed members |
10 | 266 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
267 |
|
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
268 |
public List<Element> getLeafMembers() { |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
269 |
List<Element> result = new ArrayList<>(); |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
270 |
result.addAll(getMembers(typeElement)); |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
271 |
result.addAll(getInheritedPackagePrivateMethods()); |
10 | 272 |
return result; |
273 |
} |
|
274 |
||
47453
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
275 |
// Cache to improve performance |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
276 |
private HashMap<ExecutableElement, Boolean> overridenMethodCache = new HashMap<>(); |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
277 |
|
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
278 |
private boolean hasOverridden(ExecutableElement method) { |
47453
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
279 |
return overridenMethodCache.computeIfAbsent(method, m -> hasOverriddenCompute(m)); |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
280 |
} |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
281 |
|
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
282 |
private boolean hasOverriddenCompute(ExecutableElement method) { |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
283 |
if (kind != Kind.METHODS) { |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
284 |
throw new AssertionError("Unexpected kind: " + kind); |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
285 |
} |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
286 |
for (TypeElement t : visibleClasses) { |
47453
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
287 |
for (Element member : classMap.get(t).members) { |
b4beec6a0a25
8189845: Fix for 8157000 causes significant performance regression
ksrini
parents:
47395
diff
changeset
|
288 |
ExecutableElement inheritedMethod = (ExecutableElement)member; |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
289 |
if (utils.elementUtils.overrides(method, inheritedMethod, t)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
290 |
return true; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
291 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
292 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
293 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
294 |
return false; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
295 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
296 |
|
10 | 297 |
/** |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
298 |
* Returns a list of enclosed members for the given type. |
10 | 299 |
* |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
300 |
* @param typeElement the given type |
10 | 301 |
* |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
302 |
* @return a list of enclosed members |
10 | 303 |
*/ |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
304 |
public List<Element> getMembers(TypeElement typeElement) { |
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
305 |
List<Element> result = new ArrayList<>(); |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
306 |
if (this.kind == Kind.METHODS) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
307 |
for (Element member : classMap.get(typeElement).members) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
308 |
ExecutableElement method = (ExecutableElement)member; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
309 |
if (hasOverridden(method)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
310 |
if (!utils.isSimpleOverride(method)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
311 |
result.add(method); |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
312 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
313 |
} else { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
314 |
result.add(method); |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
315 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
316 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
317 |
} else { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
318 |
result.addAll(classMap.get(typeElement).members); |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
319 |
} |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
320 |
return result; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
321 |
} |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
322 |
|
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
323 |
public boolean hasMembers(TypeElement typeElement) { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
324 |
return !classMap.get(typeElement).members.isEmpty(); |
10 | 325 |
} |
326 |
||
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
327 |
private void fillMemberLevelMap(List<? extends Element> list, String level) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
328 |
for (Element element : list) { |
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
329 |
Object key = getMemberKey(element); |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
330 |
Map<Element, String> memberLevelMap = memberNameMap.get(key); |
10 | 331 |
if (memberLevelMap == null) { |
22163 | 332 |
memberLevelMap = new HashMap<>(); |
10 | 333 |
memberNameMap.put(key, memberLevelMap); |
334 |
} |
|
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
335 |
memberLevelMap.put(element, level); |
10 | 336 |
} |
337 |
} |
|
338 |
||
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
339 |
private void purgeMemberLevelMap(Iterable<? extends Element> list, String level) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
340 |
for (Element element : list) { |
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
341 |
Object key = getMemberKey(element); |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
342 |
Map<Element, String> memberLevelMap = memberNameMap.get(key); |
35001 | 343 |
if (memberLevelMap != null && level.equals(memberLevelMap.get(element))) |
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
344 |
memberLevelMap.remove(element); |
10 | 345 |
} |
346 |
} |
|
347 |
||
348 |
/** |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
349 |
* Represents a class member. |
10 | 350 |
*/ |
351 |
private class ClassMember { |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
352 |
private Set<Element> members; |
10 | 353 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
354 |
public ClassMember(Element element) { |
22163 | 355 |
members = new HashSet<>(); |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
356 |
members.add(element); |
10 | 357 |
} |
358 |
||
47395
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
359 |
public boolean isEqual(ExecutableElement method) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
360 |
for (Element member : members) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
361 |
if (member.getKind() != ElementKind.METHOD) |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
362 |
continue; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
363 |
ExecutableElement thatMethod = (ExecutableElement) member; |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
364 |
if (utils.executableMembersEqual(method, thatMethod) && |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
365 |
!utils.isSimpleOverride(thatMethod)) { |
2ea4edfdef8e
8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents:
47216
diff
changeset
|
366 |
members.add(method); |
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
367 |
return true; |
10 | 368 |
} |
369 |
} |
|
370 |
return false; |
|
371 |
} |
|
372 |
} |
|
373 |
||
374 |
/** |
|
375 |
* A data structure that represents the class members for |
|
376 |
* a visible class. |
|
377 |
*/ |
|
378 |
private class ClassMembers { |
|
379 |
||
380 |
/** |
|
381 |
* The mapping class, whose inherited members are put in the |
|
382 |
* {@link #members} list. |
|
383 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
384 |
private final TypeElement typeElement; |
10 | 385 |
|
386 |
/** |
|
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
387 |
* List of members from the mapping class. |
10 | 388 |
*/ |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
389 |
private List<Element> members = null; |
10 | 390 |
|
391 |
/** |
|
392 |
* Level/Depth of inheritance. |
|
393 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
394 |
private final String level; |
10 | 395 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
396 |
private ClassMembers(TypeElement mappingClass, String level) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
397 |
this.typeElement = mappingClass; |
10 | 398 |
this.level = level; |
399 |
if (classMap.containsKey(mappingClass) && |
|
868 | 400 |
level.startsWith(classMap.get(mappingClass).level)) { |
10 | 401 |
//Remove lower level class so that it can be replaced with |
402 |
//same class found at higher level. |
|
403 |
purgeMemberLevelMap(getClassMembers(mappingClass, false), |
|
868 | 404 |
classMap.get(mappingClass).level); |
10 | 405 |
classMap.remove(mappingClass); |
406 |
visibleClasses.remove(mappingClass); |
|
407 |
} |
|
408 |
if (!classMap.containsKey(mappingClass)) { |
|
409 |
classMap.put(mappingClass, this); |
|
410 |
visibleClasses.add(mappingClass); |
|
411 |
} |
|
412 |
} |
|
413 |
||
414 |
private void build() { |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
415 |
if (kind == Kind.CONSTRUCTORS) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
416 |
addMembers(typeElement); |
10 | 417 |
} else { |
418 |
mapClass(); |
|
419 |
} |
|
420 |
} |
|
421 |
||
422 |
private void mapClass() { |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
423 |
addMembers(typeElement); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
424 |
List<? extends TypeMirror> interfaces = typeElement.getInterfaces(); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
425 |
for (TypeMirror anInterface : interfaces) { |
10 | 426 |
String locallevel = level + 1; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
427 |
ClassMembers cm = new ClassMembers(utils.asTypeElement(anInterface), locallevel); |
10 | 428 |
cm.mapClass(); |
429 |
} |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
430 |
if (utils.isClass(typeElement)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
431 |
TypeElement superclass = utils.getSuperClass(typeElement); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
432 |
if (!(superclass == null || typeElement.equals(superclass))) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
433 |
ClassMembers cm = new ClassMembers(superclass, level + "c"); |
10 | 434 |
cm.mapClass(); |
435 |
} |
|
436 |
} |
|
437 |
} |
|
438 |
||
439 |
/** |
|
440 |
* Get all the valid members from the mapping class. Get the list of |
|
441 |
* members for the class to be included into(ctii), also get the level |
|
442 |
* string for ctii. If mapping class member is not already in the |
|
443 |
* inherited member list and if it is visible in the ctii and not |
|
444 |
* overridden, put such a member in the inherited member list. |
|
445 |
* Adjust member-level-map, class-map. |
|
446 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
447 |
private void addMembers(TypeElement fromClass) { |
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
448 |
List<Element> result = new ArrayList<>(); |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
449 |
for (Element element : getClassMembers(fromClass, true)) { |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
450 |
if (memberIsVisible(element)) { |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
451 |
if (!isOverridden(element, level)) { |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
452 |
if (!utils.isHidden(element)) { |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
453 |
result.add(element); |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
454 |
} |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
455 |
} |
10 | 456 |
} |
457 |
} |
|
42000
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
458 |
if (members != null) { |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
459 |
throw new AssertionError("members should not be null"); |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
460 |
} |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
461 |
members = Collections.unmodifiableList(result); |
8b7412f7eecd
8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents:
40303
diff
changeset
|
462 |
if (!members.isEmpty()) { |
10 | 463 |
noVisibleMembers = false; |
464 |
} |
|
465 |
fillMemberLevelMap(getClassMembers(fromClass, false), level); |
|
466 |
} |
|
467 |
||
468 |
/** |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
469 |
* Is given element visible in given typeElement in terms of inheritance? The given element |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
470 |
* is visible in the given typeElement if it is public or protected and if it is |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
471 |
* package-private if it's containing class is in the same package as the given typeElement. |
10 | 472 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
473 |
private boolean memberIsVisible(Element element) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
474 |
if (utils.getEnclosingTypeElement(element).equals(VisibleMemberMap.this.typeElement)) { |
10 | 475 |
//Member is in class that we are finding visible members for. |
476 |
//Of course it is visible. |
|
477 |
return true; |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
478 |
} else if (utils.isPrivate(element)) { |
10 | 479 |
//Member is in super class or implemented interface. |
480 |
//Private, so not inherited. |
|
481 |
return false; |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
482 |
} else if (utils.isPackagePrivate(element)) { |
10 | 483 |
//Member is package private. Only return true if its class is in |
484 |
//same package. |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
485 |
return utils.containingPackage(element).equals(utils.containingPackage(VisibleMemberMap.this.typeElement)); |
10 | 486 |
} else { |
487 |
//Public members are always inherited. |
|
488 |
return true; |
|
489 |
} |
|
490 |
} |
|
491 |
||
492 |
/** |
|
493 |
* Return all available class members. |
|
494 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
495 |
private List<? extends Element> getClassMembers(TypeElement te, boolean filter) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
496 |
if (utils.isEnum(te) && kind == Kind.CONSTRUCTORS) { |
10 | 497 |
//If any of these rules are hit, return empty array because |
498 |
//we don't document these members ever. |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
499 |
return Collections.emptyList(); |
10 | 500 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
501 |
List<? extends Element> list; |
10 | 502 |
switch (kind) { |
20237
b6d89903c867
8015249: javadoc fails to document static final fields in annotation types
bpatel
parents:
16319
diff
changeset
|
503 |
case ANNOTATION_TYPE_FIELDS: |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
504 |
list = (filter) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
505 |
? utils.getAnnotationFields(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
506 |
: utils.getAnnotationFieldsUnfiltered(te); |
20237
b6d89903c867
8015249: javadoc fails to document static final fields in annotation types
bpatel
parents:
16319
diff
changeset
|
507 |
break; |
10 | 508 |
case ANNOTATION_TYPE_MEMBER_OPTIONAL: |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
509 |
list = utils.isAnnotationType(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
510 |
? filterAnnotations(te, false) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
511 |
: Collections.emptyList(); |
10 | 512 |
break; |
513 |
case ANNOTATION_TYPE_MEMBER_REQUIRED: |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
514 |
list = utils.isAnnotationType(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
515 |
? filterAnnotations(te, true) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
516 |
: Collections.emptyList(); |
10 | 517 |
break; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
518 |
case INNER_CLASSES: |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
519 |
List<TypeElement> xlist = filter |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
520 |
? utils.getInnerClasses(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
521 |
: utils.getInnerClassesUnfiltered(te); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
522 |
list = new ArrayList<>(xlist); |
10 | 523 |
break; |
524 |
case ENUM_CONSTANTS: |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
525 |
list = utils.getEnumConstants(te); |
10 | 526 |
break; |
527 |
case FIELDS: |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
528 |
if (filter) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
529 |
list = utils.isAnnotationType(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
530 |
? utils.getAnnotationFields(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
531 |
: utils.getFields(te); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
532 |
} else { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
533 |
list = utils.isAnnotationType(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
534 |
? utils.getAnnotationFieldsUnfiltered(te) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
535 |
: utils.getFieldsUnfiltered(te); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
536 |
} |
10 | 537 |
break; |
538 |
case CONSTRUCTORS: |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
539 |
list = utils.getConstructors(te); |
10 | 540 |
break; |
541 |
case METHODS: |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
542 |
list = filter ? utils.getMethods(te) : utils.getMethodsUnfiltered(te); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
543 |
checkOnPropertiesTags(list); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
544 |
break; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
545 |
case PROPERTIES: |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
546 |
list = properties(te, filter); |
10 | 547 |
break; |
548 |
default: |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
549 |
list = Collections.emptyList(); |
10 | 550 |
} |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
551 |
// Deprected members should be excluded or not? |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
552 |
if (configuration.nodeprecated) { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
553 |
return utils.excludeDeprecatedMembers(list); |
10 | 554 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
555 |
return list; |
10 | 556 |
} |
557 |
||
558 |
/** |
|
559 |
* Filter the annotation type members and return either the required |
|
560 |
* members or the optional members, depending on the value of the |
|
561 |
* required parameter. |
|
562 |
* |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
563 |
* @param typeElement The annotation type to process. |
10 | 564 |
* @param required |
565 |
* @return the annotation type members and return either the required |
|
566 |
* members or the optional members, depending on the value of the |
|
567 |
* required parameter. |
|
568 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
569 |
private List<Element> filterAnnotations(TypeElement typeElement, boolean required) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
570 |
List<Element> members = utils.getAnnotationMethods(typeElement); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
571 |
List<Element> targetMembers = new ArrayList<>(); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
572 |
for (Element member : members) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
573 |
ExecutableElement ee = (ExecutableElement)member; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
574 |
if ((required && ee.getDefaultValue() == null) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
575 |
|| ((!required) && ee.getDefaultValue() != null)) { |
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
576 |
targetMembers.add(member); |
10 | 577 |
} |
578 |
} |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
579 |
return targetMembers; |
10 | 580 |
} |
581 |
||
582 |
/** |
|
583 |
* Is member overridden? The member is overridden if it is found in the |
|
584 |
* same level hierarchy e.g. member at level "11" overrides member at |
|
585 |
* level "111". |
|
586 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
587 |
private boolean isOverridden(Element element, String level) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
588 |
Object key = getMemberKey(element); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
589 |
Map<?, String> memberLevelMap = (Map<?, String>) memberNameMap.get(key); |
10 | 590 |
if (memberLevelMap == null) |
591 |
return false; |
|
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
592 |
for (String mappedlevel : memberLevelMap.values()) { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
593 |
if (mappedlevel.equals(STARTLEVEL) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
594 |
|| (level.startsWith(mappedlevel) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
595 |
&& !level.equals(mappedlevel))) { |
10 | 596 |
return true; |
597 |
} |
|
598 |
} |
|
599 |
return false; |
|
600 |
} |
|
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
601 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
602 |
private List<Element> properties(final TypeElement typeElement, final boolean filter) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
603 |
final List<ExecutableElement> allMethods = filter |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
604 |
? utils.getMethods(typeElement) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
605 |
: utils.getMethodsUnfiltered(typeElement); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
606 |
final List<VariableElement> allFields = utils.getFieldsUnfiltered(typeElement); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
607 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
608 |
if (propertiesCache.containsKey(typeElement)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
609 |
return propertiesCache.get(typeElement); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
610 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
611 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
612 |
final List<Element> result = new ArrayList<>(); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
613 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
614 |
for (final Element propertyMethod : allMethods) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
615 |
ExecutableElement ee = (ExecutableElement)propertyMethod; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
616 |
if (!isPropertyMethod(ee)) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
617 |
continue; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
618 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
619 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
620 |
final ExecutableElement getter = getterForField(allMethods, ee); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
621 |
final ExecutableElement setter = setterForField(allMethods, ee); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
622 |
final VariableElement field = fieldForProperty(allFields, ee); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
623 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
624 |
addToPropertiesMap(setter, getter, ee, field); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
625 |
getterSetterMap.put(propertyMethod, new GetterSetter(getter, setter)); |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
626 |
result.add(ee); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
627 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
628 |
propertiesCache.put(typeElement, result); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
629 |
return result; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
630 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
631 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
632 |
private void addToPropertiesMap(ExecutableElement setter, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
633 |
ExecutableElement getter, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
634 |
ExecutableElement propertyMethod, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
635 |
VariableElement field) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
636 |
if (field == null || utils.getDocCommentTree(field) == null) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
637 |
addToPropertiesMap(setter, propertyMethod); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
638 |
addToPropertiesMap(getter, propertyMethod); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
639 |
addToPropertiesMap(propertyMethod, propertyMethod); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
640 |
} else { |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
641 |
addToPropertiesMap(getter, field); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
642 |
addToPropertiesMap(setter, field); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
643 |
addToPropertiesMap(propertyMethod, field); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
644 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
645 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
646 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
647 |
private void addToPropertiesMap(Element propertyMethod, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
648 |
Element commentSource) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
649 |
if (null == propertyMethod || null == commentSource) { |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
650 |
return; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
651 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
652 |
DocCommentTree docTree = utils.getDocCommentTree(propertyMethod); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
653 |
|
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
654 |
/* The second condition is required for the property buckets. In |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
655 |
* this case the comment is at the property method (not at the field) |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
656 |
* and it needs to be listed in the map. |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
657 |
*/ |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
658 |
if ((docTree == null) || propertyMethod.equals(commentSource)) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
659 |
classPropertiesMap.put(propertyMethod, commentSource); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
660 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
661 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
662 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
663 |
private ExecutableElement getterForField(List<ExecutableElement> methods, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
664 |
ExecutableElement propertyMethod) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
665 |
final String propertyMethodName = utils.getSimpleName(propertyMethod); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
666 |
final String fieldName = propertyMethodName.substring(0, |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
667 |
propertyMethodName.lastIndexOf("Property")); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
668 |
final String fieldNameUppercased = |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
669 |
"" + Character.toUpperCase(fieldName.charAt(0)) |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
670 |
+ fieldName.substring(1); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
671 |
final String getterNamePattern; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
672 |
final String fieldTypeName = propertyMethod.getReturnType().toString(); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
673 |
if ("boolean".equals(fieldTypeName) |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
674 |
|| fieldTypeName.endsWith("BooleanProperty")) { |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
675 |
getterNamePattern = "(is|get)" + fieldNameUppercased; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
676 |
} else { |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
677 |
getterNamePattern = "get" + fieldNameUppercased; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
678 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
679 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
680 |
for (ExecutableElement method : methods) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
681 |
if (Pattern.matches(getterNamePattern, utils.getSimpleName(method))) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
682 |
if (method.getParameters().isEmpty() && |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
683 |
utils.isPublic(method) || utils.isProtected(method)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
684 |
return method; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
685 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
686 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
687 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
688 |
return null; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
689 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
690 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
691 |
private ExecutableElement setterForField(List<ExecutableElement> methods, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
692 |
ExecutableElement propertyMethod) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
693 |
final String propertyMethodName = utils.getSimpleName(propertyMethod); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
694 |
final String fieldName = |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
695 |
propertyMethodName.substring(0, |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
696 |
propertyMethodName.lastIndexOf("Property")); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
697 |
final String fieldNameUppercased = |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
698 |
"" + Character.toUpperCase(fieldName.charAt(0)) |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
699 |
+ fieldName.substring(1); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
700 |
final String setter = "set" + fieldNameUppercased; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
701 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
702 |
for (ExecutableElement method : methods) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
703 |
if (setter.equals(utils.getSimpleName(method))) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
704 |
if (method.getParameters().size() == 1 |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
705 |
&& method.getReturnType().getKind() == TypeKind.VOID |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
706 |
&& (utils.isPublic(method) || utils.isProtected(method))) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
707 |
return method; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
708 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
709 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
710 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
711 |
return null; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
712 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
713 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
714 |
private VariableElement fieldForProperty(List<VariableElement> fields, ExecutableElement property) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
715 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
716 |
for (VariableElement field : fields) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
717 |
final String fieldName = utils.getSimpleName(field); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
718 |
final String propertyName = fieldName + "Property"; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
719 |
if (propertyName.equals(utils.getSimpleName(property))) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
720 |
return field; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
721 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
722 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
723 |
return null; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
724 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
725 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
726 |
private boolean isPropertyMethod(ExecutableElement method) { |
27381
46ea7c75828e
8061305: Javadoc crashes when method name ends with "Property"
ksrini
parents:
25874
diff
changeset
|
727 |
if (!configuration.javafx) { |
46ea7c75828e
8061305: Javadoc crashes when method name ends with "Property"
ksrini
parents:
25874
diff
changeset
|
728 |
return false; |
46ea7c75828e
8061305: Javadoc crashes when method name ends with "Property"
ksrini
parents:
25874
diff
changeset
|
729 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
730 |
if (!utils.getSimpleName(method).endsWith("Property")) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
731 |
return false; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
732 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
733 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
734 |
if (!memberIsVisible(method)) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
735 |
return false; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
736 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
737 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
738 |
if (GETTERSETTERPATTERN.matcher(utils.getSimpleName(method)).matches()) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
739 |
return false; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
740 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
741 |
if (!method.getTypeParameters().isEmpty()) { |
27381
46ea7c75828e
8061305: Javadoc crashes when method name ends with "Property"
ksrini
parents:
25874
diff
changeset
|
742 |
return false; |
46ea7c75828e
8061305: Javadoc crashes when method name ends with "Property"
ksrini
parents:
25874
diff
changeset
|
743 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
744 |
return method.getParameters().isEmpty() |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
745 |
&& method.getReturnType().getKind() != TypeKind.VOID; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
746 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
747 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
748 |
private void checkOnPropertiesTags(List<? extends Element> members) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
749 |
for (Element e: members) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
750 |
ExecutableElement ee = (ExecutableElement)e; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
751 |
if (utils.isIncluded(ee)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
752 |
CommentHelper ch = utils.getCommentHelper(ee); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
753 |
for (DocTree tree: utils.getBlockTags(ee)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
754 |
String tagName = ch.getTagName(tree); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
755 |
if (tagName.equals("@propertySetter") |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
756 |
|| tagName.equals("@propertyGetter") |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
757 |
|| tagName.equals("@propertyDescription")) { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
758 |
if (!isPropertyGetterOrSetter(members, ee)) { |
40303 | 759 |
messages.warning(ch.getDocTreePath(tree), |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
760 |
"doclet.javafx_tag_misuse"); |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
761 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
762 |
break; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
763 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
764 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
765 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
766 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
767 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
768 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
769 |
private boolean isPropertyGetterOrSetter(List<? extends Element> members, |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
770 |
ExecutableElement method) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
771 |
String propertyName = utils.propertyName(method); |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
772 |
if (!propertyName.isEmpty()) { |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
773 |
String propertyMethodName = propertyName + "Property"; |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
774 |
for (Element member: members) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
775 |
if (utils.getSimpleName(member).equals(propertyMethodName)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
776 |
return true; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
777 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
778 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
779 |
} |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
780 |
return false; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
781 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
782 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
783 |
|
35419 | 784 |
public class GetterSetter { |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
785 |
private final Element getter; |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
786 |
private final Element setter; |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
787 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
788 |
public GetterSetter(Element getter, Element setter) { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
789 |
this.getter = getter; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
790 |
this.setter = setter; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
791 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
792 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
793 |
public Element getGetter() { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
794 |
return getter; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
795 |
} |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
796 |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
797 |
public Element getSetter() { |
16319
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
798 |
return setter; |
e586bfeb39c5
7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents:
14260
diff
changeset
|
799 |
} |
10 | 800 |
} |
801 |
||
802 |
/** |
|
803 |
* Return true if this map has no visible members. |
|
804 |
* |
|
805 |
* @return true if this map has no visible members. |
|
806 |
*/ |
|
807 |
public boolean noVisibleMembers() { |
|
808 |
return noVisibleMembers; |
|
809 |
} |
|
810 |
||
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
811 |
private ClassMember getClassMember(ExecutableElement member) { |
22159
682da512ec17
8030253: Update langtools to use strings-in-switch
briangoetz
parents:
22153
diff
changeset
|
812 |
for (Object key : memberNameMap.keySet()) { |
10 | 813 |
if (key instanceof String) { |
814 |
continue; |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
815 |
} |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
816 |
if (((ClassMember) key).isEqual(member)) { |
10 | 817 |
return (ClassMember) key; |
818 |
} |
|
819 |
} |
|
820 |
return new ClassMember(member); |
|
821 |
} |
|
822 |
||
823 |
/** |
|
824 |
* Return the key to the member map for the given member. |
|
825 |
*/ |
|
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
826 |
private Object getMemberKey(Element element) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
827 |
if (utils.isConstructor(element)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
828 |
return utils.getSimpleName(element) + utils.flatSignature((ExecutableElement)element); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
829 |
} else if (utils.isMethod(element)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
830 |
return getClassMember((ExecutableElement) element); |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
831 |
} else if (utils.isField(element) || utils.isEnumConstant(element) || utils.isAnnotationType(element)) { |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
832 |
return utils.getSimpleName(element); |
10 | 833 |
} else { // it's a class or interface |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
834 |
String classOrIntName = utils.getSimpleName(element); |
10 | 835 |
//Strip off the containing class name because we only want the member name. |
35426
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
836 |
classOrIntName = classOrIntName.indexOf('.') != 0 |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
837 |
? classOrIntName.substring(classOrIntName.lastIndexOf('.')) |
374342e56a56
8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents:
35419
diff
changeset
|
838 |
: classOrIntName; |
10 | 839 |
return "clint" + classOrIntName; |
840 |
} |
|
841 |
} |
|
842 |
} |