aboutsummaryrefslogtreecommitdiffstats
path: root/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassWriter.java
diff options
context:
space:
mode:
Diffstat (limited to 'aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassWriter.java')
-rw-r--r--aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassWriter.java554
1 files changed, 0 insertions, 554 deletions
diff --git a/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassWriter.java b/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassWriter.java
deleted file mode 100644
index 7ae643524..000000000
--- a/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassWriter.java
+++ /dev/null
@@ -1,554 +0,0 @@
-/* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This file is part of the debugger and core tools for the AspectJ(tm)
- * programming language; see http://aspectj.org
- *
- * The contents of this file are subject to the Mozilla Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is AspectJ.
- *
- * The Initial Developer of the Original Code is Xerox Corporation. Portions
- * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
- * All Rights Reserved.
- */
-package org.aspectj.tools.doclets.standard;
-
-import org.aspectj.ajdoc.AdviceDoc;
-import org.aspectj.ajdoc.AspectDoc;
-import org.aspectj.ajdoc.IntroducedDoc;
-import org.aspectj.ajdoc.IntroducedSuperDoc;
-import org.aspectj.ajdoc.IntroductionDoc;
-import org.aspectj.ajdoc.OfClauseDoc;
-import org.aspectj.ajdoc.OfEachObjectDoc;
-
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.ExecutableMemberDoc;
-import com.sun.javadoc.MemberDoc;
-import com.sun.tools.doclets.ClassTree;
-import com.sun.tools.doclets.DirectoryManager;
-import com.sun.tools.doclets.DocletAbortException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-public class ClassWriter extends com.sun.tools.doclets.standard.ClassWriter {
-
- /**
- * The MethodSubWriter that prints out the methods
- * of <code>classdoc</code>.
- */
- protected MethodSubWriter ourMethodSubWriter;
-
- /**
- * The ConstructorSubWriter that prints out the constructors
- * of <code>classdoc</code>.
- */
- protected ConstructorSubWriter ourConstrSubWriter;
-
- /**
- * The FieldSubWriter that prints out the fields
- * of <code>classdoc</code>.
- */
- protected FieldSubWriter ourFieldSubWriter;
-
- /**
- * The ClassSubWriter that prints out the classs
- * of <code>classdoc</code>.
- */
- protected ClassSubWriter ourInnerSubWriter;
-
- /**
- * The PointcutSubWriter that prints out the pointcuts
- * of <code>classdoc</code>.
- */
- protected PointcutSubWriter pointcutSubWriter = null;
-
- /**
- * The SuperIntroductionSubWriter that prints out the superintroductions
- * of <code>classdoc</code>.
- */
- protected SuperIntroductionSubWriter superIntroductionSubWriter = null;
-
- /**
- * The FieldIntroductionSubWriter that prints out the fieldintroductions
- * of <code>classdoc</code>.
- */
- protected FieldIntroductionSubWriter fieldIntroductionSubWriter = null;
-
- /**
- * The ConstructorIntroductionSubWriter that prints out the constructorintroductions
- * of <code>classdoc</code>.
- */
- protected ConstructorIntroductionSubWriter constrIntroductionSubWriter = null;
-
- /**
- * The MethodIntroductionSubWriter that prints out the methodintroductions
- * of <code>classdoc</code>.
- */
- protected MethodIntroductionSubWriter methodIntroductionSubWriter = null;
-
- /**
- * The AdviceSubWriter that prints out the advices
- * of <code>classdoc</code>.
- */
- protected AdviceSubWriter adviceSubWriter = null;
-
-
- /**
- * Construct a ClassWriter from the passed in arguments. This
- * will instantiate the subwriters to be used.
- *
- * @param path the path directory of the html file to generate.
- * @param filename the html file to generate.
- * @param classdoc the ClassDoc for which this file will
- * be generated.
- * @param prev the ClassDoc preceding <code>classdoc</code>
- * in order of generation.
- * @param next the ClassDoc following <code>classdoc</code>
- * in order of generation.
- * @param classtree the ClassTree to use.
- * @param nopackage whether this <code>classdoc</code>'s package
- * is specified to be documented.
- */
- public ClassWriter(String path,
- String filename,
- ClassDoc classdoc,
- ClassDoc prev,
- ClassDoc next,
- ClassTree classtree,
- boolean nopackage)
- throws IOException, DocletAbortException {
-
- super(path, filename, classdoc, prev,
- next, classtree, nopackage);
-
- // Construct the subwriters just for ClassDocs
- // We want our superclass to delegate to our subwriters delegate,
- // but we want to call our subwriters. So we set our superclasses
- // subwriters to our subwriters delegates.
- ourMethodSubWriter = new MethodSubWriter(this, classdoc);
- methodSubWriter = (com.sun.tools.doclets.standard.MethodSubWriter)
- ourMethodSubWriter.del();
- constrSubWriter = (com.sun.tools.doclets.standard.ConstructorSubWriter)
- (ourConstrSubWriter = new ConstructorSubWriter(this, classdoc)).del();
- fieldSubWriter = (com.sun.tools.doclets.standard.FieldSubWriter)
- (ourFieldSubWriter = new FieldSubWriter(this, classdoc)).del();
- innerSubWriter = (com.sun.tools.doclets.standard.ClassSubWriter)
- (ourInnerSubWriter = new ClassSubWriter(this, classdoc)).del();
-
- if (classdoc instanceof org.aspectj.ajdoc.ClassDoc) {
- pointcutSubWriter =
- new PointcutSubWriter(this, (org.aspectj.ajdoc.ClassDoc)classdoc);
- }
-
- // If we've been passed an AspectDoc, create the AspectJ-specfic
- // subwriters
- if (classdoc instanceof AspectDoc) {
- AspectDoc ad = (AspectDoc)classdoc;
- superIntroductionSubWriter = new SuperIntroductionSubWriter(this, ad);
- fieldIntroductionSubWriter = new FieldIntroductionSubWriter(this, ad);
- constrIntroductionSubWriter = new ConstructorIntroductionSubWriter(this, ad);
- methodIntroductionSubWriter = new MethodIntroductionSubWriter(this, ad);
- adviceSubWriter = new AdviceSubWriter(this, ad);
- }
- }
-
- public static void generate(ClassDoc classdoc,
- ClassDoc prev,
- ClassDoc next,
- ClassTree classtree,
- boolean nopackage)
- throws DocletAbortException {
- ClassWriter cw = null;
- String path = DirectoryManager.getDirectoryPath
- (classdoc.containingPackage());
- String filename = classdoc.name() + ".html";
- try {
- (cw = new ClassWriter(path, filename, classdoc,
- prev, next, classtree, nopackage)).
- generateClassFile();
- } catch (IOException e) {
- Standard.configuration().standardmessage.
- error("doclet.exception_encountered", e+"", filename);
- throw new DocletAbortException();
- } finally {
- if (cw != null) cw.close();
- }
- }
-
- /**
- * Prints the header of the class -- which is one
- * of <code>class</code>, <code>interface</code> or
- * <code>aspect</code> with the name <code>title</code>.
- *
- * @param title the name of the class.
- */
- public void printHeader(String title) {
- int ispace = title.indexOf(' ');
- if (ispace != -1) {
- title = Statics.type(classdoc) + title.substring(ispace);
- }
- super.printHeader(title);
- }
-
- /*
- * This is set up to intercept calls to print out
- * the correct type of classdoc before we automatically
- * print 'class' or 'interface'.
- */
-
- private boolean h2warn = false;
-
- /**
- * If we've started to print a h2 heading, we're
- * printing the name of the class so get ready to
- * to intercept the call.
- */
- public void h2() {
- h2warn = true;
- super.h2();
- }
-
- /**
- * After printing the class declaration with the h2 heading
- * turn off the h2 warning.
- */
- public void h2End() {
- h2warn = false;
- super.h2End();
- }
-
- /**
- * This is where we intercept the call to print so
- * we can print the correct type.
- */
- public void print(String str) {
- if (h2warn) {
- int ispace = str.indexOf(' ');
- if (ispace != -1 && str.charAt(0) == 'C') {
- str = Statics.type(classdoc) + str.substring(ispace);
- }
- }
- super.print(str);
- }
-
- /**
- * Print the members summary for our AspectJ subwriters.
- */
- protected void printAspectJSummary() {
- printMembersSummary(superIntroductionSubWriter);
- printMembersSummary(fieldIntroductionSubWriter);
- printMembersSummary(constrIntroductionSubWriter);
- printMembersSummary(methodIntroductionSubWriter);
- printMembersSummary(pointcutSubWriter);
- printMembersSummary(adviceSubWriter);
- }
-
- /**
- * Formats the output correctly for a member summary.
- *
- * @param mw the AbstractSubWriter to use.
- */
- protected final void printMembersSummary(AbstractSubWriter mw) {
- if (mw != null) {
- println();
- println("<!-- === " + getText(mw.navKey()) + " SUMMARY === -->");
- println();
- mw.printMembersSummary();
- }
- }
-
- /**
- * Print the members detail for our AspectJ subwriters.
- */
- protected void printAspectJDetail() {
- printMembersDetail(superIntroductionSubWriter);
- printMembersDetail(fieldIntroductionSubWriter);
- printMembersDetail(constrIntroductionSubWriter);
- printMembersDetail(methodIntroductionSubWriter);
- printMembersDetail(pointcutSubWriter);
- printMembersDetail(adviceSubWriter);
- }
-
- /**
- * Formats the output correctly for a member detail.
- *
- * @param mw the AbstractSubWriter to use.
- */
- protected final void printMembersDetail(AbstractSubWriter mw) {
- if (mw != null) {
- println("<!-- ===" + getText(mw.navKey()) + " DETAIL === -->");
- println();
- mw.printMembers();
- println();
- }
- }
-
- //TODO: Just need to make sure 'aspect; shows up and
- //TODO not 'class'
- protected void printClassDescription() {
- boolean isInterface = classdoc.isInterface();
- boolean isAspect = classdoc instanceof AspectDoc;
- dl();
- dt();
-
- print(classdoc.modifiers() + " ");
-
- if (!isInterface) {
- print(isAspect ? "aspect " : "class ");
- }
- bold(classdoc.name());
-
- if (!isInterface) {
- ClassDoc superclass = classdoc.superclass();
- if (superclass != null) {
- dt();
- print("extends ");
- printClassLink(superclass);
- printIntroducedSuper(superclass);
- }
- }
-
- ClassDoc[] implIntfacs = classdoc.interfaces();
- if (implIntfacs != null && implIntfacs.length > 0) {
- dt();
- print(isInterface? "extends " : "implements ");
- for (int i = 0; i < implIntfacs.length; i++) {
- if (i > 0) print(", ");
- printClassLink(implIntfacs[i]);
- printIntroducedSuper(implIntfacs[i]);
- }
- }
- if (isAspect) {
- AspectDoc ad = (AspectDoc)classdoc;
- OfClauseDoc ofClause = ad.ofClause();
- if (ofClause != null) {
- dt();
- if (ofClause.kind() == OfClauseDoc.Kind.EACH_CFLOW) {
- print("percflow(..)");
- } else if (ofClause.kind() == OfClauseDoc.Kind.EACH_JVM) {
- print("issingleton()");
- } else if (ofClause.kind() == OfClauseDoc.Kind.EACH_OBJECT) {
- print("pertarget(");
- printClassLinks(((OfEachObjectDoc)ofClause).instances());
- print(")");
- }
- }
- AspectDoc[] dominatees = ad.dominatees();
- if (dominatees != null && dominatees.length > 0) {
- dt();
- print("dominates ");
- printClassLinks(dominatees);
- }
- AspectDoc[] dominators = ad.dominators();
- if (dominators != null && dominators.length > 0) {
- dt();
- print("dominated by ");
- printClassLinks(dominators);
- }
- }
- dlEnd();
- }
-
- /**
- * Prints a list of class links separated by commas.
- *
- * @param cds array of ClassDoc to be printed.
- */
- protected void printClassLinks(ClassDoc[] cds) {
- if (cds == null || cds.length < 1) return;
- for (int i = 0; i < cds.length; i++) {
- if (i > 0) print(", ");
- if (cds[i] != null) {
- printClassLink(cds[i]);
- }
- }
- }
-
- /**
- * Prints information about <code>classdoc</code>'s type introduction
- * if <code>cd</code>'s type was introduced onto <code>classdoc</code>.
- *
- * @param cd the ClassDoc being printed.
- */
- protected void printIntroducedSuper(ClassDoc cd) {
- IntroducedSuperDoc[] intros =
- ((org.aspectj.ajdoc.ClassDoc)classdoc).introducers();
- if (null != intros) {
- for (int i = 0; i < intros.length; i++) {
- IntroducedSuperDoc intro = intros[i];
- org.aspectj.ajdoc.Type[] types = intro.types();
- for (int j = 0; j < types.length; j++) {
- if (types[j].equals(cd)) {
- print(' ');
- printText("doclet.by_parens",
- getClassLink
- (intro.containingClass(),
- superIntroductionSubWriter.link(intro),
- "introduced"),
- getClassLink(intro.containingClass()));
- break;
- }
- }
- }
- }
- }
-
- /**
- * Print the navSummaryLink for all the AspectJ subwriters.
- */
- protected void navAspectJSummaryLinks() {
- navSummaryLink(superIntroductionSubWriter);
- navSummaryLink(fieldIntroductionSubWriter);
- navSummaryLink(constrIntroductionSubWriter);
- navSummaryLink(methodIntroductionSubWriter);
- navSummaryLink(pointcutSubWriter);
- navSummaryLink(adviceSubWriter);
- }
-
- /**
- * Prints the navSummaryLink correctly.
- *
- * @param mw AbstractSubWriter to invoke.
- */
- protected final void navSummaryLink(AbstractSubWriter mw) {
- if (mw != null) {
- mw.navSummaryLink();
- _navGap();
- }
- }
-
- /**
- * Print the navDetailLink for all the AspectJ subwriters.
- */
- protected void navAspectJDetailLinks() {
- navDetailLink(superIntroductionSubWriter);
- navDetailLink(fieldIntroductionSubWriter);
- navDetailLink(constrIntroductionSubWriter);
- navDetailLink(methodIntroductionSubWriter);
- navDetailLink(pointcutSubWriter);
- navDetailLink(adviceSubWriter);
- }
-
- /**
- * Prints the navDetailLink correctly.
- *
- * @param mw AbstractSubWriter to invoke.
- */
- protected final void navDetailLink(AbstractSubWriter mw) {
- if (mw != null) {
- mw.navDetailLink();
- _navGap();
- }
- }
-
- /*
- * A hack... I'll explain later, if you need to change
- * this mail jeffrey_palm@hotmail.com.
- */
-
- protected final void _navGap() { super.navGap(); }
-
- protected int navstate = 0;
- protected void navGap() {
- _navGap();
- if (navstate == 1) {
- navAspectJSummaryLinks();
- navstate++;
- } else if (navstate == 3) {
- navAspectJDetailLinks();
- navstate++;
- }
- }
-
- protected void printEnclosingClassInfo() {
- super.printEnclosingClassInfo();
- printAdvisorInfo();
- printAdviseeInfo();
- }
-
- protected void printAdviseeInfo() {
- if (!(classdoc instanceof AspectDoc)) return;
- AspectDoc ad = (AspectDoc)classdoc;
- Set set = new TreeSet();
- AdviceDoc[] as = ad.advice();
- if (as != null) {
- for (int i = 0; i < as.length; i++) {
- ExecutableMemberDoc[] crosscuts = as[i].crosscuts();
- if (null != crosscuts) {
- for (int j = 0; j < crosscuts.length; j++) {
- if (null != crosscuts[j]) {
- set.add(crosscuts[j].containingClass());
- }
- }
- }
- }
- }
- IntroductionDoc[] is = ad.introductions();
- if (null != is) {
- for (int i = 0 ; i < is.length; i++) {
- ClassDoc[] targets = is[i].targets();
- for (int j = 0; j < targets.length; j++) {
- set.add(targets[j]);
- }
- }
- printInfo(set, "doclet.All_Advisees");
- }
- }
-
- protected void printAdvisorInfo() {
- Set set = new TreeSet();
- set.addAll(advisors(classdoc.fields()));
- set.addAll(advisors(classdoc.methods()));
- set.addAll(advisors(classdoc.constructors()));
- printInfo(set, "doclet.All_Advisors");
- }
-
- protected void printInfo(Collection classdocs, String str) {
- if ((null != classdocs) && (classdocs.size() > 0)) {
- printInfoHeader();
- boldText(str);
- dd();
- for (Iterator i = classdocs.iterator(); i.hasNext();) {
- printClassLink((ClassDoc)i.next());
- if (i.hasNext()) print(", ");
- }
- ddEnd();
- dlEnd();
- }
- }
-
- protected final Collection advisors(final MemberDoc[] ms) {
- List list = new ArrayList();
- if (null != ms) {
- for (int i = 0 ; i < ms.length; i++) {
- IntroducedDoc id =
- ((org.aspectj.ajdoc.MemberDoc)ms[i]).introduced();
- if (id != null) list.add(id.containingClass());
- if (ms[i] instanceof org.aspectj.ajdoc.ExecutableMemberDoc) {
- AdviceDoc[] as =
- ((org.aspectj.ajdoc.ExecutableMemberDoc)ms[i]).advice();
- for (int j = 0; j < as.length; j++) {
- list.add(as[j].containingClass());
- }
- }
- }
- }
- return list;
- }
-}
-
-