--- /dev/null
+/********************************************************************
+ * 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;
+ }
+
+}