org.aspectj.asm.IRelationship.java Source code

Java tutorial

Introduction

Here is the source code for org.aspectj.asm.IRelationship.java

Source

/* *******************************************************************
 * 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];
        }
    }

}