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