68 public static final String STARTLEVEL = "start"; |
68 public static final String STARTLEVEL = "start"; |
69 |
69 |
70 /** |
70 /** |
71 * List of ClassDoc objects for which ClassMembers objects are built. |
71 * List of ClassDoc objects for which ClassMembers objects are built. |
72 */ |
72 */ |
73 private final List<ClassDoc> visibleClasses = new ArrayList<ClassDoc>(); |
73 private final List<ClassDoc> visibleClasses = new ArrayList<>(); |
74 |
74 |
75 /** |
75 /** |
76 * Map for each member name on to a map which contains members with same |
76 * Map for each member name on to a map which contains members with same |
77 * name-signature. The mapped map will contain mapping for each MemberDoc |
77 * name-signature. The mapped map will contain mapping for each MemberDoc |
78 * onto it's respecive level string. |
78 * onto it's respecive level string. |
79 */ |
79 */ |
80 private final Map<Object,Map<ProgramElementDoc,String>> memberNameMap = new HashMap<Object,Map<ProgramElementDoc,String>>(); |
80 private final Map<Object,Map<ProgramElementDoc,String>> memberNameMap = new HashMap<>(); |
81 |
81 |
82 /** |
82 /** |
83 * Map of class and it's ClassMembers object. |
83 * Map of class and it's ClassMembers object. |
84 */ |
84 */ |
85 private final Map<ClassDoc,ClassMembers> classMap = new HashMap<ClassDoc,ClassMembers>(); |
85 private final Map<ClassDoc,ClassMembers> classMap = new HashMap<>(); |
86 |
86 |
87 /** |
87 /** |
88 * Type whose visible members are requested. This is the leaf of |
88 * Type whose visible members are requested. This is the leaf of |
89 * the class tree being mapped. |
89 * the class tree being mapped. |
90 */ |
90 */ |
98 /** |
98 /** |
99 * The configuration this VisibleMemberMap was created with. |
99 * The configuration this VisibleMemberMap was created with. |
100 */ |
100 */ |
101 private final Configuration configuration; |
101 private final Configuration configuration; |
102 |
102 |
103 private static final Map<ClassDoc, ProgramElementDoc[]> propertiesCache = |
103 private static final Map<ClassDoc, ProgramElementDoc[]> propertiesCache = new HashMap<>(); |
104 new HashMap<ClassDoc, ProgramElementDoc[]>(); |
104 private static final Map<ProgramElementDoc, ProgramElementDoc> classPropertiesMap = new HashMap<>(); |
105 private static final Map<ProgramElementDoc, ProgramElementDoc> classPropertiesMap = |
105 private static final Map<ProgramElementDoc, GetterSetter> getterSetterMap = new HashMap<>(); |
106 new HashMap<ProgramElementDoc, ProgramElementDoc>(); |
|
107 private static final Map<ProgramElementDoc, GetterSetter> getterSetterMap = |
|
108 new HashMap<ProgramElementDoc, GetterSetter>(); |
|
109 |
106 |
110 /** |
107 /** |
111 * Construct a VisibleMemberMap of the given type for the given |
108 * Construct a VisibleMemberMap of the given type for the given |
112 * class. |
109 * class. |
113 * |
110 * |
170 * |
167 * |
171 * @param configuration the current configuration of the doclet. |
168 * @param configuration the current configuration of the doclet. |
172 * @return the package private members inherited by the class. |
169 * @return the package private members inherited by the class. |
173 */ |
170 */ |
174 private List<ProgramElementDoc> getInheritedPackagePrivateMethods(Configuration configuration) { |
171 private List<ProgramElementDoc> getInheritedPackagePrivateMethods(Configuration configuration) { |
175 List<ProgramElementDoc> results = new ArrayList<ProgramElementDoc>(); |
172 List<ProgramElementDoc> results = new ArrayList<>(); |
176 for (ClassDoc currentClass : visibleClasses) { |
173 for (ClassDoc currentClass : visibleClasses) { |
177 if (currentClass != classdoc && |
174 if (currentClass != classdoc && |
178 currentClass.isPackagePrivate() && |
175 currentClass.isPackagePrivate() && |
179 !Util.isLinkable(currentClass, configuration)) { |
176 !Util.isLinkable(currentClass, configuration)) { |
180 // Document these members in the child class because |
177 // Document these members in the child class because |
206 * @return the list of members for the given class. |
203 * @return the list of members for the given class. |
207 */ |
204 */ |
208 public List<ProgramElementDoc> getMembersFor(ClassDoc cd) { |
205 public List<ProgramElementDoc> getMembersFor(ClassDoc cd) { |
209 ClassMembers clmembers = classMap.get(cd); |
206 ClassMembers clmembers = classMap.get(cd); |
210 if (clmembers == null) { |
207 if (clmembers == null) { |
211 return new ArrayList<ProgramElementDoc>(); |
208 return new ArrayList<>(); |
212 } |
209 } |
213 return clmembers.getMembers(); |
210 return clmembers.getMembers(); |
214 } |
211 } |
215 |
212 |
216 /** |
213 /** |
217 * Sort the given mixed list of classes and interfaces to a list of |
214 * Sort the given mixed list of classes and interfaces to a list of |
218 * classes followed by interfaces traversed. Don't sort alphabetically. |
215 * classes followed by interfaces traversed. Don't sort alphabetically. |
219 */ |
216 */ |
220 private void sort(List<ClassDoc> list) { |
217 private void sort(List<ClassDoc> list) { |
221 List<ClassDoc> classes = new ArrayList<ClassDoc>(); |
218 List<ClassDoc> classes = new ArrayList<>(); |
222 List<ClassDoc> interfaces = new ArrayList<ClassDoc>(); |
219 List<ClassDoc> interfaces = new ArrayList<>(); |
223 for (ClassDoc cd : list) { |
220 for (ClassDoc cd : list) { |
224 if (cd.isClass()) { |
221 if (cd.isClass()) { |
225 classes.add(cd); |
222 classes.add(cd); |
226 } |
223 } |
227 else { |
224 else { |
236 private void fillMemberLevelMap(List<ProgramElementDoc> list, String level) { |
233 private void fillMemberLevelMap(List<ProgramElementDoc> list, String level) { |
237 for (ProgramElementDoc element : list) { |
234 for (ProgramElementDoc element : list) { |
238 Object key = getMemberKey(element); |
235 Object key = getMemberKey(element); |
239 Map<ProgramElementDoc, String> memberLevelMap = memberNameMap.get(key); |
236 Map<ProgramElementDoc, String> memberLevelMap = memberNameMap.get(key); |
240 if (memberLevelMap == null) { |
237 if (memberLevelMap == null) { |
241 memberLevelMap = new HashMap<ProgramElementDoc, String>(); |
238 memberLevelMap = new HashMap<>(); |
242 memberNameMap.put(key, memberLevelMap); |
239 memberNameMap.put(key, memberLevelMap); |
243 } |
240 } |
244 memberLevelMap.put(element, level); |
241 memberLevelMap.put(element, level); |
245 } |
242 } |
246 } |
243 } |
261 */ |
258 */ |
262 private class ClassMember { |
259 private class ClassMember { |
263 private Set<ProgramElementDoc> members; |
260 private Set<ProgramElementDoc> members; |
264 |
261 |
265 public ClassMember(ProgramElementDoc programElementDoc) { |
262 public ClassMember(ProgramElementDoc programElementDoc) { |
266 members = new HashSet<ProgramElementDoc>(); |
263 members = new HashSet<>(); |
267 members.add(programElementDoc); |
264 members.add(programElementDoc); |
268 } |
265 } |
269 |
266 |
270 public void addMember(ProgramElementDoc programElementDoc) { |
267 public void addMember(ProgramElementDoc programElementDoc) { |
271 members.add(programElementDoc); |
268 members.add(programElementDoc); |
295 private ClassDoc mappingClass; |
292 private ClassDoc mappingClass; |
296 |
293 |
297 /** |
294 /** |
298 * List of inherited members from the mapping class. |
295 * List of inherited members from the mapping class. |
299 */ |
296 */ |
300 private List<ProgramElementDoc> members = new ArrayList<ProgramElementDoc>(); |
297 private List<ProgramElementDoc> members = new ArrayList<>(); |
301 |
298 |
302 /** |
299 /** |
303 * Level/Depth of inheritance. |
300 * Level/Depth of inheritance. |
304 */ |
301 */ |
305 private String level; |
302 private String level; |
366 * overridden, put such a member in the inherited member list. |
363 * overridden, put such a member in the inherited member list. |
367 * Adjust member-level-map, class-map. |
364 * Adjust member-level-map, class-map. |
368 */ |
365 */ |
369 private void addMembers(ClassDoc fromClass) { |
366 private void addMembers(ClassDoc fromClass) { |
370 List<ProgramElementDoc> cdmembers = getClassMembers(fromClass, true); |
367 List<ProgramElementDoc> cdmembers = getClassMembers(fromClass, true); |
371 List<ProgramElementDoc> incllist = new ArrayList<ProgramElementDoc>(); |
368 List<ProgramElementDoc> incllist = new ArrayList<>(); |
372 for (ProgramElementDoc pgmelem : cdmembers) { |
369 for (ProgramElementDoc pgmelem : cdmembers) { |
373 if (!found(members, pgmelem) && |
370 if (!found(members, pgmelem) && |
374 memberIsVisible(pgmelem) && |
371 memberIsVisible(pgmelem) && |
375 !isOverridden(pgmelem, level) && |
372 !isOverridden(pgmelem, level) && |
376 !isTreatedAsPrivate(pgmelem)) { |
373 !isTreatedAsPrivate(pgmelem)) { |
485 * required parameter. |
482 * required parameter. |
486 */ |
483 */ |
487 private AnnotationTypeElementDoc[] filter(AnnotationTypeDoc doc, |
484 private AnnotationTypeElementDoc[] filter(AnnotationTypeDoc doc, |
488 boolean required) { |
485 boolean required) { |
489 AnnotationTypeElementDoc[] members = doc.elements(); |
486 AnnotationTypeElementDoc[] members = doc.elements(); |
490 List<AnnotationTypeElementDoc> targetMembers = new ArrayList<AnnotationTypeElementDoc>(); |
487 List<AnnotationTypeElementDoc> targetMembers = new ArrayList<>(); |
491 for (AnnotationTypeElementDoc member : members) { |
488 for (AnnotationTypeElementDoc member : members) { |
492 if ((required && member.defaultValue() == null) || |
489 if ((required && member.defaultValue() == null) || |
493 ((!required) && member.defaultValue() != null)) { |
490 ((!required) && member.defaultValue() != null)) { |
494 targetMembers.add(member); |
491 targetMembers.add(member); |
495 } |
492 } |
532 |
529 |
533 if (propertiesCache.containsKey(cd)) { |
530 if (propertiesCache.containsKey(cd)) { |
534 return propertiesCache.get(cd); |
531 return propertiesCache.get(cd); |
535 } |
532 } |
536 |
533 |
537 final List<MethodDoc> result = new ArrayList<MethodDoc>(); |
534 final List<MethodDoc> result = new ArrayList<>(); |
538 |
535 |
539 for (final MethodDoc propertyMethod : allMethods) { |
536 for (final MethodDoc propertyMethod : allMethods) { |
540 |
537 |
541 if (!isPropertyMethod(propertyMethod)) { |
538 if (!isPropertyMethod(propertyMethod)) { |
542 continue; |
539 continue; |