|
|
@@ -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; |
|
|
|
} |
|
|
|
|
|
|
|
} |