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