129 lines
4.7 KiB
Java
129 lines
4.7 KiB
Java
/*******************************************************************************
|
|
* Copyright (c) 2002 - 2006 IBM Corporation.
|
|
* 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:
|
|
* IBM Corporation - initial API and implementation
|
|
*******************************************************************************/
|
|
|
|
package com.ibm.wala.classLoader;
|
|
|
|
import java.io.IOException;
|
|
import java.io.Reader;
|
|
import java.util.Collection;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.NoSuchElementException;
|
|
|
|
import com.ibm.wala.ssa.SSAInstructionFactory;
|
|
import com.ibm.wala.types.ClassLoaderReference;
|
|
import com.ibm.wala.types.TypeName;
|
|
import com.ibm.wala.util.strings.Atom;
|
|
|
|
/**
|
|
* Base class for an object that represents a single Java classloader for analysis purposes.
|
|
*/
|
|
public interface IClassLoader {
|
|
/**
|
|
* Find and return the IClass defined by this class loader that corresponds to the given class name.
|
|
*
|
|
* @param className name of the class
|
|
* @return the IClass defined by this class loader that corresponds to the given class name, or null if not found.
|
|
*/
|
|
public abstract IClass lookupClass(TypeName className);
|
|
|
|
/**
|
|
* Return the ClassLoaderReference for this class loader.
|
|
*
|
|
* @return ClassLoaderReference
|
|
*/
|
|
public abstract ClassLoaderReference getReference();
|
|
|
|
/**
|
|
* @return an Iterator of all classes loaded by this loader
|
|
*/
|
|
public abstract Iterator<IClass> iterateAllClasses();
|
|
|
|
/**
|
|
* @return the number of classes in scope to be loaded by this loader
|
|
*/
|
|
public abstract int getNumberOfClasses();
|
|
|
|
/**
|
|
* @return the unique name that identifies this class loader.
|
|
*/
|
|
Atom getName();
|
|
|
|
/**
|
|
* @return the unique name that identifies the programming language from which this class loader loads code.
|
|
*/
|
|
Language getLanguage();
|
|
|
|
SSAInstructionFactory getInstructionFactory();
|
|
|
|
public abstract int getNumberOfMethods();
|
|
|
|
/**
|
|
* @param method The method for which information is desired
|
|
* @param offset an offset into the bytecode of the given method.
|
|
* @return name of the source file corresponding to the given offset in the given method. Note that
|
|
* this api allows a single method to arise from multiple source files, which is deliberate as it
|
|
* can happen in some languages.
|
|
*/
|
|
public abstract String getSourceFileName(IMethod method, int offset);
|
|
|
|
/**
|
|
* @param method The method for which information is desired
|
|
* @param offset an offset into the bytecode of the given method.
|
|
* @return input stream representing the source file for a given bytecode index of a given method,
|
|
* or null if not available
|
|
*/
|
|
public abstract Reader getSource(IMethod method, int offset);
|
|
|
|
/**
|
|
* @param klass the class for which information is desired.
|
|
* @return name of source file corresponding to the class, or null if not available
|
|
* @throws NoSuchElementException if this class was generated from more than one source file
|
|
* The assumption that a class is generated from a single source file is java
|
|
* specific, and will change in the future. In place of this API, use the version that takes
|
|
* a method and an offset, since that is now the granularity at which source file information
|
|
* will be recorded.
|
|
* SJF .. we should think about this deprecation. postponing deprecation for now.
|
|
*/
|
|
public abstract String getSourceFileName(IClass klass) throws NoSuchElementException;
|
|
|
|
/**
|
|
* @return input stream representing the source file for a class, or null if not available
|
|
* @throws NoSuchElementException if this class was generated from more than one source file
|
|
* The assumption that a class is generated from a single source file is java
|
|
* specific, and will change in the future. In place of this API, use the version that takes
|
|
* a method and an offset, since that is now the granularity at which source file information
|
|
* will be recorded.
|
|
* SJF .. we should think about this deprecation. postponing deprecation for now.
|
|
*/
|
|
public abstract Reader getSource(IClass klass) throws NoSuchElementException;
|
|
|
|
/**
|
|
* @return the parent IClassLoader, if any, or null
|
|
*/
|
|
public abstract IClassLoader getParent();
|
|
|
|
/**
|
|
* Initialize internal data structures.
|
|
*
|
|
* @throws IOException
|
|
* @throws IllegalArgumentException if modules is null
|
|
*/
|
|
public void init(List<Module> modules) throws IOException;
|
|
|
|
/**
|
|
* blow away references to any classes in the set
|
|
*
|
|
* @param toRemove Collection<IClass>
|
|
*/
|
|
public abstract void removeAll(Collection<IClass> toRemove);
|
|
}
|