Browse Source

test and fix for pr144717 - array type as pointcut parameter in reflective world

tags/V1_5_2rc1
acolyer 18 years ago
parent
commit
97cd71ae81

+ 9
- 1
weaver/src/org/aspectj/weaver/tools/PointcutParser.java View File

@@ -390,7 +390,7 @@ public class PointcutParser {
if (formalParameters == null) formalParameters = new PointcutParameter[0];
FormalBinding[] formalBindings = new FormalBinding[formalParameters.length];
for (int i = 0; i < formalBindings.length; i++) {
formalBindings[i] = new FormalBinding(UnresolvedType.forName(formalParameters[i].getType().getName()),formalParameters[i].getName(),i);
formalBindings[i] = new FormalBinding(toUnresolvedType(formalParameters[i].getType()),formalParameters[i].getName(),i);
}
if (inScope == null) {
return new SimpleScope(getWorld(),formalBindings);
@@ -412,6 +412,14 @@ public class PointcutParser {
}
}
private UnresolvedType toUnresolvedType(Class clazz) {
if (clazz.isArray()) {
return UnresolvedType.forSignature(clazz.getName().replace('.','/'));
} else {
return UnresolvedType.forName(clazz.getName());
}
}
private void validateAgainstSupportedPrimitives(Pointcut pc, String expression) {
switch(pc.getPointcutKind()) {
case Pointcut.AND:

+ 1
- 1
weaver5/java5-src/org/aspectj/weaver/reflect/Java15ReflectionBasedReferenceTypeDelegate.java View File

@@ -257,7 +257,7 @@ public class Java15ReflectionBasedReferenceTypeDelegate extends
AjType<?>[] ptypes = pcs[i].getParameterTypes();
UnresolvedType[] weaverPTypes = new UnresolvedType[ptypes.length];
for (int j = 0; j < weaverPTypes.length; j++) {
weaverPTypes[j] = UnresolvedType.forName(ptypes[j].getName());
weaverPTypes[j] = this.typeConverter.fromType(ptypes[j].getJavaClass()) ;
}
pointcuts[i] = new DeferredResolvedPointcutDefinition(getResolvedTypeX(),pcs[i].getModifiers(),pcs[i].getName(),weaverPTypes);
}

+ 16
- 0
weaver5/java5-testsrc/org/aspectj/weaver/tools/Java15PointcutExpressionTest.java View File

@@ -14,6 +14,7 @@ package org.aspectj.weaver.tools;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;

import org.aspectj.lang.annotation.Pointcut;
@@ -299,6 +300,14 @@ public class Java15PointcutExpressionTest extends TestCase {
assertTrue("does not match",sm.neverMatches());
}
public void testArrayTypeInArgs() throws Exception {
PointcutParameter[] params = new PointcutParameter[3];
params[0] = parser.createPointcutParameter("d", Date.class);
params[1] = parser.createPointcutParameter("s", String.class);
params[2] = parser.createPointcutParameter("ss", String[].class);
PointcutExpression ex = parser.parsePointcutExpression("org.aspectj.weaver.tools.Java15PointcutExpressionTest.UsesArrays.pc(d,s,ss)",UsesArrays.class,params);
}
protected void setUp() throws Exception {
super.setUp();
parser = PointcutParser.getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution(this.getClass().getClassLoader());
@@ -370,6 +379,13 @@ public class Java15PointcutExpressionTest extends TestCase {
public void d() {}
}
private static class UsesArrays {
@Pointcut("execution(* *(..)) && args(d,s,ss)")
public void pc(Date d, String s, String[] ss) {}
}
}



Loading…
Cancel
Save