diff options
Diffstat (limited to 'asm/src/main/java/org')
-rw-r--r-- | asm/src/main/java/org/aspectj/asm/internal/HandleProviderDelimiter.java | 39 | ||||
-rw-r--r-- | asm/src/main/java/org/aspectj/asm/internal/JDTLikeHandleProvider.java | 12 |
2 files changed, 35 insertions, 16 deletions
diff --git a/asm/src/main/java/org/aspectj/asm/internal/HandleProviderDelimiter.java b/asm/src/main/java/org/aspectj/asm/internal/HandleProviderDelimiter.java index 2732d109f..f8f601bb4 100644 --- a/asm/src/main/java/org/aspectj/asm/internal/HandleProviderDelimiter.java +++ b/asm/src/main/java/org/aspectj/asm/internal/HandleProviderDelimiter.java @@ -17,35 +17,52 @@ import org.aspectj.asm.IProgramElement; */ public class HandleProviderDelimiter { - // taken from JavaElement + // TODO: + // Keep constants in sync between + // - org.eclipse.jdt.internal.core.JavaElement (JDT Core), + // - org.eclipse.ajdt.core.javaelements.AspectElement (AJDT Core), + // - org.aspectj.asm.internal.HandleProviderDelimiter (AspectJ). + // The reason is that JDT Core introduces new delimiters for new Java language constructs once in a while. + // This led to clashes with existing AJDT symbols in the past already, which consequently had to be changed + // to use other characters. Therefore, manual synchronisation with JDT Core is necessary. + + // Taken from org.eclipse.jdt.internal.core.JavaElement (JDT Core) + public static final HandleProviderDelimiter ESCAPE = new HandleProviderDelimiter('\\'); public static final HandleProviderDelimiter JAVAPROJECT = new HandleProviderDelimiter('='); + public static final HandleProviderDelimiter PACKAGEFRAGMENTROOT = new HandleProviderDelimiter('/'); public static final HandleProviderDelimiter PACKAGEFRAGMENT = new HandleProviderDelimiter('<'); public static final HandleProviderDelimiter FIELD = new HandleProviderDelimiter('^'); public static final HandleProviderDelimiter METHOD = new HandleProviderDelimiter('~'); public static final HandleProviderDelimiter INITIALIZER = new HandleProviderDelimiter('|'); public static final HandleProviderDelimiter COMPILATIONUNIT = new HandleProviderDelimiter('{'); public static final HandleProviderDelimiter CLASSFILE = new HandleProviderDelimiter('('); + public static final HandleProviderDelimiter JEM_MODULAR_CLASSFILE = new HandleProviderDelimiter('\''); public static final HandleProviderDelimiter TYPE = new HandleProviderDelimiter('['); + public static final HandleProviderDelimiter PACKAGEDECLARATION = new HandleProviderDelimiter('%'); public static final HandleProviderDelimiter IMPORTDECLARATION = new HandleProviderDelimiter('#'); public static final HandleProviderDelimiter COUNT = new HandleProviderDelimiter('!'); - public static final HandleProviderDelimiter ESCAPE = new HandleProviderDelimiter('\\'); - public static final HandleProviderDelimiter PACKAGEDECLARATION = new HandleProviderDelimiter('%'); - public static final HandleProviderDelimiter PACKAGEFRAGMENTROOT = new HandleProviderDelimiter('/'); // these below are not currently used because no iprogramelement.kind // equivalent public static final HandleProviderDelimiter LOCALVARIABLE = new HandleProviderDelimiter('@'); public static final HandleProviderDelimiter TYPE_PARAMETER = new HandleProviderDelimiter(']'); + public static final HandleProviderDelimiter ANNOTATION = new HandleProviderDelimiter('}'); + public static final HandleProviderDelimiter LAMBDA_EXPRESSION = new HandleProviderDelimiter(')'); + public static final HandleProviderDelimiter LAMBDA_METHOD = new HandleProviderDelimiter('&'); + public static final HandleProviderDelimiter STRING = new HandleProviderDelimiter('"'); + public static final HandleProviderDelimiter MODULE = new HandleProviderDelimiter('`'); + public static final HandleProviderDelimiter DELIMITER_ESCAPE = new HandleProviderDelimiter('='); - // AspectJ specific ones + // Taken from org.aspectj.asm.internal.HandleProviderDelimiter (AspectJ) public static final HandleProviderDelimiter ASPECT_CU = new HandleProviderDelimiter('*'); - public static final HandleProviderDelimiter ADVICE = new HandleProviderDelimiter('&'); - public static final HandleProviderDelimiter ASPECT_TYPE = new HandleProviderDelimiter('\''); + public static final HandleProviderDelimiter ADVICE = new HandleProviderDelimiter('§'); + public static final HandleProviderDelimiter ASPECT_TYPE = new HandleProviderDelimiter('>'); public static final HandleProviderDelimiter CODEELEMENT = new HandleProviderDelimiter('?'); public static final HandleProviderDelimiter ITD_FIELD = new HandleProviderDelimiter(','); - public static final HandleProviderDelimiter ITD = new HandleProviderDelimiter(')'); - public static final HandleProviderDelimiter DECLARE = new HandleProviderDelimiter('`'); - public static final HandleProviderDelimiter POINTCUT = new HandleProviderDelimiter('"'); + public static final HandleProviderDelimiter ITD_METHOD = new HandleProviderDelimiter('°'); + public static final HandleProviderDelimiter DECLARE = new HandleProviderDelimiter('´'); + public static final HandleProviderDelimiter POINTCUT = new HandleProviderDelimiter('©'); + // Special delimiter for phantom handles public static final HandleProviderDelimiter PHANTOM = new HandleProviderDelimiter(';'); private static char empty = ' '; @@ -99,7 +116,7 @@ public class HandleProviderDelimiter { return ITD_FIELD.getDelimiter(); } else if (kind.equals(IProgramElement.Kind.INTER_TYPE_METHOD) || kind.equals(IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR) || kind.equals(IProgramElement.Kind.INTER_TYPE_PARENT)) { - return ITD.getDelimiter(); + return ITD_METHOD.getDelimiter(); } else if (kind.equals(IProgramElement.Kind.CONSTRUCTOR) || kind.equals(IProgramElement.Kind.METHOD)) { return METHOD.getDelimiter(); } else if (kind.equals(IProgramElement.Kind.FIELD) || kind.equals(IProgramElement.Kind.ENUM_VALUE)) { diff --git a/asm/src/main/java/org/aspectj/asm/internal/JDTLikeHandleProvider.java b/asm/src/main/java/org/aspectj/asm/internal/JDTLikeHandleProvider.java index 8ae6feeff..19ecb85ec 100644 --- a/asm/src/main/java/org/aspectj/asm/internal/JDTLikeHandleProvider.java +++ b/asm/src/main/java/org/aspectj/asm/internal/JDTLikeHandleProvider.java @@ -20,11 +20,13 @@ import org.aspectj.bridge.ISourceLocation; /** * Creates JDT-like handles, for example - * - * method with string argument: <tjp{Demo.java[Demo~main~\[QString; method with generic argument: - * <pkg{MyClass.java[MyClass~myMethod~QList\<QString;>; an aspect: <pkg*A1.aj}A1 advice with Integer arg: - * <pkg*A8.aj}A8&afterReturning&QInteger; method call: <pkg*A10.aj[C~m1?method-call(void pkg.C.m2()) - * + * <ul> + * <li>method with string argument: {@code <tjp}<code>{</code>{@code Demo.java[Demo~main~\[QString;}</li> + * <li>method with generic argument: {@code <pkg}<code>{</code>{@code MyClass.java[MyClass~myMethod~QList\<QString;>;}</li> + * <li>aspect: {@code <pkg*A1.aj}<code>}</code>{@code A1}</li> + * <li>advice with Integer arg: {@code <pkg*A8.aj}<code>}</code>{@code A8&afterReturning&QInteger;}</li> + * <li>method call: {@code <pkg*A10.aj[C~m1?method-call(void pkg.C.m2())}</li> + * </ul> */ public class JDTLikeHandleProvider implements IElementHandleProvider { |