diff options
Diffstat (limited to 'org.aspectj.matcher/src/main')
3 files changed, 24 insertions, 10 deletions
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/AjcMemberMaker.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/AjcMemberMaker.java index 88e14400d..6375087a1 100644 --- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/AjcMemberMaker.java +++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/AjcMemberMaker.java @@ -318,16 +318,25 @@ public class AjcMemberMaker { public static ResolvedMember inlineAccessMethodForMethod(UnresolvedType aspectType, ResolvedMember method) { UnresolvedType[] paramTypes = method.getParameterTypes(); + String[] paramNames = method.getParameterNames(); if (!Modifier.isStatic(method.getModifiers())) { paramTypes = UnresolvedType.insert(method.getDeclaringType(), paramTypes); + if (paramNames != null) { + String[] newParamNames = new String[paramNames.length+1]; + System.arraycopy(paramNames, 0, newParamNames, 1, paramNames.length); + newParamNames[0] = "targetInstance"; + paramNames = newParamNames; + } } - return new ResolvedMemberImpl(Member.METHOD, aspectType, + ResolvedMember inlineAccessMethodForMethod = new ResolvedMemberImpl(Member.METHOD, aspectType, PUBLIC_STATIC, // ??? what about privileged and super access - // ???Modifier.PUBLIC | (method.isStatic() ? Modifier.STATIC : 0), method.getReturnType(), - NameMangler.inlineAccessMethodForMethod(method.getName(), method.getDeclaringType(), aspectType), paramTypes, method.getExceptions()); + if (paramNames != null) { + inlineAccessMethodForMethod.setParameterNames(paramNames); + } + return inlineAccessMethodForMethod; } public static ResolvedMember inlineAccessMethodForFieldGet(UnresolvedType aspectType, Member field) { diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java index e911ba44f..048f30cae 100644 --- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java +++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java @@ -17,6 +17,8 @@ package org.aspectj.weaver; import java.io.DataInputStream; import java.io.IOException; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.aspectj.util.GenericSignature; import org.aspectj.util.GenericSignature.ClassSignature; @@ -160,9 +162,13 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement { public final boolean isArray() { return signature.length() > 0 && signature.charAt(0) == '['; } - + public final int getDimensions() { - return signature.replaceAll("^(\\[*).*", "$1").length(); + int d = 0; + for (int i=0;i<signature.length() && signature.charAt(i)=='[';i++) { + d++; + } + return d; } /** diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/PerCflow.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/PerCflow.java index c719b8b5c..6231d79f5 100644 --- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/PerCflow.java +++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/PerCflow.java @@ -104,11 +104,10 @@ public class PerCflow extends PerClause { CrosscuttingMembers xcut = inAspect.crosscuttingMembers; Collection<ShadowMunger> previousCflowEntries = xcut.getCflowEntries(); - Pointcut concreteEntry = entry.concretize(inAspect, inAspect, 0, null); // IntMap - // . - // EMPTY - // ) - // ; + Pointcut concreteEntry = entry.concretize(inAspect, inAspect, 0, null); + if (concreteEntry.getSourceLocation() == null) { + concreteEntry.setLocation(sourceContext, start, end); + } List<ShadowMunger> innerCflowEntries = new ArrayList<>(xcut.getCflowEntries()); innerCflowEntries.removeAll(previousCflowEntries); |