blob: 6674cdaea7d333b34810ab32df8e52b744017147 [file] [log] [blame]
/* *******************************************************************
* Copyright (c) 2003,2010 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
* Andy Clement
* ******************************************************************/
package org.aspectj.asm;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.aspectj.asm.internal.ProgramElement;
import org.aspectj.bridge.ISourceLocation;
/**
* @author Mik Kersten
* @author Andy Clement
*/
public interface IHierarchy extends Serializable {
public static final IProgramElement NO_STRUCTURE = new ProgramElement(null, "<build to view structure>",
IProgramElement.Kind.ERROR, null);
public IProgramElement getElement(String handle);
public IProgramElement getRoot();
public void setRoot(IProgramElement root);
public void addToFileMap(String canonicalFilePath, IProgramElement compilationUnitProgramElement);
public boolean removeFromFileMap(String canonicalFilePath);
public void setFileMap(HashMap<String, IProgramElement> fileMap);
public Object findInFileMap(Object key);
public Set<Map.Entry<String, IProgramElement>> getFileMapEntrySet();
public boolean isValid();
public IProgramElement findElementForHandle(String handle);
public IProgramElement findElementForHandleOrCreate(String handle, boolean create);
/**
* Returns the first match
*
* @param parent
* @param kind not null
* @return null if not found
*/
public IProgramElement findElementForSignature(IProgramElement parent, IProgramElement.Kind kind, String signature);
/**
* Returns the first match
*
* @param parent
* @param kind not null
* @return null if not found
*/
public IProgramElement findElementForLabel(IProgramElement parent, IProgramElement.Kind kind, String label);
/**
* @param packageName if null default package is searched
* @param className can't be null
*/
public IProgramElement findElementForType(String packageName, String typeName);
/**
* @param sourceFilePath modified to '/' delimited path for consistency
* @return a new structure node for the file if it was not found in the model
*/
public IProgramElement findElementForSourceFile(String sourceFile);
/**
* TODO: discriminate columns
*/
public IProgramElement findElementForSourceLine(ISourceLocation location);
/**
* Never returns null
*
* @param sourceFilePath canonicalized path for consistency
* @param lineNumber if 0 or 1 the corresponding file node will be returned
* @return a new structure node for the file if it was not found in the model
*/
public IProgramElement findElementForSourceLine(String sourceFilePath, int lineNumber);
public IProgramElement findElementForOffSet(String sourceFilePath, int lineNumber, int offSet);
public String getConfigFile();
public void setConfigFile(String configFile);
public void flushTypeMap();
public void flushHandleMap();
public void updateHandleMap(Set<String> deletedFiles);
/**
* For a specified node, check if any of the children more accurately represent the specified line.
*
* @param node where to start looking
* @param lineno the line number
* @return any closer match below 'node' or null if nothing is a more accurate match
*/
public IProgramElement findCloserMatchForLineNumber(IProgramElement node, int lineno);
/**
* Discover the node representing a particular source file.
*
* @param node where in the model to start looking (usually the root on the initial call)
* @param sourcefilePath the source file being searched for
* @return the node representing that source file or null if it cannot be found
*/
public IProgramElement findNodeForSourceFile(IProgramElement node, String sourcefilePath);
}