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

org.aspectj.weaver.model.AsmRelationshipUtils 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.weaver.model;

import org.aspectj.weaver.patterns.AndPointcut;
import org.aspectj.weaver.patterns.OrPointcut;
import org.aspectj.weaver.patterns.Pointcut;
import org.aspectj.weaver.patterns.ReferencePointcut;

/**
 * Provides utility methods for generating details for IProgramElements used when creating the model both from source (via
 * AsmElementFormatter.visit(..)) and when filling in the model for binary aspects (via AsmRelationshipProvider bug 145963)
 */
public class AsmRelationshipUtils {

	// public static final String UNDEFINED="";
	public static final String DECLARE_PRECEDENCE = "precedence";
	public static final String DECLARE_SOFT = "soft";
	public static final String DECLARE_PARENTS = "parents";
	public static final String DECLARE_WARNING = "warning";
	public static final String DECLARE_ERROR = "error";
	public static final String DECLARE_UNKNONWN = "";
	public static final String POINTCUT_ABSTRACT = "";
	public static final String POINTCUT_ANONYMOUS = "";
	public static final String DOUBLE_DOTS = "..";
	public static final int MAX_MESSAGE_LENGTH = 18;
	public static final String DEC_LABEL = "declare";

	/**
	 * Generates the declare message used in the details, for example if the declare warning statement has message
	 * "There should be no printlns" will return 'declare warning: "There should be n.."'
	 */
	public static String genDeclareMessage(String message) {
		int length = message.length();
		if (length < MAX_MESSAGE_LENGTH) {
			return message;
		} else {
			return message.substring(0, MAX_MESSAGE_LENGTH - 1) + DOUBLE_DOTS;
		}
	}

	/**
	 * Generates the pointcut details for the given pointcut, for example an anonymous pointcut will return '<anonymous pointcut>'
	 * and a named pointcut called p() will return 'p()..'
	 */
	public static String genPointcutDetails(Pointcut pcd) {
		StringBuilder details = new StringBuilder();
		if (pcd instanceof ReferencePointcut) {
			ReferencePointcut rp = (ReferencePointcut) pcd;
			details.append(rp.name).append(DOUBLE_DOTS);
		} else if (pcd instanceof AndPointcut) {
			AndPointcut ap = (AndPointcut) pcd;
			if (ap.getLeft() instanceof ReferencePointcut) {
				details.append(ap.getLeft().toString()).append(DOUBLE_DOTS);
			} else {
				details.append(POINTCUT_ANONYMOUS).append(DOUBLE_DOTS);
			}
		} else if (pcd instanceof OrPointcut) {
			OrPointcut op = (OrPointcut) pcd;
			if (op.getLeft() instanceof ReferencePointcut) {
				details.append(op.getLeft().toString()).append(DOUBLE_DOTS);
			} else {
				details.append(POINTCUT_ANONYMOUS).append(DOUBLE_DOTS);
			}
		} else {
			details.append(POINTCUT_ANONYMOUS);
		}
		return details.toString();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy