From 1361dea02a5de3a4da611fe429f48f7fc2afe048 Mon Sep 17 00:00:00 2001 From: aclement Date: Fri, 20 Jan 2006 10:52:29 +0000 Subject: [PATCH] 77166 - newarray joinpoint support. "-Xjoinpoints:arrayconstruction" --- .../ajc151/NewarrayJoinpointTests.java | 24 ++++++++++++++++--- .../systemtest/ajc151/newarray_joinpoint.xml | 1 + .../org/aspectj/weaver/WeaverMessages.java | 1 + .../weaver/patterns/KindedPointcut.java | 7 +++++- .../aspectj/weaver/weaver-messages.properties | 1 + 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/tests/src/org/aspectj/systemtest/ajc151/NewarrayJoinpointTests.java b/tests/src/org/aspectj/systemtest/ajc151/NewarrayJoinpointTests.java index 4db134003..b4c363d81 100644 --- a/tests/src/org/aspectj/systemtest/ajc151/NewarrayJoinpointTests.java +++ b/tests/src/org/aspectj/systemtest/ajc151/NewarrayJoinpointTests.java @@ -11,9 +11,12 @@ package org.aspectj.systemtest.ajc151; import java.io.File; +import java.util.List; import junit.framework.Test; +import org.aspectj.asm.AsmManager; +import org.aspectj.asm.IProgramElement; import org.aspectj.testing.XMLBasedAjcTestCase; /* @@ -55,14 +58,29 @@ public class NewarrayJoinpointTests extends XMLBasedAjcTestCase { public void testBasicWithAMultiDimensionalArray() { runTest("multi dimensional array creation"); } public void testArgsWithAMultiDimensionalArray() { runTest("multi dimensional array args");} - // complicated + // various + public void testOptionoff() { runTest("option deactivated - no match expected");} public void testUsingTargetAndAfterReturningAdvice() { runTest("using target and after returning");} public void testUsingItForReal() { runTest("using it for real");} public void testDifferentiatingArrayTypes() { runTest("differentiating array types");} - public void testStructureModel() { runTest("structure model");} + + public void testStructureModel() { + //AsmManager.setReporting("c:/foo.txt",true,true,true,true); + runTest("structure model"); + IProgramElement ipe = AsmManager.getDefault().getHierarchy().findElementForType("","Five"); + assertTrue("Couldnt find 'Five' type in the model",ipe!=null); + List kids = ipe.getChildren(); + assertTrue("Couldn't find 'main' method in the 'Five' type",kids!=null && kids.size()==1); + List codenodes = ((IProgramElement)kids.get(0)).getChildren(); + assertTrue("Couldn't find nodes below 'main' method",codenodes!=null && codenodes.size()==1); + IProgramElement arrayCtorCallNode = (IProgramElement)codenodes.get(0); + String exp = "constructor-call(void java.lang.Integer[].(int))"; + assertTrue("Expected '"+exp+"' but found "+arrayCtorCallNode.toString(),arrayCtorCallNode.toString().equals(exp)); + List rels = AsmManager.getDefault().getRelationshipMap().get(arrayCtorCallNode); + assertTrue("Should have a relationship from the ctorcall node, but didn't find one?",rels!=null && rels.size()==1); + } - public void testOptionoff() { runTest("option deactivated - no match expected");} // public static Test suite() { diff --git a/tests/src/org/aspectj/systemtest/ajc151/newarray_joinpoint.xml b/tests/src/org/aspectj/systemtest/ajc151/newarray_joinpoint.xml index b75d4adec..fb11fa596 100644 --- a/tests/src/org/aspectj/systemtest/ajc151/newarray_joinpoint.xml +++ b/tests/src/org/aspectj/systemtest/ajc151/newarray_joinpoint.xml @@ -157,6 +157,7 @@ + diff --git a/weaver/src/org/aspectj/weaver/WeaverMessages.java b/weaver/src/org/aspectj/weaver/WeaverMessages.java index 8b0ecf8d4..7c0fdbb4f 100644 --- a/weaver/src/org/aspectj/weaver/WeaverMessages.java +++ b/weaver/src/org/aspectj/weaver/WeaverMessages.java @@ -31,6 +31,7 @@ public class WeaverMessages { public static final String CANT_BIND_TYPE = "cantBindType"; public static final String WILDCARD_NOT_ALLOWED = "wildcardTypePatternNotAllowed"; public static final String FIELDS_CANT_HAVE_VOID_TYPE = "fieldCantBeVoid"; + public static final String NO_NEWARRAY_JOINPOINTS_BY_DEFAULT = "noNewArrayJoinpointsByDefault"; public static final String DECP_OBJECT = "decpObject"; public static final String CANT_EXTEND_SELF="cantExtendSelf"; diff --git a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java index 0f124a7f9..25c25740c 100644 --- a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java @@ -358,7 +358,12 @@ public class KindedPointcut extends Pointcut { if (visitor.wellHasItThen/*?*/()) { scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.NO_GENERIC_THROWABLES), getSourceLocation())); - } + } + if (!scope.getWorld().isJoinpointArrayConstructionEnabled() && + kind==Shadow.ConstructorCall && + signature.getDeclaringType().isArray()) { + scope.message(MessageUtil.warn(WeaverMessages.format(WeaverMessages.NO_NEWARRAY_JOINPOINTS_BY_DEFAULT),getSourceLocation())); + } } } diff --git a/weaver/src/org/aspectj/weaver/weaver-messages.properties b/weaver/src/org/aspectj/weaver/weaver-messages.properties index c274d8f13..3787c2693 100644 --- a/weaver/src/org/aspectj/weaver/weaver-messages.properties +++ b/weaver/src/org/aspectj/weaver/weaver-messages.properties @@ -26,6 +26,7 @@ exactTypePatternRequired=exact type pattern required cantBindType=can''t bind type name ''{0}'' wildcardTypePatternNotAllowed=wildcard type pattern not allowed, must use type name fieldCantBeVoid=fields cannot have a void type +noNewArrayJoinpointsByDefault=There are no join points for array construction unless -Xjoinpoints:arrayconstruction is specified # Declare parents messages... decpObject=can''t change the parents of java.lang.Object -- 2.39.5