1
2
3
4
5
6 package org.kit.furia.fragment.soot;
7 import java.util.Iterator;
8 import java.util.LinkedList;
9 import java.util.List;
10 import java.util.Map;
11 import java.util.Vector;
12
13 import soot.*;
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 public class BodyStealer extends BodyTransformer {
39
40 private String signature;
41 private boolean found;
42
43 private List<Body> bodies;
44 private boolean getAll = false;
45
46 public BodyStealer(){
47 this("");
48 getAll = true;
49
50 }
51
52 public void reset(){
53 found = false;
54 signature = "";
55
56 getAll = true;
57 bodies = new LinkedList<Body>();
58 }
59
60
61
62 public BodyStealer(String methodSignature){
63 signature = methodSignature;
64
65 found = false;
66 bodies = new LinkedList<Body>();
67 }
68
69 public BodyStealer(String className, String methodSignature){
70 this("<" + className + ": " + methodSignature + ">");
71 }
72
73 protected void addBody(Body b){
74
75 bodies.add(b);
76
77 }
78
79
80
81
82 protected void internalTransform(Body b, String phaseName, Map options) {
83
84
85
86 if(getAll ||b.getMethod().getSignature().equals(signature) ){
87
88 addBody(b);
89 found = true;
90
91 }
92 }
93
94
95
96
97
98
99 public void gettAll(boolean getAll){
100 this.getAll = getAll;
101 }
102
103
104
105
106 public String getSignature() {
107 return signature;
108 }
109
110
111
112
113 public boolean isFound() {
114 return found;
115 }
116
117
118 public Iterator<Body> getIterator(){
119 return bodies.iterator();
120 }
121
122 }