MCPcopy Create free account
hub / github.com/LFYSec/MScan / MethodIRBuilder

Class MethodIRBuilder

src/main/java/pascal/taie/frontend/soot/MethodIRBuilder.java:59–918  ·  view source on GitHub ↗

Converts Jimple to Tai-e IR.

Source from the content-addressed store, hash-verified

57 * Converts Jimple to Tai-e IR.
58 */
59class MethodIRBuilder extends AbstractStmtSwitch<Void> {
60
61 private static final Logger logger = LogManager.getLogger(MethodIRBuilder.class);
62
63 private final JMethod method;
64
65 private final Converter converter;
66
67 private VarManager varManager;
68
69 private Set<Var> returnVars;
70
71 private List<Stmt> stmts;
72
73 private List<ExceptionEntry> exceptionEntries;
74
75 MethodIRBuilder(JMethod method, Converter converter) {
76 this.method = method;
77 this.converter = converter;
78 }
79
80 IR build() {
81 SootMethod m = (SootMethod) method.getMethodSource();
82 Body body = m.retrieveActiveBody();
83 m.releaseActiveBody(); // release body to save memory
84 varManager = new VarManager(method, converter);
85 if (method.getReturnType().equals(VOID)) {
86 returnVars = Set.of();
87 } else {
88 returnVars = Sets.newLinkedSet();
89 }
90 stmts = new ArrayList<>();
91 if (!method.isStatic()) {
92 buildThis(body.getThisLocal());
93 }
94 buildParams(body.getParameterLocals());
95 preprocessTemps(body,
96 tempToDef = Maps.newHybridMap(),
97 unusedInvokeTempRets = Sets.newHybridSet());
98 buildStmts(body);
99 buildExceptionEntries(body);
100 return new DefaultIR(method,
101 varManager.getThis(), varManager.getParams(), returnVars,
102 varManager.getVars(), stmts, exceptionEntries);
103 }
104
105 private void buildThis(Local thisLocal) {
106 varManager.addThis(thisLocal);
107 }
108
109 private void buildParams(List<Local> params) {
110 varManager.addParams(params);
111 }
112
113 private void buildStmts(Body body) {
114 if (!body.getTraps().isEmpty()) {
115 trapUnits = Sets.newSet();
116 body.getTraps().forEach(trap -> {

Callers

nothing calls this directly

Calls 3

newHybridMapMethod · 0.95
newHybridSetMethod · 0.95
ofMethod · 0.65

Tested by

no test coverage detected