23 * questions. |
23 * questions. |
24 */ |
24 */ |
25 |
25 |
26 package com.sun.tools.doclets.internal.toolkit.builders; |
26 package com.sun.tools.doclets.internal.toolkit.builders; |
27 |
27 |
|
28 import java.util.*; |
28 import com.sun.tools.doclets.internal.toolkit.util.*; |
29 import com.sun.tools.doclets.internal.toolkit.util.*; |
29 import com.sun.tools.doclets.internal.toolkit.*; |
30 import com.sun.tools.doclets.internal.toolkit.*; |
30 import com.sun.javadoc.*; |
31 import com.sun.javadoc.*; |
31 import java.util.*; |
|
32 |
32 |
33 /** |
33 /** |
34 * Builds the member summary. |
34 * Builds the member summary. |
35 * |
35 * |
36 * This code is not part of an API. |
36 * This code is not part of an API. |
37 * It is implementation that is subject to change. |
37 * It is implementation that is subject to change. |
38 * Do not use it as an API |
38 * Do not use it as an API |
39 * |
39 * |
40 * @author Jamie Ho |
40 * @author Jamie Ho |
|
41 * @author Bhavesh Patel (Modified) |
41 * @since 1.5 |
42 * @since 1.5 |
42 */ |
43 */ |
43 public class MemberSummaryBuilder extends AbstractMemberBuilder { |
44 public class MemberSummaryBuilder extends AbstractMemberBuilder { |
44 |
45 |
45 /** |
46 /** |
46 * The XML root for this builder. |
47 * The XML root for this builder. |
47 */ |
48 */ |
48 public static final String NAME = "MemberSummary"; |
49 public static final String NAME = "MemberSummary"; |
49 |
50 |
50 /** |
51 /** |
51 * The visible members for the given class. |
52 * The visible members for the given class. |
52 */ |
53 */ |
53 private VisibleMemberMap[] visibleMemberMaps; |
54 private VisibleMemberMap[] visibleMemberMaps; |
54 |
55 |
55 /** |
56 /** |
56 * The member summary writers for the given class. |
57 * The member summary writers for the given class. |
57 */ |
58 */ |
58 private MemberSummaryWriter[] memberSummaryWriters; |
59 private MemberSummaryWriter[] memberSummaryWriters; |
59 |
60 |
60 /** |
61 /** |
61 * The type being documented. |
62 * The type being documented. |
62 */ |
63 */ |
63 private ClassDoc classDoc; |
64 private ClassDoc classDoc; |
64 |
65 |
65 private MemberSummaryBuilder(Configuration configuration) { |
66 private MemberSummaryBuilder(Configuration configuration) { |
66 super(configuration); |
67 super(configuration); |
67 } |
68 } |
68 |
69 |
69 /** |
70 /** |
70 * Construct a new MemberSummaryBuilder. |
71 * Construct a new MemberSummaryBuilder. |
71 * |
72 * |
72 * @param classWriter the writer for the class whose members are being |
73 * @param classWriter the writer for the class whose members are being |
73 * summarized. |
74 * summarized. |
74 * @param configuration the current configuration of the doclet. |
75 * @param configuration the current configuration of the doclet. |
75 */ |
76 */ |
76 public static MemberSummaryBuilder getInstance( |
77 public static MemberSummaryBuilder getInstance( |
77 ClassWriter classWriter, Configuration configuration) |
78 ClassWriter classWriter, Configuration configuration) |
78 throws Exception { |
79 throws Exception { |
79 MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration); |
80 MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration); |
80 builder.classDoc = classWriter.getClassDoc(); |
81 builder.classDoc = classWriter.getClassDoc(); |
81 builder.init(classWriter); |
82 builder.init(classWriter); |
82 return builder; |
83 return builder; |
83 } |
84 } |
84 |
85 |
85 /** |
86 /** |
86 * Construct a new MemberSummaryBuilder. |
87 * Construct a new MemberSummaryBuilder. |
87 * |
88 * |
88 * @param annotationTypeWriter the writer for the class whose members are |
89 * @param annotationTypeWriter the writer for the class whose members are |
89 * being summarized. |
90 * being summarized. |
90 * @param configuration the current configuration of the doclet. |
91 * @param configuration the current configuration of the doclet. |
91 */ |
92 */ |
92 public static MemberSummaryBuilder getInstance( |
93 public static MemberSummaryBuilder getInstance( |
93 AnnotationTypeWriter annotationTypeWriter, Configuration configuration) |
94 AnnotationTypeWriter annotationTypeWriter, Configuration configuration) |
94 throws Exception { |
95 throws Exception { |
95 MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration); |
96 MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration); |
96 builder.classDoc = annotationTypeWriter.getAnnotationTypeDoc(); |
97 builder.classDoc = annotationTypeWriter.getAnnotationTypeDoc(); |
97 builder.init(annotationTypeWriter); |
98 builder.init(annotationTypeWriter); |
98 return builder; |
99 return builder; |
99 } |
100 } |
100 |
101 |
101 private void init(Object writer) throws Exception { |
102 private void init(Object writer) throws Exception { |
102 visibleMemberMaps = |
103 visibleMemberMaps = |
103 new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES]; |
104 new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES]; |
104 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { |
105 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { |
105 visibleMemberMaps[i] = |
106 visibleMemberMaps[i] = |
106 new VisibleMemberMap( |
107 new VisibleMemberMap( |
107 classDoc, |
108 classDoc, |
108 i, |
109 i, |
109 configuration.nodeprecated); |
110 configuration.nodeprecated); |
110 } |
111 } |
111 memberSummaryWriters = |
112 memberSummaryWriters = |
112 new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES]; |
113 new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES]; |
113 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { |
114 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { |
114 if (classDoc.isAnnotationType()) { |
115 if (classDoc.isAnnotationType()) { |
115 memberSummaryWriters[i] = |
116 memberSummaryWriters[i] = |
116 visibleMemberMaps[i].noVisibleMembers()? |
117 visibleMemberMaps[i].noVisibleMembers()? |
117 null : |
118 null : |
118 configuration.getWriterFactory().getMemberSummaryWriter( |
119 configuration.getWriterFactory().getMemberSummaryWriter( |
119 (AnnotationTypeWriter) writer, i); |
120 (AnnotationTypeWriter) writer, i); |
120 } else { |
121 } else { |
121 memberSummaryWriters[i] = |
122 memberSummaryWriters[i] = |
122 visibleMemberMaps[i].noVisibleMembers()? |
123 visibleMemberMaps[i].noVisibleMembers()? |
123 null : |
124 null : |
124 configuration.getWriterFactory().getMemberSummaryWriter( |
125 configuration.getWriterFactory().getMemberSummaryWriter( |
125 (ClassWriter) writer, i); |
126 (ClassWriter) writer, i); |
126 } |
127 } |
127 } |
128 } |
128 |
129 |
129 } |
130 } |
130 |
131 |
131 /** |
132 /** |
132 * {@inheritDoc} |
133 * {@inheritDoc} |
133 */ |
134 */ |
134 public String getName() { |
135 public String getName() { |
135 return NAME; |
136 return NAME; |
136 } |
137 } |
137 |
138 |
138 /** |
139 /** |
139 * Return the specified visible member map. |
140 * Return the specified visible member map. |
140 * |
141 * |
141 * @param type the type of visible member map to return. |
142 * @param type the type of visible member map to return. |
142 * @return the specified visible member map. |
143 * @return the specified visible member map. |
143 * @throws ArrayIndexOutOfBoundsException when the type is invalid. |
144 * @throws ArrayIndexOutOfBoundsException when the type is invalid. |
144 * @see VisibleMemberMap |
145 * @see VisibleMemberMap |
145 */ |
146 */ |
146 public VisibleMemberMap getVisibleMemberMap(int type) { |
147 public VisibleMemberMap getVisibleMemberMap(int type) { |
147 return visibleMemberMaps[type]; |
148 return visibleMemberMaps[type]; |
148 } |
149 } |
149 |
150 |
150 /** |
151 /** |
151 * Return the specified member summary writer. |
152 * Return the specified member summary writer. |
152 * |
153 * |
153 * @param type the type of member summary writer to return. |
154 * @param type the type of member summary writer to return. |
154 * @return the specified member summary writer. |
155 * @return the specified member summary writer. |
155 * @throws ArrayIndexOutOfBoundsException when the type is invalid. |
156 * @throws ArrayIndexOutOfBoundsException when the type is invalid. |
156 * @see VisibleMemberMap |
157 * @see VisibleMemberMap |
157 */ |
158 */ |
158 public MemberSummaryWriter getMemberSummaryWriter(int type) { |
159 public MemberSummaryWriter getMemberSummaryWriter(int type) { |
159 return memberSummaryWriters[type]; |
160 return memberSummaryWriters[type]; |
160 } |
161 } |
161 |
162 |
162 /** |
163 /** |
163 * Returns a list of methods that will be documented for the given class. |
164 * Returns a list of methods that will be documented for the given class. |
164 * This information can be used for doclet specific documentation |
165 * This information can be used for doclet specific documentation |
165 * generation. |
166 * generation. |
166 * |
167 * |
167 * @param classDoc the {@link ClassDoc} we want to check. |
168 * @param classDoc the {@link ClassDoc} we want to check. |
168 * @param type the type of members to return. |
169 * @param type the type of members to return. |
169 * @return a list of methods that will be documented. |
170 * @return a list of methods that will be documented. |
170 * @see VisibleMemberMap |
171 * @see VisibleMemberMap |
171 */ |
172 */ |
172 public List<ProgramElementDoc> members(int type) { |
173 public List<ProgramElementDoc> members(int type) { |
173 return visibleMemberMaps[type].getLeafClassMembers(configuration); |
174 return visibleMemberMaps[type].getLeafClassMembers(configuration); |
174 } |
175 } |
175 |
176 |
176 /** |
177 /** |
177 * Return true it there are any members to summarize. |
178 * Return true it there are any members to summarize. |
178 * |
179 * |
179 * @return true if there are any members to summarize. |
180 * @return true if there are any members to summarize. |
180 */ |
181 */ |
181 public boolean hasMembersToDocument() { |
182 public boolean hasMembersToDocument() { |
182 if (classDoc instanceof AnnotationTypeDoc) { |
183 if (classDoc instanceof AnnotationTypeDoc) { |
183 return ((AnnotationTypeDoc) classDoc).elements().length > 0; |
184 return ((AnnotationTypeDoc) classDoc).elements().length > 0; |
184 } |
185 } |
185 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { |
186 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { |
186 VisibleMemberMap members = visibleMemberMaps[i]; |
187 VisibleMemberMap members = visibleMemberMaps[i]; |
187 if (!members.noVisibleMembers()) { |
188 if (!members.noVisibleMembers()) { |
188 return true; |
189 return true; |
189 } |
190 } |
190 } |
191 } |
191 return false; |
192 return false; |
192 } |
193 } |
193 |
194 |
194 /** |
195 /** |
195 * Build the summary for the enum constants. |
196 * Build the summary for the enum constants. |
196 */ |
197 * |
197 public void buildEnumConstantsSummary(XMLNode node) { |
198 * @param node the XML element that specifies which components to document |
198 buildSummary( |
199 * @param memberSummaryTree the content tree to which the documentation will be added |
199 memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS], |
200 */ |
200 visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS]); |
201 public void buildEnumConstantsSummary(XMLNode node, Content memberSummaryTree) { |
201 } |
202 MemberSummaryWriter writer = |
|
203 memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS]; |
|
204 VisibleMemberMap visibleMemberMap = |
|
205 visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS]; |
|
206 addSummary(writer, visibleMemberMap, false, memberSummaryTree); |
|
207 } |
202 |
208 |
203 /** |
209 /** |
204 * Build the summary for the optional members. |
210 * Build the summary for the optional members. |
205 */ |
211 * |
206 public void buildAnnotationTypeOptionalMemberSummary(XMLNode node) { |
212 * @param node the XML element that specifies which components to document |
207 buildSummary( |
213 * @param memberSummaryTree the content tree to which the documentation will be added |
208 memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL], |
214 */ |
209 visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]); |
215 public void buildAnnotationTypeOptionalMemberSummary(XMLNode node, Content memberSummaryTree) { |
|
216 MemberSummaryWriter writer = |
|
217 memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]; |
|
218 VisibleMemberMap visibleMemberMap = |
|
219 visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]; |
|
220 addSummary(writer, visibleMemberMap, false, memberSummaryTree); |
210 } |
221 } |
211 |
222 |
212 /** |
223 /** |
213 * Build the summary for the optional members. |
224 * Build the summary for the optional members. |
214 */ |
225 * |
215 public void buildAnnotationTypeRequiredMemberSummary(XMLNode node) { |
226 * @param node the XML element that specifies which components to document |
216 buildSummary( |
227 * @param memberSummaryTree the content tree to which the documentation will be added |
217 memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED], |
228 */ |
218 visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]); |
229 public void buildAnnotationTypeRequiredMemberSummary(XMLNode node, Content memberSummaryTree) { |
219 } |
230 MemberSummaryWriter writer = |
220 |
231 memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]; |
221 /** |
232 VisibleMemberMap visibleMemberMap = |
222 * Build the summary for the fields. |
233 visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]; |
223 */ |
234 addSummary(writer, visibleMemberMap, false, memberSummaryTree); |
224 public void buildFieldsSummary(XMLNode node) { |
235 } |
225 buildSummary( |
236 |
226 memberSummaryWriters[VisibleMemberMap.FIELDS], |
237 /** |
227 visibleMemberMaps[VisibleMemberMap.FIELDS]); |
238 * Build the summary for the fields. |
228 } |
239 * |
229 |
240 * @param node the XML element that specifies which components to document |
230 /** |
241 * @param memberSummaryTree the content tree to which the documentation will be added |
231 * Build the inherited summary for the fields. |
242 */ |
232 */ |
243 public void buildFieldsSummary(XMLNode node, Content memberSummaryTree) { |
233 public void buildFieldsInheritedSummary(XMLNode node) { |
244 MemberSummaryWriter writer = |
234 buildInheritedSummary( |
245 memberSummaryWriters[VisibleMemberMap.FIELDS]; |
235 memberSummaryWriters[VisibleMemberMap.FIELDS], |
246 VisibleMemberMap visibleMemberMap = |
236 visibleMemberMaps[VisibleMemberMap.FIELDS]); |
247 visibleMemberMaps[VisibleMemberMap.FIELDS]; |
237 } |
248 addSummary(writer, visibleMemberMap, true, memberSummaryTree); |
238 |
249 } |
239 /** |
250 |
240 * Build the summary for the nested classes. |
251 /** |
241 */ |
252 * Build the summary for the nested classes. |
242 public void buildNestedClassesSummary(XMLNode node) { |
253 * |
243 buildSummary( |
254 * @param node the XML element that specifies which components to document |
244 memberSummaryWriters[VisibleMemberMap.INNERCLASSES], |
255 * @param memberSummaryTree the content tree to which the documentation will be added |
245 visibleMemberMaps[VisibleMemberMap.INNERCLASSES]); |
256 */ |
246 } |
257 public void buildNestedClassesSummary(XMLNode node, Content memberSummaryTree) { |
247 |
258 MemberSummaryWriter writer = |
248 /** |
259 memberSummaryWriters[VisibleMemberMap.INNERCLASSES]; |
249 * Build the inherited summary for the nested classes. |
260 VisibleMemberMap visibleMemberMap = |
250 */ |
261 visibleMemberMaps[VisibleMemberMap.INNERCLASSES]; |
251 public void buildNestedClassesInheritedSummary(XMLNode node) { |
262 addSummary(writer, visibleMemberMap, true, memberSummaryTree); |
252 buildInheritedSummary( |
263 } |
253 memberSummaryWriters[VisibleMemberMap.INNERCLASSES], |
264 |
254 visibleMemberMaps[VisibleMemberMap.INNERCLASSES]); |
265 /** |
255 } |
266 * Build the method summary. |
256 |
267 * |
257 /** |
268 * @param node the XML element that specifies which components to document |
258 * Build the method summary. |
269 * @param memberSummaryTree the content tree to which the documentation will be added |
259 */ |
270 */ |
260 public void buildMethodsSummary(XMLNode node) { |
271 public void buildMethodsSummary(XMLNode node, Content memberSummaryTree) { |
261 buildSummary( |
272 MemberSummaryWriter writer = |
262 memberSummaryWriters[VisibleMemberMap.METHODS], |
273 memberSummaryWriters[VisibleMemberMap.METHODS]; |
263 visibleMemberMaps[VisibleMemberMap.METHODS]); |
274 VisibleMemberMap visibleMemberMap = |
264 } |
275 visibleMemberMaps[VisibleMemberMap.METHODS]; |
265 |
276 addSummary(writer, visibleMemberMap, true, memberSummaryTree); |
266 /** |
277 } |
267 * Build the inherited method summary. |
278 |
268 */ |
279 /** |
269 public void buildMethodsInheritedSummary(XMLNode node) { |
280 * Build the constructor summary. |
270 buildInheritedSummary( |
281 * |
271 memberSummaryWriters[VisibleMemberMap.METHODS], |
282 * @param node the XML element that specifies which components to document |
272 visibleMemberMaps[VisibleMemberMap.METHODS]); |
283 * @param memberSummaryTree the content tree to which the documentation will be added |
273 } |
284 */ |
274 |
285 public void buildConstructorsSummary(XMLNode node, Content memberSummaryTree) { |
275 /** |
286 MemberSummaryWriter writer = |
276 * Build the constructor summary. |
287 memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS]; |
277 */ |
288 VisibleMemberMap visibleMemberMap = |
278 public void buildConstructorsSummary(XMLNode node) { |
289 visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS]; |
279 buildSummary( |
290 addSummary(writer, visibleMemberMap, false, memberSummaryTree); |
280 memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS], |
291 } |
281 visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS]); |
292 |
282 } |
293 /** |
283 |
294 * Build the member summary for the given members. |
284 /** |
295 * |
285 * Build the member summary for the given members. |
296 * @param writer the summary writer to write the output. |
286 * |
297 * @param visibleMemberMap the given members to summarize. |
287 * @param writer the summary writer to write the output. |
298 * @param summaryTreeList list of content trees to which the documentation will be added |
288 * @param visibleMemberMap the given members to summarize. |
299 */ |
289 */ |
300 private void buildSummary(MemberSummaryWriter writer, |
290 private void buildSummary(MemberSummaryWriter writer, |
301 VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) { |
291 VisibleMemberMap visibleMemberMap) { |
|
292 List<ProgramElementDoc> members = new ArrayList<ProgramElementDoc>(visibleMemberMap.getLeafClassMembers( |
302 List<ProgramElementDoc> members = new ArrayList<ProgramElementDoc>(visibleMemberMap.getLeafClassMembers( |
293 configuration)); |
303 configuration)); |
294 if (members.size() > 0) { |
304 if (members.size() > 0) { |
295 Collections.sort(members); |
305 Collections.sort(members); |
296 writer.writeMemberSummaryHeader(classDoc); |
306 Content tableTree = writer.getSummaryTableTree(classDoc); |
297 for (int i = 0; i < members.size(); i++) { |
307 for (int i = 0; i < members.size(); i++) { |
298 ProgramElementDoc member = members.get(i); |
308 ProgramElementDoc member = members.get(i); |
299 Tag[] firstSentenceTags = member.firstSentenceTags(); |
309 Tag[] firstSentenceTags = member.firstSentenceTags(); |
300 if (member instanceof MethodDoc && firstSentenceTags.length == 0) { |
310 if (member instanceof MethodDoc && firstSentenceTags.length == 0) { |
301 //Inherit comments from overriden or implemented method if |
311 //Inherit comments from overriden or implemented method if |
302 //necessary. |
312 //necessary. |
303 DocFinder.Output inheritedDoc = |
313 DocFinder.Output inheritedDoc = |
304 DocFinder.search(new DocFinder.Input((MethodDoc) member)); |
314 DocFinder.search(new DocFinder.Input((MethodDoc) member)); |
305 if (inheritedDoc.holder != null && |
315 if (inheritedDoc.holder != null && |
306 inheritedDoc.holder.firstSentenceTags().length > 0) { |
316 inheritedDoc.holder.firstSentenceTags().length > 0) { |
307 firstSentenceTags = inheritedDoc.holder.firstSentenceTags(); |
317 firstSentenceTags = inheritedDoc.holder.firstSentenceTags(); |
308 } |
318 } |
309 } |
319 } |
310 writer.writeMemberSummary(classDoc, member, firstSentenceTags, |
320 writer.addMemberSummary(classDoc, member, firstSentenceTags, tableTree, i); |
311 i == 0, i == members.size() - 1); |
321 } |
312 } |
322 summaryTreeList.add(tableTree); |
313 writer.writeMemberSummaryFooter(classDoc); |
323 } |
314 } |
324 } |
315 } |
|
316 |
325 |
317 /** |
326 /** |
318 * Build the inherited member summary for the given methods. |
327 * Build the inherited member summary for the given methods. |
319 * |
328 * |
320 * @param writer the writer for this member summary. |
329 * @param writer the writer for this member summary. |
321 * @param visibleMemberMap the map for the members to document. |
330 * @param visibleMemberMap the map for the members to document. |
322 */ |
331 * @param summaryTreeList list of content trees to which the documentation will be added |
323 private void buildInheritedSummary(MemberSummaryWriter writer, |
332 */ |
324 VisibleMemberMap visibleMemberMap) { |
333 private void buildInheritedSummary(MemberSummaryWriter writer, |
|
334 VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) { |
325 for (Iterator<ClassDoc> iter = visibleMemberMap.getVisibleClassesList().iterator(); |
335 for (Iterator<ClassDoc> iter = visibleMemberMap.getVisibleClassesList().iterator(); |
326 iter.hasNext();) { |
336 iter.hasNext();) { |
327 ClassDoc inhclass = iter.next(); |
337 ClassDoc inhclass = iter.next(); |
328 if (! (inhclass.isPublic() || |
338 if (! (inhclass.isPublic() || |
329 Util.isLinkable(inhclass, configuration))) { |
339 Util.isLinkable(inhclass, configuration))) { |
330 continue; |
340 continue; |
331 } |
341 } |
332 if (inhclass == classDoc) { |
342 if (inhclass == classDoc) { |
333 continue; |
343 continue; |
334 } |
344 } |
335 List<ProgramElementDoc> inhmembers = visibleMemberMap.getMembersFor(inhclass); |
345 List<ProgramElementDoc> inhmembers = visibleMemberMap.getMembersFor(inhclass); |
336 if (inhmembers.size() > 0) { |
346 if (inhmembers.size() > 0) { |
337 Collections.sort(inhmembers); |
347 Collections.sort(inhmembers); |
338 writer.writeInheritedMemberSummaryHeader(inhclass); |
348 Content inheritedTree = writer.getInheritedSummaryHeader(inhclass); |
|
349 Content linksTree = writer.getInheritedSummaryLinksTree(); |
339 for (int j = 0; j < inhmembers.size(); ++j) { |
350 for (int j = 0; j < inhmembers.size(); ++j) { |
340 writer.writeInheritedMemberSummary( |
351 writer.addInheritedMemberSummary( |
341 inhclass.isPackagePrivate() && |
352 inhclass.isPackagePrivate() && |
342 ! Util.isLinkable(inhclass, configuration) ? |
353 ! Util.isLinkable(inhclass, configuration) ? |
343 classDoc : inhclass, |
354 classDoc : inhclass, |
344 inhmembers.get(j), |
355 inhmembers.get(j), |
345 j == 0, |
356 j == 0, |
346 j == inhmembers.size() - 1); |
357 j == inhmembers.size() - 1, linksTree); |
347 } |
358 } |
348 writer.writeInheritedMemberSummaryFooter(inhclass); |
359 inheritedTree.addContent(linksTree); |
349 } |
360 summaryTreeList.add(writer.getMemberTree(inheritedTree)); |
|
361 } |
|
362 } |
|
363 } |
|
364 |
|
365 /** |
|
366 * Add the summary for the documentation. |
|
367 * |
|
368 * @param writer the writer for this member summary. |
|
369 * @param visibleMemberMap the map for the members to document. |
|
370 * @param showInheritedSummary true if inherited summary should be documented |
|
371 * @param memberSummaryTree the content tree to which the documentation will be added |
|
372 */ |
|
373 private void addSummary(MemberSummaryWriter writer, |
|
374 VisibleMemberMap visibleMemberMap, boolean showInheritedSummary, |
|
375 Content memberSummaryTree) { |
|
376 LinkedList<Content> summaryTreeList = new LinkedList<Content>(); |
|
377 buildSummary(writer, visibleMemberMap, summaryTreeList); |
|
378 if (showInheritedSummary) |
|
379 buildInheritedSummary(writer, visibleMemberMap, summaryTreeList); |
|
380 if (!summaryTreeList.isEmpty()) { |
|
381 Content memberTree = writer.getMemberSummaryHeader( |
|
382 classDoc, memberSummaryTree); |
|
383 for (int i = 0; i < summaryTreeList.size(); i++) { |
|
384 memberTree.addContent(summaryTreeList.get(i)); |
|
385 } |
|
386 memberSummaryTree.addContent(writer.getMemberTree(memberTree)); |
350 } |
387 } |
351 } |
388 } |
352 } |
389 } |