com.ibm.wala.ipa.summaries
Class BypassSyntheticClassLoader

java.lang.Object
  extended by com.ibm.wala.ipa.summaries.BypassSyntheticClassLoader
All Implemented Interfaces:
IClassLoader

public class BypassSyntheticClassLoader
extends java.lang.Object
implements IClassLoader

This class represents class loaders that introduce classes that do not exist in the actual application being analyzed. They may be abstract summaries of unanalyzed library code, wrappers that encode J2EE specialized behavior or other invented classes. The intention is that there be (at most) one such classloader in a given class hierarchy, and that it be referenced using the "Synthetic" classloader reference. Furthermore, it is required that this synthetic loader be a child loader of the Primordial, Extension and Application loaders. This special classloader has some interactions with the hierarchy for, while the classes it loads are normal-seeming IClass objects, unlike the other loaders, its set of classes is not fixed, causing special cases in code that caches hierarchy data. Also note that this causes the getNumberfClasses and iterateAllClasses methods to behave differently for those of other classloaders. Code that wants to introduce synthetic classes uses the registerClass method, giving it an Atom which is the class name, and an IClass which is the class to load. Since the synthetic loader musat be a child of the others, it would be very bad to use an existing name for a new synthetic class. Class lookup works just as for any other classloader.


Constructor Summary
BypassSyntheticClassLoader(ClassLoaderReference me, IClassLoader parent, SetOfClasses exclusions, IClassHierarchy cha, WarningSet warnings)
           
 
Method Summary
 Language getLanguage()
           
 Atom getName()
           
 int getNumberOfClasses()
           
 int getNumberOfMethods()
           
 IClassLoader getParent()
           
 ClassLoaderReference getReference()
          Return the ClassLoaderReference for this class loader.
 java.lang.String getSourceFileName(IClass klass)
           
 void init(java.util.Set modules)
           
 java.util.Iterator<IClass> iterateAllClasses()
           
 IClass lookupClass(TypeName className, IClassHierarchy cha)
          Find and return the IClass defined by this class loader that corresponds to the given class name.
 void registerClass(TypeName className, IClass theClass)
          Register the existence of a new synthetic class
 void removeAll(java.util.Collection<IClass> toRemove)
          blow away references to any classes in the set
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BypassSyntheticClassLoader

public BypassSyntheticClassLoader(ClassLoaderReference me,
                                  IClassLoader parent,
                                  SetOfClasses exclusions,
                                  IClassHierarchy cha,
                                  WarningSet warnings)
Method Detail

lookupClass

public IClass lookupClass(TypeName className,
                          IClassHierarchy cha)
Description copied from interface: IClassLoader
Find and return the IClass defined by this class loader that corresponds to the given class name.

Specified by:
lookupClass in interface IClassLoader
Parameters:
className - name of the class
Returns:
the IClass defined by this class loader that corresponds to the given class name, or null if not found.

registerClass

public void registerClass(TypeName className,
                          IClass theClass)
Register the existence of a new synthetic class

Parameters:
className -
theClass -

getReference

public ClassLoaderReference getReference()
Return the ClassLoaderReference for this class loader.

Specified by:
getReference in interface IClassLoader
Returns:
ClassLoaderReference

iterateAllClasses

public java.util.Iterator<IClass> iterateAllClasses()
Specified by:
iterateAllClasses in interface IClassLoader
Returns:
an Iterator of all classees loaded by this loader

getNumberOfClasses

public int getNumberOfClasses()
Specified by:
getNumberOfClasses in interface IClassLoader
Returns:
the number of classes in scope to be loaded by this loader

getName

public Atom getName()
Specified by:
getName in interface IClassLoader
Returns:
the unique name that identifies this class loader.

getLanguage

public Language getLanguage()
Specified by:
getLanguage in interface IClassLoader
Returns:
the unique name that identifies the programming language from which this class loader loads code.

getNumberOfMethods

public int getNumberOfMethods()
Specified by:
getNumberOfMethods in interface IClassLoader

getSourceFileName

public java.lang.String getSourceFileName(IClass klass)
Specified by:
getSourceFileName in interface IClassLoader
Returns:
name of source file corresponding to the class

getParent

public IClassLoader getParent()
Specified by:
getParent in interface IClassLoader
Returns:
the parent IClassLoader, if any, or null
See Also:
IClassLoader.getParent()

init

public void init(java.util.Set modules)
Specified by:
init in interface IClassLoader

removeAll

public void removeAll(java.util.Collection<IClass> toRemove)
Description copied from interface: IClassLoader
blow away references to any classes in the set

Specified by:
removeAll in interface IClassLoader
Parameters:
toRemove - Collection