private static Map/*<methodName, Map<typeName, Set<Local>>>*/ getLocals() {
		Map classMap = new HashMap();
		Collection classes = Scene.v().getApplicationClasses();
		Iterator ci = classes.iterator();
		
		while (ci.hasNext()) {
			SootClass sc = (SootClass) ci.next();
			Map<String, Map> methodMap = new HashMap<String, Map>();
			Iterator mi = sc.getMethods().iterator();

			while (mi.hasNext()) {
				SootMethod sm = (SootMethod) mi.next();
				Map<String, Set<Local>> typeMap = new HashMap();
				if (sm.isConcrete()) {
					JimpleBody jb = (JimpleBody) sm.retrieveActiveBody();
					Iterator ui = jb.getUnits().iterator();
					while (ui.hasNext()) {
						Stmt s = (Stmt) ui.next();
						Iterator bi = s.getDefBoxes().iterator();
						while (bi.hasNext()) {
							Object o = bi.next();
							if (o instanceof ValueBox) {
								Value v = ((ValueBox) o).getValue();
								if (v instanceof Local) {
									Local l = (Local) v;
									String type = l.getType().toString();
									if (typeMap.containsKey(type)) {
										typeMap.get(type).add(l);
									} else {
										Set set = new HashSet();
										set.add(l);
										typeMap.put(type, set);
									}
								}
							}
						}
					}
				}
				methodMap.put(sm.getName(), typeMap);
			}
			classMap.put(sc.getName(), methodMap);
		}
		return classMap;
	}