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

org.aspectj.asm.IRelationship 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) 2003 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:
 *     Mik Kersten     initial implementation
 * ******************************************************************/
package org.aspectj.asm;

import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.List;

/**
 * A relationship has a name (e.g. 'declare warning') and some set of affected targets.
 *
 * @author Mik Kersten
 * @author Andy Clement
 */
public interface IRelationship extends Serializable {

	String getName();

	Kind getKind();

	void addTarget(String handle);

	List getTargets();

	String getSourceHandle();

	boolean hasRuntimeTest();

	boolean isAffects();

	class Kind implements Serializable { // typesafe enum

		private static final long serialVersionUID = -2691351740214705220L;

		public static final Kind DECLARE_WARNING = new Kind("declare warning");
		public static final Kind DECLARE_ERROR = new Kind("declare error");
		public static final Kind ADVICE_AROUND = new Kind("around advice");
		public static final Kind ADVICE_AFTERRETURNING = new Kind("after returning advice");
		public static final Kind ADVICE_AFTERTHROWING = new Kind("after throwing advice");
		public static final Kind ADVICE_AFTER = new Kind("after advice");
		public static final Kind ADVICE_BEFORE = new Kind("before advice");
		public static final Kind ADVICE = new Kind("advice");
		public static final Kind DECLARE = new Kind("declare");
		public static final Kind DECLARE_INTER_TYPE = new Kind("inter-type declaration");
		public static final Kind USES_POINTCUT = new Kind("uses pointcut");
		public static final Kind DECLARE_SOFT = new Kind("declare soft");

		public static final Kind[] ALL = { DECLARE_WARNING, DECLARE_ERROR, ADVICE_AROUND, ADVICE_AFTERRETURNING,
				ADVICE_AFTERTHROWING, ADVICE_AFTER, ADVICE_BEFORE, ADVICE, DECLARE, DECLARE_INTER_TYPE, USES_POINTCUT, DECLARE_SOFT };

		private final String name;

		public boolean isDeclareKind() {
			return this == DECLARE_WARNING || this == DECLARE_ERROR || this == DECLARE || this == DECLARE_INTER_TYPE
					|| this == DECLARE_SOFT;
		}

		public String getName() {
			return name;
		}

		/**
		 * Return the Kind of the relationship that is passed in by name.
		 *
		 * @param stringFormOfRelationshipKind the relationship name, eg. 'declare warning', 'declare error', etc.
		 * @return the Kind instance
		 */
		public static Kind getKindFor(String stringFormOfRelationshipKind) {
			for (Kind kind : ALL) {
				if (kind.name.equals(stringFormOfRelationshipKind)) {
					return kind;
				}
			}
			return null;
		}

		private Kind(String name) {
			this.name = name;
		}

		public String toString() {
			return name;
		}

		// The 4 declarations below are necessary for serialization
		private static int nextOrdinal = 0;
		private final int ordinal = nextOrdinal++;

		private Object readResolve() throws ObjectStreamException {
			return ALL[ordinal];
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy