aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.matcher/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'org.aspectj.matcher/src/main/java/org')
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/AjcMemberMaker.java15
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java10
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/PerCflow.java9
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);