diff options
-rw-r--r-- | org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.java | 70 | ||||
-rw-r--r-- | tests/bugs152/pr145963/AbstractAspect.aj | 10 | ||||
-rw-r--r-- | tests/bugs152/pr145963/AspectInDefaultPackage.aj | 18 | ||||
-rw-r--r-- | tests/bugs152/pr145963/C.java | 12 | ||||
-rw-r--r-- | tests/bugs152/pr145963/ConcreteAspect.aj | 17 | ||||
-rw-r--r-- | tests/bugs152/pr145963/README.txt | 16 | ||||
-rw-r--r-- | tests/bugs152/pr145963/SrcAspect.aj | 10 | ||||
-rw-r--r-- | tests/bugs152/pr145963/adviceLabels.jar | bin | 0 -> 1445 bytes | |||
-rw-r--r-- | tests/bugs152/pr145963/aspectInDefaultPackage.jar | bin | 0 -> 1473 bytes | |||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc152/CreatingModelForInjarTests.java | 43 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc152/injar.xml | 7 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/AsmRelationshipProvider.java | 3 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/AsmRelationshipUtils.java | 84 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/ShadowMunger.java | 54 |
14 files changed, 267 insertions, 77 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.java index 4f86ad97c..661aaaa28 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AsmElementFormatter.java @@ -34,16 +34,14 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeReference; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding; import org.aspectj.weaver.AdviceKind; +import org.aspectj.weaver.AsmRelationshipUtils; import org.aspectj.weaver.ResolvedType; import org.aspectj.weaver.UnresolvedType; -import org.aspectj.weaver.patterns.AndPointcut; import org.aspectj.weaver.patterns.DeclareAnnotation; import org.aspectj.weaver.patterns.DeclareErrorOrWarning; import org.aspectj.weaver.patterns.DeclareParents; import org.aspectj.weaver.patterns.DeclarePrecedence; import org.aspectj.weaver.patterns.DeclareSoft; -import org.aspectj.weaver.patterns.OrPointcut; -import org.aspectj.weaver.patterns.ReferencePointcut; import org.aspectj.weaver.patterns.TypePattern; import org.aspectj.weaver.patterns.TypePatternList; @@ -52,19 +50,6 @@ import org.aspectj.weaver.patterns.TypePatternList; */ public class AsmElementFormatter { - public static final String UNDEFINED="<undefined>"; - public static final String DECLARE_PRECEDENCE = "precedence"; - public static final String DECLARE_SOFT = "soft"; - public static final String DECLARE_PARENTS = "parents"; - public static final String DECLARE_WARNING = "warning"; - public static final String DECLARE_ERROR = "error"; - public static final String DECLARE_UNKNONWN = "<unknown declare>"; - public static final String POINTCUT_ABSTRACT = "<abstract pointcut>"; - public static final String POINTCUT_ANONYMOUS = "<anonymous pointcut>"; - public static final String DOUBLE_DOTS = ".."; - public static final int MAX_MESSAGE_LENGTH = 18; - public static final String DEC_LABEL = "declare"; - public void genLabelAndKind(MethodDeclaration methodDeclaration, IProgramElement node) { if (methodDeclaration instanceof AdviceDeclaration) { @@ -77,28 +62,9 @@ public class AsmElementFormatter { StringBuffer details = new StringBuffer(); if (ad.pointcutDesignator != null) { - if (ad.pointcutDesignator.getPointcut() instanceof ReferencePointcut) { - ReferencePointcut rp = (ReferencePointcut)ad.pointcutDesignator.getPointcut(); - details.append(rp.name).append(".."); - } else if (ad.pointcutDesignator.getPointcut() instanceof AndPointcut) { - AndPointcut ap = (AndPointcut)ad.pointcutDesignator.getPointcut(); - if (ap.getLeft() instanceof ReferencePointcut) { - details.append(ap.getLeft().toString()).append(DOUBLE_DOTS); - } else { - details.append(POINTCUT_ANONYMOUS).append(DOUBLE_DOTS); - } - } else if (ad.pointcutDesignator.getPointcut() instanceof OrPointcut) { - OrPointcut op = (OrPointcut)ad.pointcutDesignator.getPointcut(); - if (op.getLeft() instanceof ReferencePointcut) { - details.append(op.getLeft().toString()).append(DOUBLE_DOTS); - } else { - details.append(POINTCUT_ANONYMOUS).append(DOUBLE_DOTS); - } - } else { - details.append(POINTCUT_ANONYMOUS); - } + details.append(AsmRelationshipUtils.genPointcutDetails(ad.pointcutDesignator.getPointcut())); } else { - details.append(POINTCUT_ABSTRACT); + details.append(AsmRelationshipUtils.POINTCUT_ABSTRACT); } node.setName(ad.kind.toString()); //if (details.length()!=0) @@ -113,25 +79,25 @@ public class AsmElementFormatter { } else if (methodDeclaration instanceof DeclareDeclaration) { DeclareDeclaration declare = (DeclareDeclaration)methodDeclaration; - String name = DEC_LABEL + " "; + String name = AsmRelationshipUtils.DEC_LABEL + " "; if (declare.declareDecl instanceof DeclareErrorOrWarning) { DeclareErrorOrWarning deow = (DeclareErrorOrWarning)declare.declareDecl; if (deow.isError()) { node.setKind( IProgramElement.Kind.DECLARE_ERROR); - name += DECLARE_ERROR; + name += AsmRelationshipUtils.DECLARE_ERROR; } else { node.setKind( IProgramElement.Kind.DECLARE_WARNING); - name += DECLARE_WARNING; + name += AsmRelationshipUtils.DECLARE_WARNING; } node.setName(name) ; - node.setDetails("\"" + genDeclareMessage(deow.getMessage()) + "\""); + node.setDetails("\"" + AsmRelationshipUtils.genDeclareMessage(deow.getMessage()) + "\""); } else if (declare.declareDecl instanceof DeclareParents) { node.setKind( IProgramElement.Kind.DECLARE_PARENTS); DeclareParents dp = (DeclareParents)declare.declareDecl; - node.setName(name + DECLARE_PARENTS); + node.setName(name + AsmRelationshipUtils.DECLARE_PARENTS); String kindOfDP = null; StringBuffer details = new StringBuffer(""); @@ -161,13 +127,13 @@ public class AsmElementFormatter { } else if (declare.declareDecl instanceof DeclareSoft) { node.setKind( IProgramElement.Kind.DECLARE_SOFT); DeclareSoft ds = (DeclareSoft)declare.declareDecl; - node.setName(name + DECLARE_SOFT); + node.setName(name + AsmRelationshipUtils.DECLARE_SOFT); node.setDetails(genTypePatternLabel(ds.getException())); } else if (declare.declareDecl instanceof DeclarePrecedence) { node.setKind( IProgramElement.Kind.DECLARE_PRECEDENCE); DeclarePrecedence ds = (DeclarePrecedence)declare.declareDecl; - node.setName(name + DECLARE_PRECEDENCE); + node.setName(name + AsmRelationshipUtils.DECLARE_PRECEDENCE); node.setDetails(genPrecedenceListLabel(ds.getPatterns())); } else if (declare.declareDecl instanceof DeclareAnnotation) { @@ -188,7 +154,7 @@ public class AsmElementFormatter { } else { node.setKind(IProgramElement.Kind.ERROR); - node.setName(DECLARE_UNKNONWN); + node.setName(AsmRelationshipUtils.DECLARE_UNKNONWN); } } else if (methodDeclaration instanceof InterTypeDeclaration) { @@ -247,7 +213,7 @@ public class AsmElementFormatter { || "Lorg/aspectj/lang/annotation/Around;".equals(annotationSig)) { node.setKind(IProgramElement.Kind.ADVICE); //TODO AV - all are considered anonymous - is that ok? - node.setDetails(POINTCUT_ANONYMOUS); + node.setDetails(AsmRelationshipUtils.POINTCUT_ANONYMOUS); break; } } @@ -348,15 +314,6 @@ public class AsmElementFormatter { return label; } - - public String genDeclareMessage(String message) { - int length = message.length(); - if (length < MAX_MESSAGE_LENGTH) { - return message; - } else { - return message.substring(0, MAX_MESSAGE_LENGTH-1) + ".."; - } - } // // TODO: // private String translateAdviceName(String label) { @@ -387,7 +344,8 @@ public class AsmElementFormatter { // } // } - // !!! move or replace + + // !!! move or replace private String translatePointcutName(String name) { int index = name.indexOf("$$")+2; int endIndex = name.lastIndexOf('$'); diff --git a/tests/bugs152/pr145963/AbstractAspect.aj b/tests/bugs152/pr145963/AbstractAspect.aj new file mode 100644 index 000000000..ed2b12170 --- /dev/null +++ b/tests/bugs152/pr145963/AbstractAspect.aj @@ -0,0 +1,10 @@ +package pkg; + +public abstract aspect AbstractAspect { + + public abstract pointcut abstractPCD(); + + before() : abstractPCD() { + } + +} diff --git a/tests/bugs152/pr145963/AspectInDefaultPackage.aj b/tests/bugs152/pr145963/AspectInDefaultPackage.aj new file mode 100644 index 000000000..88d2e00a8 --- /dev/null +++ b/tests/bugs152/pr145963/AspectInDefaultPackage.aj @@ -0,0 +1,18 @@ + +public aspect AspectInDefaultPackage { + + public pointcut execM1() : execution(* pack.C.method1(..)); + public pointcut execM2() : execution(* pack.C.method2(..)); + + before() : execM1() && this(pack.C) { + } + + before() : execM2() || execM1() { + } + + before() : execution(* pack.C.method1()) { + } + + + +} diff --git a/tests/bugs152/pr145963/C.java b/tests/bugs152/pr145963/C.java new file mode 100644 index 000000000..b255175c9 --- /dev/null +++ b/tests/bugs152/pr145963/C.java @@ -0,0 +1,12 @@ +package pack; + +public class C { + + public void method1() { + new C().method2(); + } + + public void method2() { + } + +} diff --git a/tests/bugs152/pr145963/ConcreteAspect.aj b/tests/bugs152/pr145963/ConcreteAspect.aj new file mode 100644 index 000000000..4052180d3 --- /dev/null +++ b/tests/bugs152/pr145963/ConcreteAspect.aj @@ -0,0 +1,17 @@ +package pkg; + +public aspect ConcreteAspect { + + public pointcut execM1() : execution(* pack.C.method1(..)); + public pointcut execM2() : execution(* pack.C.method2(..)); + + before() : execM1() && this(pack.C) { + } + + before() : execM2() || execM1() { + } + + before() : execution(* pack.C.method1()) { + } + +} diff --git a/tests/bugs152/pr145963/README.txt b/tests/bugs152/pr145963/README.txt new file mode 100644 index 000000000..b039752bc --- /dev/null +++ b/tests/bugs152/pr145963/README.txt @@ -0,0 +1,16 @@ +To recreate the jar files create AspectJ projects within Eclipse containing the +required files, right click and select 'Export > Java > JAR file with AspectJ Support' + +jar file files contained in the jar file +-------- ------------------------------- +adviceAndDeow.jar A.aj, Deow.aj, Itd.aj, NewClass.java +adviceLabels.jar ConcreteAspect.aj +aspectInDefaultPackage.jar AspectInDefaultPackage.aj + + + +may need classpath entries on some of these: ? + +ajc A.aj Deow.aj Itd.aj NewClass.java -outjar adviceAndDeow.jar +ajc ConcreteAspect.aj -outjar adviceLabels.jar +ajc AspectInDefaultPackage.aj -outjar aspectInDefaultPackage.jar
\ No newline at end of file diff --git a/tests/bugs152/pr145963/SrcAspect.aj b/tests/bugs152/pr145963/SrcAspect.aj new file mode 100644 index 000000000..c10ed2698 --- /dev/null +++ b/tests/bugs152/pr145963/SrcAspect.aj @@ -0,0 +1,10 @@ +package pkg; + +public aspect SrcAspect { + + pointcut p() : execution(* *.*(..)) && !within(pkg.*); + + before() : p() { + } + +} diff --git a/tests/bugs152/pr145963/adviceLabels.jar b/tests/bugs152/pr145963/adviceLabels.jar Binary files differnew file mode 100644 index 000000000..054c0da2c --- /dev/null +++ b/tests/bugs152/pr145963/adviceLabels.jar diff --git a/tests/bugs152/pr145963/aspectInDefaultPackage.jar b/tests/bugs152/pr145963/aspectInDefaultPackage.jar Binary files differnew file mode 100644 index 000000000..5db77adf6 --- /dev/null +++ b/tests/bugs152/pr145963/aspectInDefaultPackage.jar diff --git a/tests/src/org/aspectj/systemtest/ajc152/CreatingModelForInjarTests.java b/tests/src/org/aspectj/systemtest/ajc152/CreatingModelForInjarTests.java index 92b07152c..845e7b29f 100644 --- a/tests/src/org/aspectj/systemtest/ajc152/CreatingModelForInjarTests.java +++ b/tests/src/org/aspectj/systemtest/ajc152/CreatingModelForInjarTests.java @@ -84,7 +84,7 @@ public class CreatingModelForInjarTests extends org.aspectj.testing.XMLBasedAjcT public void testAdviceInRelMap() { runTest("advice and deow"); IHierarchy top = AsmManager.getDefault().getHierarchy(); - IProgramElement adviceNode = top.findElementForLabel(top.getRoot(), IProgramElement.Kind.ADVICE,"before()"); + IProgramElement adviceNode = top.findElementForLabel(top.getRoot(), IProgramElement.Kind.ADVICE,"before(): p.."); IRelationshipMap relMap = AsmManager.getDefault().getRelationshipMap(); List adviceRels = relMap.get(adviceNode); assertFalse("expected before advice to have relationships but did not",adviceRels.isEmpty()); @@ -101,6 +101,47 @@ public class CreatingModelForInjarTests extends org.aspectj.testing.XMLBasedAjcT assertFalse("expected declare warning to have relationships but did not",dwRels.isEmpty()); } + public void testAdviceLabelsCorrect() { + runTest("ensure advice label is correct"); + IHierarchy top = AsmManager.getDefault().getHierarchy(); + + IProgramElement node = top.findElementForLabel(top.getRoot(), + IProgramElement.Kind.ADVICE, "before(): execM1().."); + assertNotNull("expected to find ipe with label 'before(): execM1()..'" + + " but didn't", node); + + node = top.findElementForLabel(top.getRoot(), + IProgramElement.Kind.ADVICE, "before(): execM2().."); + assertNotNull("expected to find ipe with label 'before(): execM2()..'" + + " but didn't", node); + + node = top.findElementForLabel(top.getRoot(), + IProgramElement.Kind.ADVICE, "before(): <anonymous pointcut>"); + assertNotNull("expected to find ipe with label 'before(): <anonymous pointcut>'" + + " but didn't", node); + } + + // ensure that filled in hierarchy only has one entry for + // aspect + public void testOnlyOneAspectEntry() { + runTest("ensure advice label is correct"); + + IProgramElement pkgNode = getPkgNode(); + assertEquals("expected one child node but found " + + pkgNode.getChildren().size(), 1, pkgNode.getChildren().size()); + + } + + public void testOnlyOneAspectEntry_inDefaultPackage() { + runTest("aspect in default package"); + // expect there to be two children - 'pack' and + // 'AspectInDefaultPackage.aj (binary)' + IProgramElement defaultPkg = AsmManager.getDefault().getHierarchy().getRoot(); + assertEquals("expected two child node but found " + + defaultPkg.getChildren().size(), 2, defaultPkg.getChildren().size()); + + } + // --------------------- Helper methods --------------------- private IProgramElement getPkgNode() { diff --git a/tests/src/org/aspectj/systemtest/ajc152/injar.xml b/tests/src/org/aspectj/systemtest/ajc152/injar.xml index 955069a3e..f53dbbaac 100644 --- a/tests/src/org/aspectj/systemtest/ajc152/injar.xml +++ b/tests/src/org/aspectj/systemtest/ajc152/injar.xml @@ -9,5 +9,12 @@ </compile> </ajc-test> + <ajc-test dir="bugs152/pr145963" title="ensure advice label is correct"> + <compile files="C.java" aspectpath="adviceLabels.jar" options="-emacssym"/> + </ajc-test> + <ajc-test dir="bugs152/pr145963" title="aspect in default package"> + <compile files="C.java" aspectpath="aspectInDefaultPackage.jar" options="-emacssym"/> + </ajc-test> + </suite> diff --git a/weaver/src/org/aspectj/weaver/AsmRelationshipProvider.java b/weaver/src/org/aspectj/weaver/AsmRelationshipProvider.java index 04725f894..a353a845a 100644 --- a/weaver/src/org/aspectj/weaver/AsmRelationshipProvider.java +++ b/weaver/src/org/aspectj/weaver/AsmRelationshipProvider.java @@ -176,6 +176,9 @@ public class AsmRelationshipProvider { return; } + if (World.createInjarHierarchy) { + munger.createHierarchy(); + } IRelationshipMap mapper = AsmManager.getDefault().getRelationshipMap(); IProgramElement targetNode = getNode(AsmManager.getDefault().getHierarchy(), shadow); diff --git a/weaver/src/org/aspectj/weaver/AsmRelationshipUtils.java b/weaver/src/org/aspectj/weaver/AsmRelationshipUtils.java new file mode 100644 index 000000000..e9a1bdbf6 --- /dev/null +++ b/weaver/src/org/aspectj/weaver/AsmRelationshipUtils.java @@ -0,0 +1,84 @@ +/******************************************************************** + * Copyright (c) 2006 Contributors. All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution and is available at + * http://eclipse.org/legal/epl-v10.html + * + * Contributors: IBM Corporation - initial API and implementation + * Helen Hawkins - initial version + *******************************************************************/ +package org.aspectj.weaver; + +import org.aspectj.weaver.patterns.AndPointcut; +import org.aspectj.weaver.patterns.OrPointcut; +import org.aspectj.weaver.patterns.Pointcut; +import org.aspectj.weaver.patterns.ReferencePointcut; + +/** + * Provides utility methods for generating details for IProgramElements + * used when creating the model both from source (via AsmElementFormatter.visit(..)) + * and when filling in the model for binary aspects (via AsmRelationshipProvider + * bug 145963) + */ +public class AsmRelationshipUtils { + + public static final String UNDEFINED="<undefined>"; + public static final String DECLARE_PRECEDENCE = "precedence"; + public static final String DECLARE_SOFT = "soft"; + public static final String DECLARE_PARENTS = "parents"; + public static final String DECLARE_WARNING = "warning"; + public static final String DECLARE_ERROR = "error"; + public static final String DECLARE_UNKNONWN = "<unknown declare>"; + public static final String POINTCUT_ABSTRACT = "<abstract pointcut>"; + public static final String POINTCUT_ANONYMOUS = "<anonymous pointcut>"; + public static final String DOUBLE_DOTS = ".."; + public static final int MAX_MESSAGE_LENGTH = 18; + public static final String DEC_LABEL = "declare"; + + /** + * Generates the declare message used in the details, for example if + * the declare warning statement has message "There should be no printlns" + * will return 'declare warning: "There should be n.."' + */ + public static String genDeclareMessage(String message) { + int length = message.length(); + if (length < MAX_MESSAGE_LENGTH) { + return message; + } else { + return message.substring(0, MAX_MESSAGE_LENGTH-1) + DOUBLE_DOTS; + } + } + + /** + * Generates the pointcut details for the given pointcut, for example + * an anonymous pointcut will return '<anonymous pointcut>' and + * a named pointcut called p() will return 'p()..' + */ + public static String genPointcutDetails(Pointcut pcd) { + StringBuffer details = new StringBuffer(); + if (pcd instanceof ReferencePointcut) { + ReferencePointcut rp = (ReferencePointcut)pcd; + details.append(rp.name).append(DOUBLE_DOTS); + } else if (pcd instanceof AndPointcut) { + AndPointcut ap = (AndPointcut)pcd; + if (ap.getLeft() instanceof ReferencePointcut) { + details.append(ap.getLeft().toString()).append(DOUBLE_DOTS); + } else { + details.append(POINTCUT_ANONYMOUS).append(DOUBLE_DOTS); + } + } else if (pcd instanceof OrPointcut) { + OrPointcut op = (OrPointcut)pcd; + if (op.getLeft() instanceof ReferencePointcut) { + details.append(op.getLeft().toString()).append(DOUBLE_DOTS); + } else { + details.append(POINTCUT_ANONYMOUS).append(DOUBLE_DOTS); + } + } else { + details.append(POINTCUT_ANONYMOUS); + } + return details.toString(); + } + + +} diff --git a/weaver/src/org/aspectj/weaver/ShadowMunger.java b/weaver/src/org/aspectj/weaver/ShadowMunger.java index df21a4a82..e5e5d0574 100644 --- a/weaver/src/org/aspectj/weaver/ShadowMunger.java +++ b/weaver/src/org/aspectj/weaver/ShadowMunger.java @@ -98,9 +98,6 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH if (null == handle) { ISourceLocation sl = getSourceLocation(); if (sl != null) { - if (World.createInjarHierarchy) { - createHierarchy(); - } IProgramElement ipe = AsmManager.getDefault().getHierarchy().findElementForSourceLine(sl); handle = AsmManager.getDefault().getHandleProvider().createHandleIdentifier(ipe); } @@ -155,6 +152,9 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH */ public abstract ResolvedType getResolvedDeclaringAspect(); + /** + * Creates the hierarchy for binary aspects + */ public void createHierarchy() { IProgramElement sourceFileNode = AsmManager.getDefault().getHierarchy().findElementForSourceLine(getSourceLocation()); if (!sourceFileNode.getKind().equals(IProgramElement.Kind.FILE_JAVA)) { @@ -162,6 +162,7 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH } String name = sourceFileNode.getName(); sourceFileNode.setName(name + " (binary)"); + AsmManager.getDefault().getHandleProvider().createHandleIdentifier(sourceFileNode); ResolvedType aspect = getResolvedDeclaringAspect(); @@ -178,9 +179,29 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH IProgramElement.Kind.PACKAGE, new ArrayList()); root.addChild(pkgNode); + pkgNode.addChild(sourceFileNode); + } else { + for (Iterator iter = pkgNode.getChildren().iterator(); iter.hasNext();) { + IProgramElement element = (IProgramElement) iter.next(); + if (element.getHandleIdentifier().equals( + sourceFileNode.getHandleIdentifier())) { + // already added the sourcefile so have already + // added the structure for this aspect + return; + } + } + pkgNode.addChild(sourceFileNode); } - pkgNode.addChild(sourceFileNode); } else { + for (Iterator iter = root.getChildren().iterator(); iter.hasNext();) { + IProgramElement element = (IProgramElement) iter.next(); + if (element.getHandleIdentifier().equals( + sourceFileNode.getHandleIdentifier())) { + // already added the sourcefile so have already + // added the structure for this aspect + return; + } + } root.addChild(sourceFileNode); } @@ -240,26 +261,19 @@ public abstract class ShadowMunger implements PartialOrder.PartialComparable, IH getSourceLocation(), this.getDeclaringType().getModifiers(), null,null); - deowNode.setDetails("\"" + genDeclareMessage(decl.getMessage()) + "\""); + deowNode.setDetails("\"" + AsmRelationshipUtils.genDeclareMessage(decl.getMessage()) + "\""); parent.addChild(deowNode); } else if (element instanceof BcelAdvice) { BcelAdvice advice = (BcelAdvice)element; - parent.addChild(new ProgramElement( - advice.kind.getName(), - IProgramElement.Kind.ADVICE, - getSourceLocation(), - advice.signature.getModifiers(),null,Collections.EMPTY_LIST)); + IProgramElement adviceNode = new ProgramElement( + advice.kind.getName(), + IProgramElement.Kind.ADVICE, + getSourceLocation(), + advice.signature.getModifiers(),null,Collections.EMPTY_LIST); + adviceNode.setDetails(AsmRelationshipUtils.genPointcutDetails(advice.getPointcut())); + parent.addChild(adviceNode); } } } - - // taken from AsmElementFormatter - private String genDeclareMessage(String message) { - int length = message.length(); - if (length < 18) { - return message; - } else { - return message.substring(0, 17) + ".."; - } - } + } |