diff options
Diffstat (limited to 'asm')
-rw-r--r-- | asm/src/org/aspectj/asm/internal/JDTLikeHandleProvider.java | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/asm/src/org/aspectj/asm/internal/JDTLikeHandleProvider.java b/asm/src/org/aspectj/asm/internal/JDTLikeHandleProvider.java index 92a1d2879..c74da6a3c 100644 --- a/asm/src/org/aspectj/asm/internal/JDTLikeHandleProvider.java +++ b/asm/src/org/aspectj/asm/internal/JDTLikeHandleProvider.java @@ -184,6 +184,41 @@ public class JDTLikeHandleProvider implements IElementHandleProvider { if (sig1 != null && (idx = sig1.indexOf(")")) != -1) { sig1 = sig1.substring(0, idx); } + // this code needs a speed overhaul... and some proper tests + // Two static parts because one may be enclosing jpsp (269522) + if (sig1!=null) { + if (sig1.indexOf("Lorg/aspectj/lang")!=-1) { + if (sig1.endsWith("Lorg/aspectj/lang/JoinPoint$StaticPart;")) { + sig1 = sig1.substring(0,sig1.lastIndexOf("Lorg/aspectj/lang/JoinPoint$StaticPart;")); + } + if (sig1.endsWith("Lorg/aspectj/lang/JoinPoint;")) { + sig1 = sig1.substring(0,sig1.lastIndexOf("Lorg/aspectj/lang/JoinPoint;")); + } + if (sig1.endsWith("Lorg/aspectj/lang/JoinPoint$StaticPart;")) { + sig1 = sig1.substring(0,sig1.lastIndexOf("Lorg/aspectj/lang/JoinPoint$StaticPart;")); + } + } + } + // Advice bytecode signatures are like this: + // a, j, c, $, a, f, t, e, r, $, c, o, m, _, k, r, o, n, o, s, _, a, s, p, e, c, t, s, _, P, r, o, c, e, s, s, A, s, p, e, c, t, $, 4, $, 2, e, 7, 5, 9, e, 0, 3] + // where the pointcut hash and advice number are in the mix - we should probably ignore those in the comparison - so we strip up to the third $ + boolean stripit = false; +// int dollarIndex = sig1.indexOf('$'); +// if (dollarIndex!=-1) { +// dollarIndex = sig1.indexOf('$',dollarIndex+1); +// if (dollarIndex!=-1) { +// dollarIndex = sig1.indexOf('$',dollarIndex+1); +// if (dollarIndex!=-1) { +// stripit = true; +// } +// } +// } +// if (stripit) { +// sig1 = sig1.substring(0,dollarIndex); +// System.out.println(sig1); +// } + + if (sig1 == null && ipeSig == null || (sig1 != null && sig1.equals(ipeSig))) { String existingHandle = object.getHandleIdentifier(); int suffixPosition = existingHandle.indexOf('!'); |