From 930c1d3b842f3bccbc6d434907608bdc5d04a63f Mon Sep 17 00:00:00 2001 From: aclement Date: Wed, 21 Dec 2005 09:20:01 +0000 Subject: ajdoc: fixes from Helen for 119453 --- .../src/org/aspectj/tools/ajdoc/HtmlDecorator.java | 121 +++++++++++++++++++-- .../src/org/aspectj/tools/ajdoc/StructureUtil.java | 21 +++- 2 files changed, 130 insertions(+), 12 deletions(-) (limited to 'ajdoc/src') diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java b/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java index 8752d2e24..c43e78f64 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java @@ -41,6 +41,10 @@ class HtmlDecorator { private static final String ADVICE_SUMMARY = "Advice Summary"; private static final String POINTCUT_SUMMARY = "Pointcut Summary"; private static final String DECLARE_SUMMARY = "Declare Summary"; + private static final String ITD_METHOD_SUMMARY = "Inter-Type Method Summary"; + private static final String ITD_FIELD_SUMMARY = "Inter-Type Field Summary"; + private static final String ITD_CONSTRUCTOR_SUMMARY = "Inter-Type Constructor Summary"; + static List visibleFileList = new ArrayList(); static Hashtable declIDTable = null; static SymbolManager symbolManager = null; @@ -233,6 +237,18 @@ class HtmlDecorator { List pointcuts = new ArrayList(); List advice = new ArrayList(); List declares = new ArrayList(); + List methodsDeclaredOn = StructureUtil.getDeclareInterTypeTargets(node, IProgramElement.Kind.INTER_TYPE_METHOD); + if (methodsDeclaredOn != null && !methodsDeclaredOn.isEmpty()) { + insertDeclarationsSummary(fileBuffer,methodsDeclaredOn,ITD_METHOD_SUMMARY,index); + } + List fieldsDeclaredOn = StructureUtil.getDeclareInterTypeTargets(node, IProgramElement.Kind.INTER_TYPE_FIELD); + if (fieldsDeclaredOn != null && !fieldsDeclaredOn.isEmpty()) { + insertDeclarationsSummary(fileBuffer,fieldsDeclaredOn,ITD_FIELD_SUMMARY,index); + } + List constDeclaredOn = StructureUtil.getDeclareInterTypeTargets(node, IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR); + if (fieldsDeclaredOn != null && !constDeclaredOn.isEmpty()) { + insertDeclarationsSummary(fileBuffer,constDeclaredOn,ITD_CONSTRUCTOR_SUMMARY,index); + } for (Iterator it = node.getChildren().iterator(); it.hasNext(); ) { IProgramElement member = (IProgramElement)it.next(); if (member.getKind().equals(IProgramElement.Kind.POINTCUT)) { @@ -301,7 +317,7 @@ class HtmlDecorator { entry += "" + "" + - "" + generateAdviceSignatures(decl) + + "" + generateSignatures(decl) + "
 "; if (!comment.equals("")) { entry += comment + "

"; @@ -327,15 +343,35 @@ class HtmlDecorator { else if ( kind.equals( DECLARE_SUMMARY ) ) { entry += "" + - "" + decl.getModifiers() + "" + + "" + + generateModifierInformation(decl,false) + + "" + "" + "" + "" + "" + decl.toLabelString() + "

" + - generateIntroductionSignatures(decl, true) + generateAffects(decl, true); } - + else if ( kind.equals( ITD_FIELD_SUMMARY ) + || kind.equals( ITD_METHOD_SUMMARY)) { + entry += + "" + + "" + + generateModifierInformation(decl,false) + + "" + + "" + + "" + + "" + + "" + decl.toLabelString() + "

"+ + generateDeclaredBy(decl); + } + else if ( kind.equals( ITD_CONSTRUCTOR_SUMMARY ) ) { + entry +="" + + "" + + "" + decl.toLabelString() + "

"+ + generateDeclaredBy(decl); + } + // insert the entry fileBuffer.insert(insertIndex, entry); insertIndex += entry.length(); @@ -406,7 +442,7 @@ class HtmlDecorator { entry += "

" + decl.getName() + "

"; entry += "" + - generateAdviceSignatures(decl) + "\n" + "

" + + generateSignatures(decl) + "\n" + "

" + generateDetailsComment(decl) + "

" + generateAffects(decl, false); } @@ -418,9 +454,14 @@ class HtmlDecorator { generateDetailsComment(decl); } else if (kind.equals(DECLARE_DETAIL)) { - entry += "

declare " + decl.toLabelString() + "

"; - entry += - generateIntroductionSignatures(decl, true) + + entry += "

" + decl.toLabelString() + + "

" + + generateModifierInformation(decl,true); + if (!decl.getKind().equals(IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR)) { + entry += "  "; + } + entry += generateSignatures(decl) + + "

" + generateAffects(decl, true) + generateDetailsComment(decl); } @@ -530,6 +571,43 @@ class HtmlDecorator { } } + /** + * pr119453 - adding "declared by" relationship + */ + static String generateDeclaredBy(IProgramElement decl) { + String entry = "" + + "
" + + " Declared by:"; + + String relativePackagePath = + getRelativePathFromHere( + decl.getPackageName().replace('.', '/') + Config.DIR_SEP_CHAR); + + if (decl != null && !StructureUtil.isAnonymous(decl.getParent())) { + String packagePath = ""; + if (decl.getPackageName() != null && !decl.getPackageName().equals("")) { + packagePath = decl.getPackageName().replace('.', '/') + Config.DIR_SEP_CHAR; + } + + String typeSignature = constructNestedTypeName(decl); + + String hrefName = packagePath + typeSignature; + + // The hrefLink needs to just be the corresponding aspect + String hrefLink = + relativePackagePath + + packagePath + + typeSignature + + ".html"; + + entry += "" + hrefName.replace('/', '.') + ""; // !!! don't replace + } + entry += "
\n\n"; + return entry; + } + + /** * TODO: probably want to make this the same for intros and advice. */ @@ -545,7 +623,7 @@ class HtmlDecorator { if (!isIntroduction) { entry += " Advises:"; } else { - entry += " Affects:"; + entry += " Declared on:"; } String relativePackagePath = @@ -617,6 +695,29 @@ class HtmlDecorator { return result.toString(); } + /** + * Generate the "public int"-type information about the given IProgramElement. + * Used when dealing with ITDs. To mirror the behaviour of methods and fields + * in classes, if we're generating the summary information we don't want to + * include "public" if the accessibility of the IProgramElement is public. + * + */ + private static String generateModifierInformation(IProgramElement decl, boolean isDetails) { + String intro = ""; + if (isDetails || + !decl.getAccessibility().equals(IProgramElement.Accessibility.PUBLIC)) { + intro += "" + decl.getAccessibility().toString() + " " ; + } + if (decl.getKind().equals(IProgramElement.Kind.INTER_TYPE_FIELD)) { + return intro + decl.getCorrespondingType() + ""; + } else if (decl.getKind().equals(IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR) + && isDetails) { + return intro + ""; + } else { + return intro + decl.getCorrespondingType(true) + ""; + } + } + static String generateIntroductionSignatures(IProgramElement decl, boolean isDetails) { return ""; // Declaration[] decls = decl.getDeclarations(); @@ -639,7 +740,7 @@ class HtmlDecorator { // return entry; } - static String generateAdviceSignatures(IProgramElement decl ) { + static String generateSignatures(IProgramElement decl ) { return "" + decl.toLabelString() + ""; } diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java b/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java index 4dfed08a3..42568837b 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/StructureUtil.java @@ -12,6 +12,7 @@ package org.aspectj.tools.ajdoc; import java.io.File; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -28,7 +29,7 @@ public class StructureUtil { /** * @return null if a relationship of that kind is not found */ - public static List/*IProgramElement*/ getTargets(IProgramElement node, IRelationship.Kind kind) { + public static List /*String*/ getTargets(IProgramElement node, IRelationship.Kind kind) { List relations = AsmManager.getDefault().getRelationshipMap().get(node); List targets = null; if (relations == null) return null; @@ -40,8 +41,24 @@ public class StructureUtil { } return targets; } + + static List /*IProgramElement */ getDeclareInterTypeTargets(IProgramElement node, IProgramElement.Kind kind) { + List targets = new ArrayList(); + List stringTargets = StructureUtil.getTargets(node,IRelationship.Kind.DECLARE_INTER_TYPE); + if (stringTargets == null) { + return null; + } + for (Iterator iter = stringTargets.iterator(); iter.hasNext();) { + String element = (String) iter.next(); + IProgramElement ipe = AsmManager.getDefault().getHierarchy().findElementForHandle(element); + if (ipe != null && ipe.getKind().equals(kind)) { + targets.add(ipe); + } + } + return targets; + } - public static List/*IProgramElement*/ getDeclareTargets(IProgramElement node) { + public static List/*String*/ getDeclareTargets(IProgramElement node) { List relations = AsmManager.getDefault().getRelationshipMap().get(node); List targets = null; if (relations == null) return null; -- cgit v1.2.3