diff src/main/gov/nasa/jpf/tool/PrintEvents.java @ 0:61d41facf527

initial v8 import (history reset)
author Peter Mehlitz <Peter.C.Mehlitz@nasa.gov>
date Fri, 23 Jan 2015 10:14:01 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/gov/nasa/jpf/tool/PrintEvents.java	Fri Jan 23 10:14:01 2015 -0800
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2014, United States Government, as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All rights reserved.
+ *
+ * The Java Pathfinder core (jpf-core) platform is licensed under the
+ * Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0. 
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package gov.nasa.jpf.tool;
+
+import gov.nasa.jpf.Config;
+import gov.nasa.jpf.JPFClassLoader;
+import gov.nasa.jpf.util.FileUtils;
+import gov.nasa.jpf.util.JPFSiteUtils;
+import gov.nasa.jpf.util.event.EventTree;
+
+
+/**
+ * very simple tool to print .util.script.EventTrees
+ * 
+ * <2do> this should use native_classpath / JPFClassLoader to load the EventTree
+ */
+public class PrintEvents {
+
+  static boolean printTree;
+  static boolean printPaths;
+  static String clsName;
+  
+  static void showUsage () {
+    System.out.println("usage:   'PrintEvents [<option>..] <className>'");
+    System.out.println("options:  -t  : print tree");
+    System.out.println("          -p  : print paths");
+  }
+
+  static boolean readOptions (String[] args) {
+    for (int i = 0; i < args.length; i++) {
+      String arg = args[i];
+
+      if ("-t".equals(arg)) {
+        printTree = true;
+      } else if ("-p".equals(arg)) {
+        printPaths = true;
+      } else if (arg.charAt(0) != '-') {
+          clsName = arg;
+          if (clsName.charAt(0) == '.'){
+            clsName = "gov.nasa.jpf" + clsName;
+          }
+      } else {
+        System.err.println("unknown option: " + arg);
+        showUsage();
+
+        return false;
+      }
+    }
+
+    return (clsName != null);
+  }
+
+  static String[] getTestPathElements (Config config){
+    String projectId = JPFSiteUtils.getCurrentProjectId();
+    
+    if (projectId != null) {
+      String testCpKey = projectId + ".test_classpath";
+      return  config.getCompactTrimmedStringArray(testCpKey);
+      
+    } else {
+      return new String[0];
+    }    
+  }
+  
+  static void addTestClassPath (JPFClassLoader cl, String[] testPathElements){
+    if (testPathElements != null) {
+      for (String pe : testPathElements) {
+        try {
+          cl.addURL(FileUtils.getURL(pe));
+        } catch (Throwable x) {
+          System.err.println("malformed test_classpath URL: " + pe);
+        }
+      }
+    }
+  }
+  
+  public static void main (String[] args){
+    if ((args.length == 0) || !readOptions(args)) {
+      showUsage();
+    }
+     
+    Config config = new Config(args);
+    String[] testPathElements = getTestPathElements(config);
+    JPFClassLoader cl = config.initClassLoader(RunTest.class.getClassLoader());
+    addTestClassPath( cl, testPathElements);
+
+    try {     
+      Class<EventTree> cls = (Class<EventTree>)cl.loadClass(clsName);
+      EventTree et = cls.newInstance();
+      
+      if (printTree){
+        System.out.println("---------------- event tree of " + clsName);
+        et.printTree();
+      }
+      
+      if (printPaths){
+        System.out.println("---------------- event paths of " + clsName);
+        et.printPaths();
+      }
+    } catch (ClassNotFoundException cnfx){
+      System.err.println("class not found: " + clsName);
+    } catch (NoClassDefFoundError ncdf){
+      System.err.println("class does not load: " + ncdf.getMessage());      
+    } catch (InstantiationException ex) {
+      System.err.println("cannot instantiate: " + ex.getMessage());      
+    } catch (IllegalAccessException ex) {
+      System.err.println("cannot instantiate: " + ex.getMessage());      
+    }
+  }
+}