1 19 20 25 26 27 package soot.jimple.toolkits.typing; 28 29 import soot.*; 30 import soot.options.*; 31 import soot.jimple.*; 32 import soot.util.*; 33 import java.util.*; 34 import java.util.*; 35 36 39 public class TypeAssigner extends BodyTransformer 40 { 41 public TypeAssigner( Singletons.Global g ) {} 42 public static TypeAssigner v() { return G.v().soot_jimple_toolkits_typing_TypeAssigner(); } 43 44 45 protected void internalTransform(Body b, String phaseName, Map options) 46 { 47 if(b == null) 48 { 49 throw new NullPointerException (); 50 } 51 52 Date start = new Date(); 53 54 if (Options.v().verbose()) 55 G.v().out.println("[TypeAssigner] typing system started on "+start); 56 57 TypeResolver.resolve((JimpleBody)b, Scene.v()); 58 59 Date finish = new Date(); 60 if (Options.v().verbose()) 61 { 62 long runtime = finish.getTime()-start.getTime(); 63 long mins = runtime/60000; 64 long secs = (runtime%60000)/1000; 65 G.v().out.println("[TypeAssigner] typing system ended. It took "+mins+" mins and "+secs+" secs."); 66 } 67 68 if(typingFailed((JimpleBody) b)) 69 throw new RuntimeException ("type inference failed!"); 70 } 71 private boolean typingFailed(JimpleBody b) 72 { 73 { 75 Iterator localIt = b.getLocals().iterator(); 76 77 while(localIt.hasNext()) 78 { 79 Local l = (Local) localIt.next(); 80 81 if(l.getType().equals(UnknownType.v()) || 82 l.getType().equals(ErroneousType.v())) 83 { 84 return true; 85 } 86 } 87 } 88 89 return false; 90 } 91 92 93 } 94 95 | Popular Tags |