public class FastHierarchy
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
protected class |
FastHierarchy.Interval |
Modifier and Type | Field and Description |
---|---|
protected java.util.Map<SootClass,FastHierarchy.Interval> |
classToInterval
For each class (NOT interface), this map contains a Interval, which is a
pair of numbers giving a preorder and postorder ordering of classes in
the inheritance tree.
|
protected MultiMap<SootClass,SootClass> |
classToSubclasses
This map holds all key,value pairs such that value.getSuperclass() ==
key.
|
protected MultiMap<SootClass,SootClass> |
interfaceToAllImplementers
This map gives, for an interface, all concrete classes that implement
that interface and all its subinterfaces, but NOT their subclasses.
|
protected MultiMap<SootClass,SootClass> |
interfaceToAllSubinterfaces
This map is a transitive closure of interfaceToSubinterfaces, and each
set contains its superinterface itself.
|
protected MultiMap<SootClass,SootClass> |
interfaceToImplementers
This map holds all key,value pairs such that value is a class (NOT an
interface) and key is in value.getInterfaces().
|
protected MultiMap<SootClass,SootClass> |
interfaceToSubinterfaces
This map holds all key,value pairs such that value is an interface and
key is in value.getInterfaces().
|
protected Scene |
sc |
Constructor and Description |
---|
FastHierarchy()
Constructs a hierarchy from the current scene.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
canStoreClass(SootClass child,
SootClass parent)
Given an object of declared type child, returns true if the object can be
stored in a variable of type parent.
|
boolean |
canStoreType(Type child,
Type parent)
Given an object of declared type child, returns true if the object can be
stored in a variable of type parent.
|
protected int |
dfsVisit(int start,
SootClass c) |
java.util.Set<SootClass> |
getAllImplementersOfInterface(SootClass parent)
For an interface parent (MUST be an interface), returns set of all
implementers of it but NOT their subclasses.
|
java.util.Set<SootClass> |
getAllSubinterfaces(SootClass parent)
For an interface parent (MUST be an interface), returns set of all
subinterfaces.
|
java.util.Collection<SootClass> |
getSubclassesOf(SootClass c)
Gets the direct subclasses of a given class.
|
boolean |
isSubclass(SootClass child,
SootClass parent)
Return true if class child is a subclass of class parent, neither of them
being allowed to be interfaces.
|
java.util.Set<SootMethod> |
resolveAbstractDispatch(SootClass abstractType,
SootMethod m)
Given an object of declared type C, returns the methods which could be
called on an o.f() invocation.
|
java.util.Collection<SootMethod> |
resolveConcreteDispatch(java.util.Collection<Type> concreteTypes,
SootMethod m,
RefType declaredTypeOfBase) |
SootMethod |
resolveConcreteDispatch(SootClass concreteType,
SootMethod m)
Given an object of actual type C (o = new C()), returns the method which
will be called on an o.f() invocation.
|
java.util.Collection<SootMethod> |
resolveConcreteDispatchWithoutFailing(java.util.Collection<Type> concreteTypes,
SootMethod m,
RefType declaredTypeOfBase) |
SootMethod |
resolveSpecialDispatch(SpecialInvokeExpr ie,
SootMethod container)
Returns the target for the given SpecialInvokeExpr.
|
protected MultiMap<SootClass,SootClass> classToSubclasses
protected MultiMap<SootClass,SootClass> interfaceToSubinterfaces
protected MultiMap<SootClass,SootClass> interfaceToImplementers
protected MultiMap<SootClass,SootClass> interfaceToAllSubinterfaces
protected MultiMap<SootClass,SootClass> interfaceToAllImplementers
protected java.util.Map<SootClass,FastHierarchy.Interval> classToInterval
protected Scene sc
public FastHierarchy()
protected int dfsVisit(int start, SootClass c)
public boolean isSubclass(SootClass child, SootClass parent)
public java.util.Set<SootClass> getAllImplementersOfInterface(SootClass parent)
public java.util.Set<SootClass> getAllSubinterfaces(SootClass parent)
parent
- the parent interface.public boolean canStoreType(Type child, Type parent)
protected boolean canStoreClass(SootClass child, SootClass parent)
public java.util.Collection<SootMethod> resolveConcreteDispatchWithoutFailing(java.util.Collection<Type> concreteTypes, SootMethod m, RefType declaredTypeOfBase)
public java.util.Collection<SootMethod> resolveConcreteDispatch(java.util.Collection<Type> concreteTypes, SootMethod m, RefType declaredTypeOfBase)
public java.util.Set<SootMethod> resolveAbstractDispatch(SootClass abstractType, SootMethod m)
public SootMethod resolveConcreteDispatch(SootClass concreteType, SootMethod m)
public SootMethod resolveSpecialDispatch(SpecialInvokeExpr ie, SootMethod container)