From 8848a0e91422b2d416d31a149dc55ca9c7a96d24 Mon Sep 17 00:00:00 2001
From: Leandro Watanabe <leandrow@google.com>
Date: Thu, 12 Apr 2018 14:25:19 -0700
Subject: [PATCH 1/3] Filter classes for static analysis

---
 dacapo/run.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/dacapo/run.py b/dacapo/run.py
index a866764..8a9a6ce 100644
--- a/dacapo/run.py
+++ b/dacapo/run.py
@@ -100,8 +100,9 @@ class Run(object):
       parser = Parser()
       cmd = self._cmd_builder.construct_static_analysis_cmd(bm)
       out = util.execute_cmd(cmd)
-      results, _, _ = parser.parse_static_analysis(out)
-      self._run_loaded(bm, results)
+      results, classes, _ = parser.parse_static_analysis(out)
+      filter_results = self._filtered_classes(results, classes)
+      self._run_loaded(bm, filter_results)
     else:
       self._run_from_jar(bm, self._cmd_builder.dacapo)
 
@@ -149,6 +150,16 @@ class Run(object):
 
     self.report.add_static_analysis(bm, results)
 
+  def _filtered_classes(self, results, classes):
+    """Returns a map with classes that had a method executed."""
+    filtered_results = {}
+
+    for class_name, jar_name in results.iteritems():
+      if class_name in classes:
+        filtered_results[class_name] = jar_name
+
+    return filtered_results
+
   def _get_classes_from_jar(self, jar_file):
     """Gets all of the classes from a jar, including classes in nested jars.
 
-- 
GitLab


From 4556adec4177bd1e1ad67377393e50c9c7a55a8f Mon Sep 17 00:00:00 2001
From: Leandro Watanabe <leandrow@google.com>
Date: Fri, 13 Apr 2018 16:51:32 -0700
Subject: [PATCH 2/3] Added test for new feature

---
 tests/run_test.py | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/tests/run_test.py b/tests/run_test.py
index 54cbd18..b20491d 100644
--- a/tests/run_test.py
+++ b/tests/run_test.py
@@ -70,10 +70,10 @@ class TestRun(unittest.TestCase):
 
   @mock.patch('dacapo.util.execute_cmd')
   def test_run_ckjm(self, mock_execute_cmd):
-    loaded_classes = '[Loaded Bar.class from file:foo.jar]'
+    execution_output = 'ignore'
     ckjm_output = '''Bar 1 2 3 4 5 6 7 8'''
 
-    mock_execute_cmd.side_effect = [loaded_classes, ckjm_output]
+    mock_execute_cmd.side_effect = [execution_output, ckjm_output]
 
     my_run = Run()
     my_run.config(static_analysis=True, bms='fop')
@@ -93,5 +93,25 @@ class TestRun(unittest.TestCase):
     self.assertEqual(result['ca'][0], '7')
     self.assertEqual(result['npm'][0], '8')
 
+  @mock.patch('dacapo.util.execute_cmd')
+  @mock.patch.object(Run, '_run_loaded')
+  def test_filtered_classes_from_ckjm(self, mock_run_loaded, mock_execute_cmd):
+    loaded_classes = '\n'.join(['[Loaded Bar from file:foo.jar]',
+                                '0  1   ! Bar::run (198 bytes)',
+                                '[Loaded Baz from file:foo.jar]'
+                               ])
+
+    ckjm_output = '''Bar 1 2 3 4 5 6 7 8'''
+
+    mock_execute_cmd.side_effect = [loaded_classes, ckjm_output]
+
+    my_run = Run()
+    my_run.config(static_analysis=True, bms='fop')
+
+    my_run.run_ckjm()
+
+    mock_run_loaded.assert_called_with('fop', {'Bar': 'file:foo.jar'})
+
+
 if __name__ == '__main__':
   unittest.main()
-- 
GitLab


From 7c82003158d88de6f5cef168309e0ff0db1dea0f Mon Sep 17 00:00:00 2001
From: Leandro Watanabe <leandrow@google.com>
Date: Tue, 17 Apr 2018 10:32:13 -0700
Subject: [PATCH 3/3] Simplified function to select classes with executed
 functions

---
 dacapo/run.py | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/dacapo/run.py b/dacapo/run.py
index 8a9a6ce..7fbfb6f 100644
--- a/dacapo/run.py
+++ b/dacapo/run.py
@@ -101,7 +101,7 @@ class Run(object):
       cmd = self._cmd_builder.construct_static_analysis_cmd(bm)
       out = util.execute_cmd(cmd)
       results, classes, _ = parser.parse_static_analysis(out)
-      filter_results = self._filtered_classes(results, classes)
+      filter_results = {k: v for k, v in results.iteritems() if k in classes}
       self._run_loaded(bm, filter_results)
     else:
       self._run_from_jar(bm, self._cmd_builder.dacapo)
@@ -137,29 +137,14 @@ class Run(object):
     """Runs static analysis from jar file."""
 
     logging.debug('Running static analysis from jar file.')
-
     classes = self._get_classes_from_jar(jar_file)
-
     list_of_classes = '\n'.join(['%s %s' % (jar, cl) for cl, jar
                                  in classes.iteritems()])
     cmd = self._cmd_builder.construct_ckjm_cmd()
-
     out = util.execute_cmd(cmd, False, input_value=list_of_classes)
-
     results = out.splitlines()
-
     self.report.add_static_analysis(bm, results)
 
-  def _filtered_classes(self, results, classes):
-    """Returns a map with classes that had a method executed."""
-    filtered_results = {}
-
-    for class_name, jar_name in results.iteritems():
-      if class_name in classes:
-        filtered_results[class_name] = jar_name
-
-    return filtered_results
-
   def _get_classes_from_jar(self, jar_file):
     """Gets all of the classes from a jar, including classes in nested jars.
 
-- 
GitLab