package kr.ac.snu.selab.soot.analyzer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import kr.ac.snu.selab.soot.graph.MyNode;
import kr.ac.snu.selab.soot.util.XMLWriter;
import org.apache.log4j.Logger;
import soot.SootMethod;
import soot.Unit;
public class MyMethod extends MyNode {
private static Logger log = Logger.getLogger(MyMethod.class);
private boolean isCaller;
private boolean isCreator;
private boolean isInjector;
private List<Unit> callStatementList;
private List<Unit> createStatementList;
public MyMethod(SootMethod aMethod) {
super(aMethod);
isCaller = false;
isCreator = false;
isInjector = false;
callStatementList = new ArrayList<Unit>();
createStatementList = new ArrayList<Unit>();
}
public int hashCode() {
return element.toString().hashCode();
}
public SootMethod getMethod() {
return (SootMethod) element;
}
public List<Unit> getCallStatementList() {
return callStatementList;
}
public List<Unit> getCreateStatementList() {
return callStatementList;
}
public boolean isCaller() {
return isCaller;
}
public void setIsCaller(boolean b) {
isCaller = b;
}
public boolean isCreator() {
return isCreator;
}
public void setIsCreator(boolean b) {
isCreator = b;
}
public boolean isStore() {
return false;
}
public void setIsStore(boolean value) {
}
public boolean isInjector() {
return isInjector;
}
public void setIsInjector(boolean value) {
isInjector = value;
}
public void addCallStatement(Unit aUnit) {
callStatementList.add(aUnit);
}
public void addCreateStatement(Unit aUnit) {
createStatementList.add(aUnit);
}
@Override
public void writeXML(XMLWriter writer) {
try {
writer.startElement("Method");
writer.simpleElement("ToString", toString());
writer.startElement("RoleList");
if (isCaller()) {
writer.simpleElement("Role", "Caller");
writer.startElement("CallStatementList");
for (Unit callStatement : callStatementList) {
writer.simpleElement("CallStatement",
callStatement.toString());
}
writer.endElement();
}
if (isCreator()) {
writer.simpleElement("Role", "Creator");
writer.startElement("CreateStatementList");
for (Unit createStatement : createStatementList) {
writer.simpleElement("CreateStatement",
createStatement.toString());
}
writer.endElement();
}
if (isInjector()) {
writer.simpleElement("Role", "Injector");
}
writer.endElement();
writer.endElement();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}