KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > tools > doclets > standard > ExecutableMemberSubWriter


1 /* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the debugger and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  */

22 package org.aspectj.tools.doclets.standard;
23
24 import org.aspectj.ajdoc.AdviceDoc;
25 import org.aspectj.ajdoc.IntroducedDoc;
26
27 import com.sun.javadoc.ClassDoc;
28 import com.sun.javadoc.ExecutableMemberDoc;
29 import com.sun.javadoc.ProgramElementDoc;
30
31 import java.util.ArrayList JavaDoc;
32 import java.util.Collections JavaDoc;
33 import java.util.HashSet JavaDoc;
34 import java.util.Iterator JavaDoc;
35 import java.util.List JavaDoc;
36 import java.util.Set JavaDoc;
37
38 public abstract class ExecutableMemberSubWriter extends AbstractSubWriter {
39     public ExecutableMemberSubWriter
40         (com.sun.tools.doclets.standard.SubWriterHolderWriter writer,
41          ClassDoc classdoc)
42     {
43         super(writer, classdoc);
44     }
45     
46     public ExecutableMemberSubWriter
47         (com.sun.tools.doclets.standard.SubWriterHolderWriter writer)
48     {
49         super(writer);
50     }
51
52     protected String JavaDoc where(ProgramElementDoc member) {
53         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
54         return emd.name() + emd.signature();
55     }
56
57     protected String JavaDoc label(ExecutableMemberDoc emd) {
58         return emd.qualifiedName() + emd.flatSignature();
59     }
60
61     public void printIntroducedSummaryLink(ClassDoc cd,
62                                            ProgramElementDoc member) {
63         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
64     writer.printClassLink(cd, where(emd), emd.name(), false);
65     }
66
67     public void printCrosscuts(ClassDoc cd, ProgramElementDoc member) {
68         org.aspectj.ajdoc.ExecutableMemberDoc emd =
69             (org.aspectj.ajdoc.ExecutableMemberDoc)member;
70         
71         IntroducedDoc intro = emd.introduced();
72         if (intro != null) {
73             writer.dt();
74             writer.boldText("doclet.Introduced_from");
75             writer.dd();
76             org.aspectj.ajdoc.MemberDoc otherMember =
77                 (org.aspectj.ajdoc.MemberDoc)intro.member();
78             String JavaDoc name = where(otherMember);
79             ClassDoc containing = intro.containingClass();
80             writer.printClassLink(containing, name,
81                                   containing.typeName(), false);
82         }
83         
84         AdviceDoc[] advice = emd.advice();
85         if (advice.length > 0) {
86             writer.boldText("doclet.Crosscut_by");
87             Set JavaDoc set = new HashSet JavaDoc();
88             for (int i = 0; i < advice.length; i++) {
89                 set.add(advice[i]);
90             }
91             List JavaDoc list = new ArrayList JavaDoc(set);
92             Collections.sort(list);
93             for (Iterator JavaDoc i = list.iterator(); i.hasNext();) {
94                 writer.dd();
95                 writer.code();
96                 AdviceDoc ad = (AdviceDoc)i.next();
97                 writer.printClassLink(ad.containingClass(),
98                                       AdviceSubWriter.getWhere
99                                       (ad.containingClass(), ad),
100                                       label(ad));
101                 print(" in ");
102                 writer.printClassLink(ad.containingClass());
103                 writer.codeEnd();
104                 print('.');
105             }
106         }
107     }
108     
109     public void printSummaryCrosscuts(ClassDoc cd,
110                                       ProgramElementDoc member) {
111         Set JavaDoc cds = new HashSet JavaDoc();
112         org.aspectj.ajdoc.ExecutableMemberDoc emd =
113             (org.aspectj.ajdoc.ExecutableMemberDoc)member;
114         AdviceDoc[] advice = emd.advice();
115         for (int i = 0; i < advice.length; i++) {
116             cds.add(advice[i].containingClass());
117         }
118         if (cds.size() > 0) {
119             writer.boldText("doclet.Advised_by");
120             List JavaDoc list = new ArrayList JavaDoc(cds);
121             Collections.sort(list);
122             for (Iterator JavaDoc i = list.iterator(); i.hasNext();) {
123                 print(' ');
124                 ClassDoc cdoc = (ClassDoc)i.next();
125                 writer.printClassLink(cdoc, "advice_detail", cdoc.name());
126                 if (i.hasNext()) print(",");
127             }
128         }
129     }
130
131     public boolean hasCrosscuts(ClassDoc classDoc,
132                                 ProgramElementDoc member) {
133         org.aspectj.ajdoc.ExecutableMemberDoc emd =
134             (org.aspectj.ajdoc.ExecutableMemberDoc)member;
135         return emd.introduced() != null || emd.advice().length > 0;
136     }
137 }
138     
139     
140
Popular Tags