blob: e4159dce8aec35b4a9f4c95ef43bccbe10198e17 [file] [log] [blame]
/* *******************************************************************
* 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.Serializable;
import java.util.List;
import java.util.Set;
/**
* Maps from a program element handles to a list of relationships between that element and other program elements. Each element in
* the list or relationships is uniquely identified by a kind and a relationship name. For example, the advice affecting a
* particular shadow (e.g. method call) can be retrieved by calling <CODE>get</CODE> on the handle for that method. Symmetrically
* the method call shadows that an advice affects can be retrieved.
* <p>
*
* <p>
* The elements can be stored and looked up as IProgramElement(s), in which cases the element corresponding to the handle is looked
* up in the containment hierarchy.
*
* <p>
* put/get methods taking IProgramElement as a parameter are for convenience only. They work identically to calling their
* counterparts with IProgramElement.getIdentifierHandle()
*
* @author Mik Kersten
* @author Andy Clement
*/
public interface IRelationshipMap extends Serializable {
/**
* @return list of relationships or null if the source element has no relationships
*/
public List<IRelationship> get(IProgramElement sourceProgramElement);
/**
* @return list of relationships or null if the source element has no relationships
*/
public List<IRelationship> get(String sourceHandle);
/**
* Return a relationship matching the kind and name for the given element.
*
* @return null if the relationship is not found.
*/
public IRelationship get(IProgramElement source, IRelationship.Kind kind, String relationshipName, boolean runtimeTest,
boolean createIfMissing);
/**
* Return a relationship matching the kind and name for the given element.
*
* @return null if the relationship is not found.
*/
public IRelationship get(IProgramElement source, IRelationship.Kind kind, String relationshipName);
/**
* Return a relationship matching the kind and name for the given element. Creates the relationship if not found.
*
* @return null if the relationship is not found.
*/
public IRelationship get(String source, IRelationship.Kind kind, String relationshipName, boolean runtimeTest,
boolean createIfMissing);
public void put(IProgramElement source, IRelationship relationship);
public void put(String handle, IRelationship relationship);
public boolean remove(String handle, IRelationship relationship);
public void removeAll(String source);
/**
* Clear all of the relationships in the map.
*/
public void clear();
public Set<String> getEntries();
}