From: aclement Date: Mon, 3 Jul 2006 14:25:54 +0000 (+0000) Subject: testcode for new handle provider (pr141730): quirky symbols to use in handles (JDT... X-Git-Tag: PRE_PIPELINE~80 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6e9b3b60dbd738036fa658de6d8b2414b1a56eb1;p=aspectj.git testcode for new handle provider (pr141730): quirky symbols to use in handles (JDT ones + extra) --- diff --git a/asm/src/org/aspectj/asm/internal/HandleProviderDelimiter.java b/asm/src/org/aspectj/asm/internal/HandleProviderDelimiter.java new file mode 100644 index 000000000..94ed91bd8 --- /dev/null +++ b/asm/src/org/aspectj/asm/internal/HandleProviderDelimiter.java @@ -0,0 +1,125 @@ +/******************************************************************** + * Copyright (c) 2006 Contributors. All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution and is available at + * http://eclipse.org/legal/epl-v10.html + * + * Contributors: IBM Corporation - initial API and implementation + * Helen Hawkins - initial version + *******************************************************************/ +package org.aspectj.asm.internal; + +import org.aspectj.asm.IProgramElement; + +/** + * Uses "typesafe enum" pattern. + */ +public class HandleProviderDelimiter { + + // taken from JavaElement + public static final HandleProviderDelimiter JAVAPROJECT = 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 TYPE = new HandleProviderDelimiter('['); + public static final HandleProviderDelimiter IMPORTDECLARATION = new HandleProviderDelimiter('#'); + public static final HandleProviderDelimiter COUNT = new HandleProviderDelimiter('!'); + public static final HandleProviderDelimiter ESCAPE = new HandleProviderDelimiter('\\'); + // these below are not currently used because no iprogramelement.kind equivalent + public static final HandleProviderDelimiter PACKAGEFRAGMENTROOT = new HandleProviderDelimiter('/'); + public static final HandleProviderDelimiter PACKAGEDECLARATION = new HandleProviderDelimiter('%'); + public static final HandleProviderDelimiter LOCALVARIABLE = new HandleProviderDelimiter('@'); + public static final HandleProviderDelimiter TYPE_PARAMETER = new HandleProviderDelimiter(']'); + + + // AspectJ specific ones + 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 CODEELEMENT = new HandleProviderDelimiter('?'); + public static final HandleProviderDelimiter ITD = new HandleProviderDelimiter(')'); + public static final HandleProviderDelimiter DECLARE = new HandleProviderDelimiter('`'); + public static final HandleProviderDelimiter POINTCUT = new HandleProviderDelimiter('+'); + + + private static char empty = ' '; + private final char delim; + + private HandleProviderDelimiter(char delim) { + this.delim = delim; + } + + /** + * Returns the delimiter for the HandleProviderDelimiter, + * for example ASPECT returns '*' and METHOD returns '~' + */ + public char getDelimiter() { + return delim; + } + + /** + * Returns the delimiter for the given IProgramElement for example + * if the IProgramElement is an aspect returns '*' and if the + * IProgramElement is a method returns '~' + */ + public static char getDelimiter(IProgramElement ipe) { + IProgramElement.Kind kind = ipe.getKind(); + if (kind.equals(IProgramElement.Kind.PROJECT)) { + return JAVAPROJECT.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.PACKAGE)) { + return PACKAGEFRAGMENT.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.FILE_JAVA)) { + if (ipe.getName().endsWith(".aj")) { + return ASPECT_CU.getDelimiter(); + } else { + return COMPILATIONUNIT.getDelimiter(); + } + } else if (kind.equals(IProgramElement.Kind.FILE_ASPECTJ)) { + return ASPECT_CU.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.IMPORT_REFERENCE)) { + return IMPORTDECLARATION.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.CLASS) + || kind.equals(IProgramElement.Kind.INTERFACE) + || kind.equals(IProgramElement.Kind.ENUM) + || kind.equals(IProgramElement.Kind.ANNOTATION)) { + return TYPE.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.ASPECT)) { + return ASPECT_TYPE.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.INITIALIZER)) { + return INITIALIZER.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.INTER_TYPE_FIELD) + || kind.equals(IProgramElement.Kind.INTER_TYPE_METHOD) + || kind.equals(IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR) + || kind.equals(IProgramElement.Kind.INTER_TYPE_PARENT)) { + return ITD.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)) { + return FIELD.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.POINTCUT)) { + return POINTCUT.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.ADVICE)) { + return ADVICE.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.DECLARE_PARENTS) + || kind.equals(IProgramElement.Kind.DECLARE_WARNING) + || kind.equals(IProgramElement.Kind.DECLARE_ERROR) + || kind.equals(IProgramElement.Kind.DECLARE_SOFT) + || kind.equals(IProgramElement.Kind.DECLARE_PRECEDENCE) + || kind.equals(IProgramElement.Kind.DECLARE_ANNOTATION_AT_CONSTRUCTOR) + || kind.equals(IProgramElement.Kind.DECLARE_ANNOTATION_AT_FIELD) + || kind.equals(IProgramElement.Kind.DECLARE_ANNOTATION_AT_METHOD) + || kind.equals(IProgramElement.Kind.DECLARE_ANNOTATION_AT_TYPE)) { + return DECLARE.getDelimiter(); + } else if (kind.equals(IProgramElement.Kind.CODE)) { + return CODEELEMENT.getDelimiter(); + } + return empty; + } + +}