Java tutorial
/* ******************************************************************* * Copyright (c) 2003 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://www.eclipse.org/legal/epl-v10.html * * 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 { public String getName(); public Kind getKind(); public void addTarget(String handle); public List<String> getTargets(); public String getSourceHandle(); public boolean hasRuntimeTest(); public boolean isAffects(); public static 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 (int i = 0; i < ALL.length; i++) { if (ALL[i].name.equals(stringFormOfRelationshipKind)) { return ALL[i]; } } 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]; } } }