package kr.ac.snu.selab.soot.analyzer; import java.io.IOException; import kr.ac.snu.selab.soot.graph.refgraph.LocalInfoNode; import kr.ac.snu.selab.soot.util.XMLWriter; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; import soot.SootClass; import soot.SootField; import soot.SootMethod; import soot.Unit; public class Role { private static Logger log = Logger.getLogger(Role.class); private String roleName; private Unit unit; private SootClass declaringClass; private SootMethod declaringMethod; private SootField declaringField; private SootClass interfaceType; private SootClass concreteType; public Role() { setRoleName(null); setUnit(null); setDeclaringClass(null); setDeclaringMethod(null); setDeclaringField(null); setInterfaceType(null); setConcreteType(null); } public Role(Unit aUnit, SootClass anInterfaceType) { setRoleName(null); setUnit(aUnit); setDeclaringClass(null); setDeclaringMethod(null); setDeclaringField(null); setInterfaceType(anInterfaceType); setConcreteType(null); } @Override public int hashCode() { HashCodeBuilder builder = new HashCodeBuilder(); builder.append(roleName); builder.append(unit); builder.append(declaringClass); builder.append(declaringMethod); builder.append(interfaceType); builder.append(concreteType); return builder.toHashCode(); } public String roleName() { return roleName; } public void setRoleName(String aRoleName) { roleName = aRoleName; } public Unit unit() { return unit; } public void setUnit(Unit aUnit) { unit = aUnit; } public SootClass interfaceType() { return interfaceType; } public void setInterfaceType(SootClass aType) { interfaceType = aType; } public SootClass declaringClass() { return declaringClass; } public void setDeclaringClass(SootClass aClass) { declaringClass = aClass; } public SootMethod declaringMethod() { return declaringMethod; } public void setDeclaringMethod(SootMethod aMethod) { declaringMethod = aMethod; } public SootField declaringField() { return declaringField; } public void setDeclaringField(SootField aField) { declaringField = aField; } public SootClass concreteType() { return concreteType; } public void setConcreteType(SootClass aType) { concreteType = aType; } public String toString() { String result; String roleNameStr = "(" + roleName() + ")"; String declaringMethodStr = ""; String declaringFieldStr = ""; if (declaringMethod() != null) { declaringMethodStr = declaringMethod().getSignature(); } else if (declaringField() != null) { declaringFieldStr = declaringField().getSignature(); } result = roleNameStr + declaringMethodStr + declaringFieldStr; return result; } public void writeXML(XMLWriter writer) { try { writer.simpleElement("Role", toString()); } catch (IOException e) { log.error(e.getMessage(), e); } } }