1 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 ; 32 import java.util.Collections ; 33 import java.util.HashSet ; 34 import java.util.Iterator ; 35 import java.util.List ; 36 import java.util.Set ; 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 where(ProgramElementDoc member) { 53 ExecutableMemberDoc emd = (ExecutableMemberDoc)member; 54 return emd.name() + emd.signature(); 55 } 56 57 protected String 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 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 set = new HashSet (); 88 for (int i = 0; i < advice.length; i++) { 89 set.add(advice[i]); 90 } 91 List list = new ArrayList (set); 92 Collections.sort(list); 93 for (Iterator 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 cds = new HashSet (); 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 list = new ArrayList (cds); 121 Collections.sort(list); 122 for (Iterator 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 |