All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aspectj.asm.internal.HandleProviderDelimiter Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/********************************************************************
 * Copyright (c) 2006 Contributors. All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * 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 {

	// 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 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('!');
	// 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('=');

	// 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 CODEELEMENT = new HandleProviderDelimiter('?');
	public static final HandleProviderDelimiter ITD_FIELD = 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 = ' ';
	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.PACKAGE_DECLARATION)) {
			return PACKAGEDECLARATION.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)) {
			if (ipe.isAnnotationStyleDeclaration()) {
				return TYPE.getDelimiter();
			} else {
				return ASPECT_TYPE.getDelimiter();
			}
		} else if (kind.equals(IProgramElement.Kind.INITIALIZER)) {
			return INITIALIZER.getDelimiter();
		} else if (kind.equals(IProgramElement.Kind.INTER_TYPE_FIELD)) {
			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_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)) {
			return FIELD.getDelimiter();
		} else if (kind.equals(IProgramElement.Kind.POINTCUT)) {
			if (ipe.isAnnotationStyleDeclaration()) {
				return METHOD.getDelimiter();
			} else {
				return POINTCUT.getDelimiter();
			}
		} else if (kind.equals(IProgramElement.Kind.ADVICE)) {
			if (ipe.isAnnotationStyleDeclaration()) {
				return METHOD.getDelimiter();
			} else {
				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();
		} else if (kind == IProgramElement.Kind.FILE) {
			if (ipe.getName().endsWith(".class")) {
				return CLASSFILE.getDelimiter();
			} else if (ipe.getName().endsWith(".aj")) {
				return ASPECT_CU.getDelimiter();
			} else if (ipe.getName().endsWith(".java")) {
				return COMPILATIONUNIT.getDelimiter();
			} else {
				return empty;
			}
		}
		return empty;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy