You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ExecutableMemberSubWriter.java 5.0KB

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