00001 package edu.ksu.cis.bandera.abstraction;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 import java.io.*;
00036 import java.util.*;
00037 import ca.mcgill.sable.soot.*;
00038 import ca.mcgill.sable.soot.jimple.*;
00039 import edu.ksu.cis.bandera.abstraction.gui.*;
00040 import edu.ksu.cis.bandera.abstraction.options.*;
00041 public class Main {
00042
00043
00044
00045
00046 public static void main(java.lang.String[] args) throws Exception {
00047 boolean gui = false;
00048 int idx = 0;
00049 if ("--gui".equals(args[idx])) {
00050 gui = true;
00051 idx++;
00052 }
00053 if (args.length < 2 + idx) {
00054 System.out.println("Usage: java edu.ksu.cis.bandera.abstraction.Main [--gui | <abs-file>] <class-name>+ ");
00055 return;
00056 }
00057 String abstractionFilename = args[0];
00058 SootClassManager scm = new SootClassManager();
00059 PrintWriter pw = new PrintWriter(System.out);
00060 Vector classes = new Vector();
00061 for (int i = 1; i < args.length; i++) {
00062 SootClass sc = scm.getClass(args[i]);
00063 sc.resolveIfNecessary();
00064 sc.printTo(new BuildAndStoreBody(Jimple.v(), new StoredBody(ClassFile.v())), pw);
00065 classes.add(sc);
00066 }
00067 pw.flush();
00068 if (gui) {
00069 TypeGUI typeGUI = new TypeGUI();
00070 typeGUI.addWindowListener(new java.awt.event.WindowAdapter() {
00071 public void windowClosing(java.awt.event.WindowEvent e) {
00072 System.exit(0);
00073 };
00074 });
00075 typeGUI.setClasses(classes);
00076 typeGUI.setVisible(true);
00077 } else {
00078 System.out.println("Type Inference");
00079 System.out.println("==============");
00080 Hashtable options = OptionsSaverLoader.load(scm, new FileReader(abstractionFilename));
00081 if (options.get("WARNINGS") != null) {
00082 System.out.println("Warnings");
00083 System.out.println("--------");
00084 for (Iterator i = ((List) options.get("WARNINGS")).iterator(); i.hasNext();) {
00085 System.out.println(i.next());
00086 }
00087 System.out.println();
00088 }
00089 System.out.println(new edu.ksu.cis.bandera.abstraction.typeinference.TypeInference().type(scm, options));
00090 }
00091 }
00092 }