if(visited.contains(signature)){
return;
}
visited.add(signature);
StringToType converter = new StringToType();
FieldSignatureUtil futil = new FieldSignatureUtil();
//load all virtual methods to be followed
ClassHierarchy class_hierarchy = RootbeerClassLoader.v().getClassHierarchy();
List<HierarchySignature> virt_methods = class_hierarchy.getVirtualMethods(signature);
for(HierarchySignature virt_method : virt_methods){
if(virt_method.equals(signature) == false){
queue.add(virt_method);
}
}
//if we should follow into method, don't
if(RootbeerClassLoader.v().dontFollow(signature)){
return;
}
m_currDfsInfo.addType(signature.getClassName());
m_currDfsInfo.addType(signature.getReturnType());
m_currDfsInfo.addMethod(signature.toString());
//go into the method
HierarchyValueSwitch value_switch = RootbeerClassLoader.v().getValueSwitch(signature);
for(Integer num : value_switch.getAllTypesInteger()){
String type_str = StringNumbers.v().getString(num);
Type type = converter.convert(type_str);
m_currDfsInfo.addType(type);
}
for(HierarchySignature method_sig : value_switch.getMethodRefsHierarchy()){
m_currDfsInfo.addMethod(signature.toString());
queue.add(method_sig);
}
for(String field_ref : value_switch.getFieldRefs()){
futil.parse(field_ref);
SootField soot_field = futil.getSootField();
m_currDfsInfo.addField(soot_field);
}
for(Integer num : value_switch.getInstanceOfsInteger()){
String type_str = StringNumbers.v().getString(num);
Type type = converter.convert(type_str);
m_currDfsInfo.addInstanceOf(type);
}
}