1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 package org.kit.furia.fragment.soot.representation.internal;
32
33 import soot.*;
34 import org.kit.furia.fragment.soot.representation.*;
35 import soot.jimple.internal.*;
36 import soot.jimple.*;
37 import java.util.*;
38
39 public class FLookupSwitchStmt extends JLookupSwitchStmt implements Qable
40 {
41
42
43
44 private static final long serialVersionUID = 1519655698102620353L;
45
46
47 private static UnitBox[] getTargetBoxesArray(List targets)
48 {
49 UnitBox[] targetBoxes = new UnitBox[targets.size()];
50
51 for(int i = 0; i < targetBoxes.length; i++)
52 targetBoxes[i] = Frimp.v().newStmtBox((Stmt) targets.get(i));
53
54 return targetBoxes;
55 }
56
57 public FLookupSwitchStmt(Value key, List lookupValues, List targets, Unit defaultTarget)
58 {
59 super(Frimp.v().newExprBox(key),
60 lookupValues, getTargetBoxesArray(targets),
61 Frimp.v().newStmtBox(defaultTarget));
62 }
63
64
65 public Object clone()
66 {
67 int lookupValueCount = getLookupValues().size();
68 List clonedLookupValues = new ArrayList(lookupValueCount);
69
70 for( int i = 0; i < lookupValueCount ;i++) {
71 clonedLookupValues.add(i, Integer.valueOf(getLookupValue(i)));
72 }
73
74 return new FLookupSwitchStmt(Frimp.cloneIfNecessary(getKey()), clonedLookupValues, getTargets(), getDefaultTarget());
75 }
76
77 public String toQ() {
78
79 assert false : "This method must not be called, we already took care of case expressions";
80 return null;
81 }
82
83 }