From 03ddfd194a181dc583e23beeb3767dd4ec58381e Mon Sep 17 00:00:00 2001 From: Nathalia Barbosa Date: Wed, 4 Feb 2026 16:48:14 -0300 Subject: [PATCH 1/5] add changes --- extra/input-smat.json | 1451 +++++++++++++++++ extra/run_experiment.py | 565 +++++++ nimrod/__main__.py | 39 +- nimrod/setup_tools/tools.py | 2 +- ...r.py => codellama_test_suite_generator.py} | 108 +- .../generators/llm_output_processor.py | 108 -- nimrod/tests/env-config.json | 75 +- nimrod/tests/utils.py | 57 +- nimrod/tools/{ollama.py => codellama.py} | 6 +- nimrod/utils.py | 8 +- 10 files changed, 2232 insertions(+), 187 deletions(-) create mode 100644 extra/input-smat.json create mode 100644 extra/run_experiment.py rename nimrod/test_suite_generation/generators/{ollama_test_suite_generator.py => codellama_test_suite_generator.py} (87%) delete mode 100644 nimrod/test_suite_generation/generators/llm_output_processor.py rename nimrod/tools/{ollama.py => codellama.py} (77%) diff --git a/extra/input-smat.json b/extra/input-smat.json new file mode 100644 index 00000000..dc257d48 --- /dev/null +++ b/extra/input-smat.json @@ -0,0 +1,1451 @@ +[ + { + "projectName": "Storm", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.apache.storm.kafka.spout.KafkaSpoutConfig": [ + { + "method": "toString()", + "leftChangesSummary": "Left removes the field and reference for maxRetries of the returning string from the method toString()", + "rightChangesSummary": "Right performs a refactoring involving the references for key and value variables. It updates how the variable values are accessed (now using get methods instead of directly accessing the values). Right also removes references to the field: kafkaSpoutStreams, tuplesBuilder, topics, and topicWildcardPattern. Finally, it adds reference for subscription and translator." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/base/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/base/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/base/storm-kafka-client-2.0.0-jar-with-dependencies.jar", + "left": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/left/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/left/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/left/storm-kafka-client-2.0.0-jar-with-dependencies.jar", + "right": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/right/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/right/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/right/storm-kafka-client-2.0.0-jar-with-dependencies.jar", + "merge": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/merge/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/merge/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/merge/storm-kafka-client-2.0.0-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "Storm", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.apache.storm.kafka.spout.KafkaSpout": [ + { + "method": "emitTupleIfNotEmitted(ConsumerRecord)", + "leftChangesSummary": "Left performs a refactoring extracting a variable of an IF statement. it also changes another IF condition.", + "rightChangesSummary": "Right updates the method signature changing its return type for boolean and adds return statements." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/base/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/base/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/base/storm-kafka-client-2.0.0-jar-with-dependencies.jar", + "left": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/left/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/left/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/left/storm-kafka-client-2.0.0-jar-with-dependencies.jar", + "right": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/right/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/right/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/right/storm-kafka-client-2.0.0-jar-with-dependencies.jar", + "merge": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/merge/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/merge/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/merge/storm-kafka-client-2.0.0-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "antlr4", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.antlr.v4.codegen.target.Python2Target": [ + { + "method": "python2Keywords", + "leftChangesSummary": "Left changes the list of values of an array of Strings during its initialization (adition of a new value)", + "rightChangesSummary": "Right changes the list of values of an array of Strings during its initialization (adition of a new value)" + } + ], + "org.antlr.v4.codegen.target.Python3Target": [ + { + "method": "python3Keywords", + "leftChangesSummary": "Left changes the list of values of an array of Strings during its initialization (adition of a new value)", + "rightChangesSummary": "Right changes the list of values of an array of Strings during its initialization (adition of a new value)" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "cloud-slang", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "io.cloudslang.lang.api.SlangImpl": [ + { + "method": "getAllEventTypes()", + "leftChangesSummary": "Left adds new values into a list", + "rightChangesSummary": "Right adds new values into a list" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "fitnesse", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "fitnesse.testsystems.slim.tables.SlimTableFactory": [ + { + "method": "SlimTableFactory()", + "leftChangesSummary": "Left adds two new elements into a map, by calling the add method addTableTye twice.", + "rightChangesSummary": "Right adds a new element into a map, also calling the method addTableType." + } + ], + "fitnesse.testsystems.slim.tables.SlimTableFactoryTest": [ + { + "method": "setUp()", + "leftChangesSummary": "Left adds two entries on the field map.", + "rightChangesSummary": "Right adds one entry on the field map." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/base/fitnesse-standalone.jar", + "left": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/left/fitnesse-standalone.jar", + "right": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/right/fitnesse-standalone.jar", + "merge": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/merge/fitnesse-standalone.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "okhttp", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.squareup.okhttp.OkHttpClient": [ + { + "method": "copyWithDefaults()", + "leftChangesSummary": "Left changed the object returned by the method using the current object of the class and ass a new value to the field transports.", + "rightChangesSummary": "Right changes the value assigned to result.hostnameverifier adding now an object OkHostnameVerifier." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/guide-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/guide-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "okhttp", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.squareup.okhttp.internal.bytes.GzipSource": [ + { + "method": "consumeHeader(Deadline)", + "leftChangesSummary": "Left does a refactoring by renaming the method getByte on OkBuffer class.", + "rightChangesSummary": "Right does a refactoring by extracting the local method seek to OkBuffers class." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "jOOQ", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.jooq.impl.DSL": [ + { + "method": "coalesce(T, T[])", + "leftChangesSummary": "added method declaration coalesce(T, T[])", + "rightChangesSummary": "also added method declaration coalesce(T, T[]), but with different body" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-scala-3.6.0-SNAPSHOT.jar", + "left": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-scala-3.6.0-SNAPSHOT.jar", + "right": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-scala-3.6.0-SNAPSHOT.jar", + "merge": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-scala-3.6.0-SNAPSHOT.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "swagger-maven-plugin", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.github.kongchen.swagger.docgen.reader.AbstractReader": [ + { + "method": "hasValidAnnotations(List)", + "leftChangesSummary": "Left adds items to the returned list used to define the return of method hasValidAnnotations", + "rightChangesSummary": "Right also adds items to the returned list used to define the return of method hasValidAnnotations" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/base/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/base/swagger-maven-plugin-3.1.1-SNAPSHOT.jar", + "left": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/left/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/left/swagger-maven-plugin-3.1.1-SNAPSHOT.jar", + "right": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/right/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/right/swagger-maven-plugin-3.1.1-SNAPSHOT.jar", + "merge": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/merge/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/merge/swagger-maven-plugin-3.1.1-SNAPSHOT.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "retrofit", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "retrofit.RequestBuilder": [ + { + "method": "build()", + "leftChangesSummary": "Left changed the argument of a method call and chained it with another call. Semantically, it inserts \"?\" in the middle of a string stored in the url variable.", + "rightChangesSummary": "Right adds an if statement that surrounds an assignment (which comes from base) to the url variable." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "retrofit", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "retrofit.RestAdapter": [ + { + "method": "logAndReplaceResponse(String, Response, long)", + "leftChangesSummary": "Left does a refactoring.", + "rightChangesSummary": "Right creates a new method toString() and uses it to write on log." + }, + { + "method": "logAndReplaceRequest(Request)", + "leftChangesSummary": "Deleted a loop with many calls to log and changed to one with arguments different from the previous call, which simply writes to the log output.", + "rightChangesSummary": "Change the log parameter, adding a toString() on header attribute (header.toString())." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "jsoup", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.jsoup.helper.HttpConnection": [ + { + "method": "execute(Connection.Request, Response)", + "leftChangesSummary": "Left adds a new condition (OR) that is reponsible for changing the value of the local variable needsRedirect.", + "rightChangesSummary": "Right updates another if statement conditions; it changes a set of conditions grouped with AND, to the OR operator. This if is responsible for throw a new exception." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/base/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/left/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/right/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/merge/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "jsoup", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.jsoup.helper.HttpConnection": [ + { + "method": "execute(Connection.Request, Response)", + "leftChangesSummary": "Left adds a new condition (OR) that is reponsible for changing the value of the local variable needsRedirect.", + "rightChangesSummary": "Right updates another if statement conditions; it changes a set of conditions grouped with AND, to the OR operator. This if is responsible for throw a new exception." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/base/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/left/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/right/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/merge/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "jsoup", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.jsoup.nodes.TextNode": [ + { + "method": "outerHtmlHead(StringBuilder, int, Document.OutputSettings)", + "leftChangesSummary": "Left changes the condition of an if statement, which calls the method preserveWhitespace. Now the method only performs its verifications if the node is not null and is an instance of Element type; otherwise, no action is performed and the value of local variable html is not updated.", + "rightChangesSummary": "Right adds a new condition (OR) in an if statement, which may change the value of the parameter accum." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/base/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/left/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/right/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/merge/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "jsoup", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.jsoup.helper.HttpConnection": [ + { + "method": "createConnection(Connection.Request)", + "leftChangesSummary": "Left adds a IF statement, allowing extra set fields of the object returned by the method", + "rightChangesSummary": "Rights changes a IF condition, setting more fields of the object returned by the method and accepting more values than before" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/base/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/left/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/right/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/merge/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "SimianArmy", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.netflix.simianarmy.basic.janitor.BasicJanitorMonkeyContext": [ + { + "method": "getInstanceJanitor()", + "leftChangesSummary": "Left updates the rule added in ruleEngine by method addRule().", + "rightChangesSummary": "Right adds a new if statement, which may also add a new rule in ruleEngine." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-all-2.5.0-SNAPSHOT.jar", + "left": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-all-2.5.0-SNAPSHOT.jar", + "right": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-all-2.5.0-SNAPSHOT.jar", + "merge": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-all-2.5.0-SNAPSHOT.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "titan", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.thinkaurelius.titan.graphdb.database.serialize.SerializerInitialization": [ + { + "method": "initialize(Serializer)", + "leftChangesSummary": "Left adds and removes calls for method registerClass of serialize object, that registers new classes in the registrations hashmap.", + "rightChangesSummary": "Right changes one call for method registerClass by adding a new parameter (instead of only two), and this new parameter will be added into headers hashmap." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/base/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/left/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/right/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/merge/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "Activiti", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.activiti.engine.impl.persistence.entity.DeploymentEntityManager": [ + { + "method": "deleteDeployment(String, boolean)", + "leftChangesSummary": "Left changes a if condition, that is reponsible for changing the value of the local variable nrOfProcessDefinitionsWithSameKey (incrementation)", + "rightChangesSummary": "Right adds a new IF statement; in case the condition is TRUE, it calls new mtethod using the objects of the local list timerStartJobs." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/yuicompressor-2.4.2.jar", + "left": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/yuicompressor-2.4.2.jar", + "right": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/yuicompressor-2.4.2.jar", + "merge": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/yuicompressor-2.4.2.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "Activiti", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior": [ + { + "method": "execute(ActivityExecution)", + "leftChangesSummary": "Left adds a new IF statement, which may set the field formKey of the local variable formKey, or throws an exception.", + "rightChangesSummary": "Right adds a new IF statement, which may call static external methods without using their returns." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/yuicompressor-2.4.2.jar", + "left": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/yuicompressor-2.4.2.jar", + "right": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/yuicompressor-2.4.2.jar", + "merge": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/yuicompressor-2.4.2.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "druid", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.metamx.druid.loading.S3SegmentPusher": [ + { + "method": "push(File, DataSegment)", + "leftChangesSummary": "Left changes the object that will be returned by setting the object field binaryVersion.", + "rightChangesSummary": "Right set the field acl on object toPush, which is used by the returned object." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-client-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-examples-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-examples-rand-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-examples-twitter-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-index-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-indexer-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-merger-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-realtime-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-server-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-services-0.2.3-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-client-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-examples-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-examples-rand-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-examples-twitter-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-index-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-indexer-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-merger-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-realtime-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-server-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-services-0.2.8-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-client-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-examples-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-examples-rand-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-examples-twitter-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-index-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-indexer-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-merger-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-realtime-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-server-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-services-0.2.3-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-client-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-examples-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-examples-rand-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-examples-twitter-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-index-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-indexer-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-merger-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-realtime-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-server-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-services-0.2.8-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "netty", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder": [ + { + "method": "decode(ChannelHandlerContext, Channel, ChannelBuffer)", + "leftChangesSummary": "Left updates how variable frameLength is incremented, which is done only if the new conditional in the if statement is true.", + "rightChangesSummary": "Right updates method call failIfNecessary adding a new parameter (boolean value). [But these changes were also done by Left.]" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/base/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/left/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/right/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/merge/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "OpenTripPlanner", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.opentripplanner.routing.spt.MultiShortestPathTree": [ + { + "method": "dominates(State, State)", + "leftChangesSummary": "Left renames some local variables and updates three boolean local variables used to define the method return.", + "rightChangesSummary": "Right adds a new if statement, which may return false." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/base/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/left/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/right/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/merge/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "webbit", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.webbitserver.netty.WebSocketClient": [ + { + "method": "adjustPipelineToWebSocket(ChannelHandlerContext, MessageEvent, ChannelHandler, ChannelHandler)", + "leftChangesSummary": "Left sets the version of webSockectConnection object calling the method setHybiWebSocketVersion.", + "rightChangesSummary": "Right changes the order of parameters used to create the local variable webSocketChannelHandler" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/base/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/left/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/right/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/merge/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory": [ + { + "method": "customizeConnector(org.apache.catalina.connector.Connector)", + "leftChangesSummary": "Added an if condition that has an asset in its body. One method call to configureSsl and two set method calls to connector", + "rightChangesSummary": "Added a wildcard to the generic of the AbstractProtocol class which is used as a casting" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/base/spring-boot-1.1.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/left/spring-boot-1.2.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/right/spring-boot-1.1.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/merge/spring-boot-1.2.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "original" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.autoconfigure.mongo.MongoProperties": [ + { + "method": "builder(com.mongodb.MongoClientOptions)", + "leftChangesSummary": "Left changes one attribute of an object using a set method", + "rightChangesSummary": "Right changes nine attributes of an object using a set method" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/base/buildFinal.jar", + "left": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/left/buildFinal.jar", + "right": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/right/buildFinal.jar", + "merge": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/merge/buildFinal.jar" + }, + "jarType": "original" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.context.web.SpringBootServletInitializer": [ + { + "method": "createRootApplicationContext(javax.servlet.ServletContext)", + "leftChangesSummary": "Modified a class's instance declaration, instead of using new Class(), called a method that does this.", + "rightChangesSummary": "Inserted a conditional (if) for an attribute that has not been changed from the left, checking if an attribute of the class is true or false." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/base/spring-boot-1.2.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/left/spring-boot-1.3.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/right/spring-boot-1.2.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/merge/spring-boot-1.3.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "original" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.jta.atomikos.AtomikosProperties": [ + { + "method": "asProperties()", + "leftChangesSummary": "Left adds calls for method set, which adds values on the object properties.", + "rightChangesSummary": "Right removes calls for method set, which added values on the object properties." + } + ], + "org.springframework.boot.jta.atomikos.AtomikosPropertiesTests": [ + { + "method": "testProperties()", + "leftChangesSummary": "Left sets five new properties of the object properties (field), and consequently updates the expected value of first assertion.", + "rightChangesSummary": "Right removes five properties of the object properties (field), and consequently updates the expected value of first assertion." + }, + { + "method": "testDefaultProperties()", + "leftChangesSummary": "Added some attributes for a test, changing the quantity of the parameters and the key.length() attribute.", + "rightChangesSummary": "Removed some attributes for a test, changing the quantity of the parameters and the key.length() attribute." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/base/spring-boot-1.5.4.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/left/spring-boot-2.0.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/right/spring-boot-1.5.4.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/merge/spring-boot-2.0.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "original" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.loader.archive.ExplodedArchive": [ + { + "method": "getUrl()", + "leftChangesSummary": "Left removes one parameter (handler) for the new URL object, that is returned by the method.", + "rightChangesSummary": "Right updates one parameter used to create the URL object that is returned by the method, by calling toURL()" + } + ], + "org.springframework.boot.loader.archive.ExplodedArchiveTests": [ + { + "method": "getUrl()", + "leftChangesSummary": "Equals to the base class", + "rightChangesSummary": "Changed a test assert" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/base/spring-boot-loader-1.3.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/left/spring-boot-loader-1.4.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/right/spring-boot-loader-1.3.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/merge/spring-boot-loader-1.4.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory": [ + { + "method": "createDeploymentManager(ServletContextInitializer)", + "leftChangesSummary": "Left sets one attribute of object deployment, which is used to create the returned method object manager.", + "rightChangesSummary": "Right modifies the way the returned manager object is created; before, it was done by calling the method defaultContainer from Servlets, and now it’s done by calling the method newContainer." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/base/spring-boot-1.3.1.RELEASE-jar-with-dependencies.jar", + "left": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/left/spring-boot-1.3.1.BUILD-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/right/spring-boot-1.3.1.RELEASE-jar-with-dependencies.jar", + "merge": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/merge/spring-boot-1.3.1.BUILD-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "spring-boot", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer": [ + { + "method": "logAutoConfigurationReport(boolean)", + "leftChangesSummary": "Change the string sent as a parameter to the logger.debug method", + "rightChangesSummary": "Change the string sent as a parameter to the logger.info method" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/base/buildFinal.jar", + "left": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/left/buildFinal.jar", + "right": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/right/buildFinal.jar", + "merge": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/merge/buildFinal.jar" + }, + "jarType": "original" + }, + { + "projectName": "eureka", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.netflix.appinfo.ApplicationInfoManager": [ + { + "method": "ApplicationInfoManager()", + "leftChangesSummary": "Left adds a new attribute, and also its initialization in the constructor.", + "rightChangesSummary": "Right changes the contructor access modifier to public." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/base/eureka-client-all-1.1.155-SNAPSHOT.jar", + "left": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/left/eureka-client-all-1.1.157-SNAPSHOT.jar", + "right": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/right/eureka-client-all-1.1.155-SNAPSHOT.jar", + "merge": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/merge/eureka-client-all-1.1.157-SNAPSHOT.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "atmosphere", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.atmosphere.cpr.AtmosphereConfig": [ + { + "method": "AtmosphereConfig()", + "leftChangesSummary": "Left changes the contructor access modifier to protected.", + "rightChangesSummary": "Right adds a new attribute, and also its initialization in the constructor." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/base/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar", + "left": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/left/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar", + "right": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/right/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar", + "merge": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/merge/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "resty-gwt", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.fusesource.restygwt.rebind.DirectRestServiceInterfaceClassCreator": [ + { + "method": "getMethodCallback(JMethod)", + "leftChangesSummary": "changed if statement (condition, and block) on method getMethodCallback(JMethod)", + "rightChangesSummary": "extracted variable refactoring and added if statement on method getMethodCallback(JMethod)" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/base/restygwt-2.0.4-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/base/restygwt-2.0.4-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/base/restygwt-project-2.0.4-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/left/restygwt-2.2.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/left/restygwt-2.2.0-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/left/restygwt-project-2.2.0-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/right/restygwt-2.0.4-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/right/restygwt-2.0.4-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/right/restygwt-project-2.0.4-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/merge/restygwt-2.2.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/merge/restygwt-2.2.0-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/merge/restygwt-project-2.2.0-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "HikariCP", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.zaxxer.hikari.HikariConfig": [ + { + "method": "validate()", + "leftChangesSummary": "Left adds a new IF statement, which may write in logger calling method info", + "rightChangesSummary": "Right removes source code, which would write in logger calling method error or wanr, or even trhows an exception. Changes on formating" + } + ], + "com.zaxxer.hikari.HikariPool": [ + { + "method": "addConnection()", + "leftChangesSummary": "Left: changes if condition that decrement totalGetCOnnection", + "rightChangesSummary": "Right: adds a new call to addConnection from addConnections" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/base/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/left/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/right/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/merge/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "quickml", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "quickdt.experiments.OutOfTimeCrossValidatorRunner": [ + { + "method": "getRandomForestBuilder(int, int)", + "leftChangesSummary": "Left deletes a method call, which set the field maxDepth.", + "rightChangesSummary": "Right renames a local variable RandomForestBuilder, and replaces the method return for that local variable. This variable has a different type related to the method return type on Base commit, but the interface is still the superclass." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/base/quickdt-0.1.8-jar-with-dependencies.jar", + "left": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/left/quickdt-0.1.8-jar-with-dependencies.jar", + "right": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/right/quickdt-0.1.8.7-jar-with-dependencies.jar", + "merge": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/merge/quickdt-0.1.8.7-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "pushy", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.relayrides.pushy.apns.PushManager": [ + { + "method": "handleConnectionClosure(ApnsConnection)", + "leftChangesSummary": "Left replaces “new Thread” with “listenerExecutor”", + "rightChangesSummary": "Right does a refactoring by “extracting\" two local methods." + }, + { + "method": "handleConnectionFailure(com.relayrides.pushy.apns.ApnsConnection| java.lang.Throwable)", + "leftChangesSummary": "Left changes the way a new thread is created.", + "rightChangesSummary": "Right does a structural refactoring by extracting two methods." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/base/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/left/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/right/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/merge/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "java-faker", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "com.github.javafaker.Faker": [ + { + "method": "Faker(Locale, Random)", + "leftChangesSummary": "Left adds an initialization of two fields on constructor.", + "rightChangesSummary": "Right changes the initialization of a different field." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/base/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/left/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/right/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/merge/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "swagger-core", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "io.swagger.jaxrs2.OperationParser": [ + { + "method": "getSchemaFromAnnotation(io.swagger.oas.annotations.media.Schema)", + "leftChangesSummary": "Left adds two IF statements, which may set some fields on object schemaObject.", + "rightChangesSummary": "Right renames three methods _enum() to allowableValues(), and _default() to defaultValue" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "cucumber-jvm", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "cuke4duke.internal.java.JavaLanguage": [ + { + "method": "load(String)", + "leftChangesSummary": "Left adds a new IF statement, which may restrict the new addition of the local variable clazz on the field objectFactory.", + "rightChangesSummary": "Right changes generics allowing any type for the local variable clazz." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/base/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/base/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/base/parent-0.1.2-jar-with-dependencies.jar", + "left": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/left/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/left/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/left/parent-0.1.2-jar-with-dependencies.jar", + "right": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/right/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/right/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/right/parent-0.1.2-jar-with-dependencies.jar", + "merge": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/merge/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/merge/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/merge/parent-0.1.2-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "hector", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "me.prettyprint.cassandra.connection.HConnectionManager": [ + { + "method": "operateWithFailover(me.prettyprint.cassandra.service.Operation)", + "leftChangesSummary": "Left changes the method used to write in the logger.", + "rightChangesSummary": "Right changes the initialization of the local variable stopWatch" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/base/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/left/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/right/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/merge/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "hector", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "me.prettyprint.cassandra.connection.client.HSaslThriftClient": [ + { + "method": "open()", + "leftChangesSummary": "Left does a refactoring regarding the value assigned to the local variable socket and adding a parameter when creating the object transport", + "rightChangesSummary": "Right remove a If statement, which changed the value assigned to transport" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/base/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/left/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/right/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/merge/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "hector", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "me.prettyprint.cassandra.connection.client.HKerberosThriftClient": [ + { + "method": "open()", + "leftChangesSummary": "Left does a refactoring regarding the value assigned to the local variable socket", + "rightChangesSummary": "Right remove a If statement, which changed the value assigned to transport" + } + ], + "me.prettyprint.cassandra.connection.client.HThriftClient": [ + { + "method": "open()", + "leftChangesSummary": "Left does a refactoring regarding the value assigned to the local variable socket and adding a parameter when creating the object transport", + "rightChangesSummary": "Right remove a If statement, which changed the value assigned to transport" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/base/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/left/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/right/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/merge/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "elasticsearch-river-mongodb", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.elasticsearch.river.mongodb.Slurper": [ + { + "method": "assignCollections()", + "leftChangesSummary": "Left adds some if statements and changed the values of two variables: adminDb and oplogDb.", + "rightChangesSummary": "Right changes the value of oplogRefsCollection by calling a method of oplogDb" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/base/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/left/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/right/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/merge/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "elasticsearch-river-mongodb", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.elasticsearch.river.mongodb.MongoDBRiverDefinition": [ + { + "method": "parseSettings(String, String, org.elasticsearch.river.RiverSettings, org.elasticsearch.script.ScriptService)", + "leftChangesSummary": "Left changes the local object builder, which is used as the returning object.", + "rightChangesSummary": "Right replaces the method used to write in the object logger." + } + ], + "org.elasticsearch.river.mongodb.Indexer": [ + { + "method": "applyAdvancedTransformation(org.elasticsearch.river.mongodb.MongoDBRiver$QueueEntry, String)", + "leftChangesSummary": "Left changes the local object builder, which is used as the returning object.", + "rightChangesSummary": "Right replaces the method used to write in the object logger." + }, + { + "method": "processBlockingQueue(org.elasticsearch.river.mongodb.MongoDBRiver$QueueEntry)", + "leftChangesSummary": "Left adds a new parameter used to create the local object executableScript.", + "rightChangesSummary": "Right replaces the method used to write in the object logger and the value assigned to the local object ctx." + } + ], + "org.elasticsearch.river.mongodb.Slurper": [ + { + "method": "run()", + "leftChangesSummary": "Left adds a if statement, restricting the value assigned to startTimestamp to be increased.", + "rightChangesSummary": "Right replaces the method used to write in the object logger." + }, + { + "method": "addToStream(org.elasticsearch.river.mongodb.Operation, org.elasticsearch.river.mongodb.Timestamp, com.mongodb.DBObject, String)", + "leftChangesSummary": "Left writes in the object logger.", + "rightChangesSummary": "Right writes in the object logger." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/base/elasticsearch-river-mongodb-2.0.1-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/left/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/right/elasticsearch-river-mongodb-2.0.1-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/merge/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "elasticsearch", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.elasticsearch.index.query.support.NestedInnerQueryParseSupport": [ + { + "method": "setPathLevel()", + "leftChangesSummary": "Left adds a new field, and use it to assign values for fields parentFilter and parentObjectMapper; it has the same behavior when compared to base commit.", + "rightChangesSummary": "Right changes the value assigned to childFilter" + } + ], + "org.elasticsearch.index.query.MultiMatchQueryBuilder": [ + { + "method": "doXContent(org.elasticsearch.common.xcontent.XContentBuilder| org.elasticsearch.common.xcontent.ToXContent$Params)", + "leftChangesSummary": "Changed the parameter sent to the startObject method but the value of the parameter remained the same; Removed two if conditions that made calls to the field method by passing (\"boost\", boost) and (\"_name\", queryName). Added a call to the printBoostAndQueryName method passing the builder object as a parameter.", + "rightChangesSummary": "Removed an if condition (rewrite! = Null) that used the field method of the builder object" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/base/elasticsearch-2.1.0-jar-with-dependencies.jar", + "left": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/left/elasticsearch-2.1.0-jar-with-dependencies.jar", + "right": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/right/elasticsearch-2.1.0-jar-with-dependencies.jar", + "merge": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/merge/elasticsearch-2.1.0-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "elasticsearch", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.elasticsearch.index.query.SimpleIndexQueryParserTests": [ + { + "method": "setup()", + "leftChangesSummary": "Left set the fields type and id on the local variable doc.", + "rightChangesSummary": "Right adds a new entry on the local obecjt settings." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/base/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "left": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/left/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "right": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/right/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar", + "merge": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/merge/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/merge/elasticsearch-2.1.0-jar-with-dependencies.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "elasticsearch", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.elasticsearch.common.settings.IndexScopedSettings": [ + { + "method": "BUILT_IN_INDEX_SETTINGS", + "leftChangesSummary": "Added two elements to a set is a static attribute named BUILT_IN_INDEX_SETTINGS initialization", + "rightChangesSummary": "Added one element to a set is a static attribute named BUILT_IN_INDEX_SETTINGS initialization" + } + ], + "org.elasticsearch.action.index.TransportIndexAction": [ + { + "method": "executeIndexRequestOnPrimary(org.elasticsearch.action.index.IndexRequest| org.elasticsearch.index.shard.IndexShard| org.elasticsearch.cluster.action.index.MappingUpdatedAction)", + "leftChangesSummary": "Added a call to a set method \"seqNo\", and passed the value as a parameter to the IndexResponse constructor", + "rightChangesSummary": "Extract variable on the object created by the IndexResponse constructor" + } + ], + "org.elasticsearch.action.support.replication.ReplicationOperationTests": [ + { + "method": "testReplication()", + "leftChangesSummary": "Extracted a variable from constructor TestReplicationOperation creating a TestPrimary object (Refactor) and added two assertThat method calls on the end of the method", + "rightChangesSummary": "Changed the generic used at the PlainActionFuture type on the listener variable and Changed the type of shardInfo to import directly the inner ShartInfo, instead as accessing it from its outer class " + } + ], + "org.elasticsearch.index.IndexSettings": [ + { + "method": "IndexSettings(org.elasticsearch.cluster.metadata.IndexMetaData| org.elasticsearch.common.settings.Settings| java.util.function.Predicate| org.elasticsearch.common.settings.IndexScopedSettings)", + "leftChangesSummary": "Added the initialization to the globalCheckPointInterval field getting from scopedSettings map", + "rightChangesSummary": "Added the initialization to the maxRefreshListeners field getting from scopedSettings map and added a call to addSettingsUpdateConsumer for the key that got the maxRefreshListeners" + } + ], + "org.elasticsearch.action.bulk.TransportShardBulkAction": [ + { + "method": "update(org.elasticsearch.cluster.metadata.IndexMetaData| org.elasticsearch.action.bulk.BulkShardRequest| org.elasticsearch.index.shard.IndexShard| long[]| org.elasticsearch.index.VersionType| org.elasticsearch.index.translog.Translog$Location| int| org.elasticsearch.action.bulk.BulkItemRequest)", + "leftChangesSummary": "Added the parameter seqNo to both calls of the UpdateResopnse constructor", + "rightChangesSummary": "Added a SupressWarning annotation twice and refactored the WriteResult class to return its parameters via getResponse and getLocation (Refactor)" + } + ], + "org.elasticsearch.action.support.replication.TransportReplicationAction": [ + { + "method": "doRun()", + "leftChangesSummary": "Left creates a new local variable, and assigns a value to it depending on a try, which was also changed by Left.", + "rightChangesSummary": "Right adds a new local variable and assings a value to it inside a try, which was chaged by Left." + } + ], + "org.elasticsearch.action.support.replication.ReplicationOperation": [ + { + "method": "execute()", + "leftChangesSummary": "Left creates a new local variable primaryRounting, while it also adds a new call for updateLocalCheckpointForShard on the field primary.", + "rightChangesSummary": "Right creates a new local variable primaryRounting and renames the local variable primaryId. It also adds a new call for replicaRequest on the field primaryResult." + } + ], + "org.elasticsearch.index.engine.InternalEngineTests": [ + { + "method": "testRecoverFromForeignTranslog()", + "leftChangesSummary": "Left updates the method call for creating a new Index object. Now, it is also assigned a value for field seqNo.", + "rightChangesSummary": "Right updates the method call for creating a new EngineConfig object. Now, it is also assigned a value for field refreshListeners." + } + ], + "org.elasticsearch.index.engine.InternalEngine": [ + { + "method": "InternalEngine(org.elasticsearch.index.engine.EngineConfig)", + "leftChangesSummary": "Left adds a new field in the class, and also assigns a value for it in the constructor.", + "rightChangesSummary": "Right adds a new IF statement, which whether a property on the object engineConfig is nulll." + } + ], + "org.elasticsearch.action.DocWriteResponse": [ + { + "method": "writeTo(org.elasticsearch.common.io.stream.StreamOutput)", + "leftChangesSummary": "Left adds a call for method writeZLong on the out object sending a long value.", + "rightChangesSummary": "Right adds a call for method writeBoolean on the object out sending a boolean value." + }, + { + "method": "readFrom(org.elasticsearch.common.io.stream.StreamInput)", + "leftChangesSummary": "Left adds a call for method readZLong on the in object.", + "rightChangesSummary": "Right adds a call for method readBoolean on the object in." + }, + { + "method": "toXContent(org.elasticsearch.common.xcontent.XContentBuilder| org.elasticsearch.common.xcontent.ToXContent$Params)", + "leftChangesSummary": "Left adds two calls for method field on the object builder.", + "rightChangesSummary": "Right adds a call for method field on the object builder." + } + ], + "org.elasticsearch.cluster.metadata.MetaDataCreateIndexService": [ + { + "method": "createIndex(org.elasticsearch.action.admin.indices.create.CreateIndexClusterStateUpdateRequest| org.elasticsearch.action.ActionListener)", + "leftChangesSummary": "Left adds two new parameters when creating the local variable indexService.", + "rightChangesSummary": "Right extracts a local variable (refactoring) and also adds a new local variable routingNumShards." + } + ], + "org.elasticsearch.action.update.TransportUpdateAction": [ + { + "method": "shardOperation(org.elasticsearch.action.update.UpdateRequest| org.elasticsearch.action.ActionListener| int)", + "leftChangesSummary": "Left adds new parameters when creating the local variable update.", + "rightChangesSummary": "Right sets the field forcedRefresh of the local variable update" + } + ], + "org.elasticsearch.action.delete.TransportDeleteAction": [ + { + "method": "executeDeleteRequestOnPrimary(org.elasticsearch.action.delete.DeleteRequest| org.elasticsearch.index.shard.IndexShard)", + "leftChangesSummary": "Left sets the field seqNo on object request, and added this value on the call to create the returned object DeleteResponse.", + "rightChangesSummary": "Right does a refactoring by extracting a variable, and them call the method to create the method return object." + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/base/core-all-5.0.0-SNAPSHOT.jar", + "left": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/left/core-all-5.0.0-SNAPSHOT.jar", + "right": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/right/core-all-5.0.0-SNAPSHOT.jar", + "merge": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/merge/core-all-5.0.0-SNAPSHOT.jar" + }, + "jarType": "transformed" + }, + { + "projectName": "elasticsearch", + "runAnalysis": true, + "scenarioCommits": { + "base": "", + "left": "", + "right": "", + "merge": "" + }, + "targets": { + "org.elasticsearch.index.analysis.synonyms.SynonymsAnalysisTest": [ + { + "method": "testSynonymsAnalysis()", + "leftChangesSummary": "Left extracts a local variable home of the parameter used on method put. Now, it's used the return of createTempDir instead of createTempDir().toString();", + "rightChangesSummary": "Right extracts a local variable json from the parameter sent to method loadFromStream. It also replaced the method call loadFromClasspath to loadFromStream, which is done by the method return object of settingsBuilder." + } + ], + "org.elasticsearch.index.analysis.commongrams.CommonGramsTokenFilterFactoryTests": [ + { + "method": "testQueryModeCommonGramsAnalysis()", + "leftChangesSummary": "Replaced the call to the createTempDir().toString() method with createHome()", + "rightChangesSummary": "Added a variable called Json containing a String with the path to the file commongrams_query_mode.json; Replaced the loadFromClasspath method with loadFromStream" + }, + { + "method": "testCommonGramsAnalysis()", + "leftChangesSummary": "Left changed the local settings variable with a call to put() method in settingsBuilder(), which uses the local variable called \"json\" changed by right.", + "rightChangesSummary": "Right changed the local variable json. Changed the local varibale called settings with a call to loadFromStream() method in settingsBuilder()" + } + ], + "org.elasticsearch.index.analysis.KuromojiAnalysisTests": [ + { + "method": "createAnalysisService()", + "leftChangesSummary": "Left changed the local settings variable with a call to put() method in settingsBuilder(), which uses the local variable called \"json\" changed by right. Changed other local variables: empty_dict, dict, home, config and Files, not used by right. ", + "rightChangesSummary": "Right changed the local variable json. Changed the local varibale called settings with a call to loadFromStream() method in settingsBuilder()" + } + ] + }, + "scenarioJars": { + "base": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/base/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar", + "left": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/left/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar", + "right": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/right/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar", + "merge": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/merge/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar" + }, + "jarType": "transformed" + } +] \ No newline at end of file diff --git a/extra/run_experiment.py b/extra/run_experiment.py new file mode 100644 index 00000000..331668a3 --- /dev/null +++ b/extra/run_experiment.py @@ -0,0 +1,565 @@ +#!/usr/bin/env python3 + +import subprocess +import sys +import os +import json +import time +import logging +import shutil +from datetime import datetime +from pathlib import Path + +# Configurações múltiplas para execução sequencial +MULTI_CONFIGS = [ + { + "name": "ZeroShot_T00_S123", + "prompt_template": "zero_shot", + "temperature": 0, + "seed": 123 + }, + { + "name": "OneShot_T70_S123", + "prompt_template": "one_shot", + "temperature": 0.7, + "seed": 123 + }, + { + "name": "ZeroShot_T70_S123", + "prompt_template": "zero_shot", + "temperature": 0.7, + "seed": 123 + }, + { + "name": "OneShot_T00_S123", + "prompt_template": "one_shot", + "temperature": 0, + "seed": 123 + } +] + +# Configuração de logging simples +def setup_simple_logging(): + """Configura logging básico mas eficaz""" + log_dir = Path("logs") + log_dir.mkdir(exist_ok=True) + + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + log_file = log_dir / f"smat_execution_{timestamp}.log" + + logging.basicConfig( + level=logging.INFO, + format='[%(asctime)s] %(levelname)s: %(message)s', + handlers=[ + logging.FileHandler(log_file), + logging.StreamHandler() + ] + ) + + return log_file + +# Gerenciamento simples de progresso +class SimpleProgressManager: + def __init__(self): + self.checkpoint_dir = Path("checkpoints") + self.checkpoint_dir.mkdir(exist_ok=True) + self.session_id = f"smat_{int(time.time())}" + self.checkpoint_file = self.checkpoint_dir / f"progress_{self.session_id}.json" + self.progress = { + "session_id": self.session_id, + "start_time": datetime.now().isoformat(), + "configurations": {}, # {"config_name": {"completed_targets": [], "failed_targets": []}} + "completed_scenarios": [], # Manter para compatibilidade + "failed_scenarios": [], + "current_scenario": None + } + self.last_save_time = 0 # Controle de frequência de salvamento + + def save_progress(self, force=False): + """Salva progresso atual (apenas a cada 10 minutos, exceto se force=True)""" + current_time = time.time() + + # Salva apenas a cada 10 minutos (600 segundos) ou se forçado + if not force and (current_time - self.last_save_time) < 600: + return + + try: + with open(self.checkpoint_file, 'w') as f: + json.dump(self.progress, f, indent=2) + + self.last_save_time = current_time + + # Conta targets totais por configuração + total_targets = sum( + len(config_data.get('completed_targets', [])) + len(config_data.get('failed_targets', [])) + for config_data in self.progress['configurations'].values() + ) + + logging.info(f"Progresso salvo: {len(self.progress['completed_scenarios'])} cenários, {total_targets} targets processados") + except Exception as e: + logging.error(f"Erro ao salvar progresso: {e}") + + def add_completed(self, scenario_name): + """Adiciona cenário concluído (compatibilidade)""" + if scenario_name not in self.progress["completed_scenarios"]: + self.progress["completed_scenarios"].append(scenario_name) + self.save_progress(force=True) + + def add_failed(self, scenario_name): + """Adiciona cenário que falhou (compatibilidade)""" + if scenario_name not in self.progress["failed_scenarios"]: + self.progress["failed_scenarios"].append(scenario_name) + self.save_progress(force=True) + + def set_current(self, scenario_name): + """Define cenário atual""" + self.progress["current_scenario"] = scenario_name + self.save_progress(force=True) + + def add_completed_target(self, config_name, target_info): + """Adiciona target específico concluído para uma configuração""" + if config_name not in self.progress["configurations"]: + self.progress["configurations"][config_name] = { + "completed_targets": [], + "failed_targets": [], + "start_time": datetime.now().isoformat() + } + + target_key = f"{target_info['class']}.{target_info['method']}" + if target_key not in self.progress["configurations"][config_name]["completed_targets"]: + self.progress["configurations"][config_name]["completed_targets"].append(target_key) + self.save_progress(force=True) # Força salvamento em eventos importantes + logging.info(f"Target concluído: {config_name} -> {target_key}") + + def add_failed_target(self, config_name, target_info, error=None): + """Adiciona target que falhou para uma configuração""" + if config_name not in self.progress["configurations"]: + self.progress["configurations"][config_name] = { + "completed_targets": [], + "failed_targets": [], + "start_time": datetime.now().isoformat() + } + + target_key = f"{target_info['class']}.{target_info['method']}" + failure_info = { + "target": target_key, + "error": str(error) if error else "Unknown error", + "timestamp": datetime.now().isoformat() + } + + self.progress["configurations"][config_name]["failed_targets"].append(failure_info) + self.save_progress(force=True) # Força salvamento em eventos importantes + logging.error(f"Target falhou: {config_name} -> {target_key}: {error}") + + def get_config_progress(self, config_name): + """Retorna progresso de uma configuração específica""" + if config_name not in self.progress["configurations"]: + return {"completed_targets": [], "failed_targets": []} + return self.progress["configurations"][config_name] + + def get_summary(self): + """Retorna resumo do progresso""" + completed = len(self.progress["completed_scenarios"]) + failed = len(self.progress["failed_scenarios"]) + + # Contagem detalhada por configuração + config_summary = {} + for config_name, config_data in self.progress["configurations"].items(): + completed_targets = len(config_data.get("completed_targets", [])) + failed_targets = len(config_data.get("failed_targets", [])) + config_summary[config_name] = { + "completed_targets": completed_targets, + "failed_targets": failed_targets, + "targets": config_data.get("completed_targets", []) + [f["target"] for f in config_data.get("failed_targets", [])] + } + + return { + "session_id": self.session_id, + "completed": completed, + "failed": failed, + "configurations": config_summary, + "current": self.progress["current_scenario"], + "start_time": self.progress["start_time"] + } + + @classmethod + def load_session(cls, session_id): + """Carrega sessão existente""" + checkpoint_dir = Path("checkpoints") + checkpoint_file = checkpoint_dir / f"progress_{session_id}.json" + + if not checkpoint_file.exists(): + logging.error(f"Sessão não encontrada: {session_id}") + return None + + try: + with open(checkpoint_file, 'r') as f: + progress_data = json.load(f) + + manager = cls() + manager.session_id = session_id + manager.checkpoint_file = checkpoint_file + manager.progress = progress_data + manager.last_save_time = 0 # Inicializa controle de salvamento + + logging.info(f"Sessão carregada: {session_id}") + return manager + except Exception as e: + logging.error(f"Erro ao carregar sessão: {e}") + return None + + @classmethod + def list_sessions(cls): + """Lista sessões disponíveis""" + checkpoint_dir = Path("checkpoints") + if not checkpoint_dir.exists(): + return [] + + sessions = [] + for file in checkpoint_dir.glob("progress_*.json"): + try: + with open(file, 'r') as f: + data = json.load(f) + sessions.append({ + 'id': data['session_id'], + 'start_time': data['start_time'], + 'completed': len(data.get('completed_scenarios', [])), + 'failed': len(data.get('failed_scenarios', [])) + }) + except: + continue + + return sorted(sessions, key=lambda x: x['start_time'], reverse=True) + +def update_env_config(config_update): + """Atualiza o arquivo env-config.json com nova configuração""" + env_config_path = Path("SMAT/nimrod/tests/env-config.json") + + # Faz backup do original + backup_path = env_config_path.with_suffix('.json.backup') + if not backup_path.exists(): + shutil.copy2(env_config_path, backup_path) + + # Carrega configuração atual + with open(env_config_path, 'r') as f: + config = json.load(f) + + # Atualiza configurações globais + if 'prompt_template' in config_update: + config['prompt_template'] = config_update['prompt_template'] + + # Atualiza configurações da API para todos os modelos + if 'temperature' in config_update or 'seed' in config_update: + for model_key in config.get('api_params', {}): + if 'temperature' in config_update: + config['api_params'][model_key]['temperature'] = config_update['temperature'] + if 'seed' in config_update: + config['api_params'][model_key]['seed'] = config_update['seed'] + + # Salva configuração atualizada + with open(env_config_path, 'w') as f: + json.dump(config, f, indent=2) + + logging.info(f"Configuração atualizada: {config_update['name']}") + +def restore_env_config(): + """Restaura configuração original do backup""" + env_config_path = Path("SMAT/nimrod/tests/env-config.json") + backup_path = env_config_path.with_suffix('.json.backup') + + if backup_path.exists(): + shutil.copy2(backup_path, env_config_path) + logging.info("Configuração original restaurada") + +def run_smat(progress_manager, max_retries=2, config_name="default"): + """Executa SMAT com retry básico e checkpoints""" + + + try: + # Configura ambiente + smat_dir = Path(__file__).parent / "SMAT" + os.environ['PYTHONPATH'] = str(smat_dir) + if 'JAVA_HOME' not in os.environ: + os.environ['JAVA_HOME'] = "/usr/lib/jvm/java-8-openjdk-amd64" + + logging.info(f"Iniciando SMAT - Sessão: {progress_manager.session_id} - Config: {config_name}") + logging.info(f"PYTHONPATH: {os.environ['PYTHONPATH']}") + + # Executa SMAT + + for attempt in range(max_retries + 1): + try: + logging.info(f"Tentativa {attempt + 1}/{max_retries + 1}") + + # Inicia processo SMAT + process = subprocess.Popen([ + sys.executable, "-m", "nimrod" + ], cwd=smat_dir) + + # Monitora processo enquanto executa + while process.poll() is None: + time.sleep(30) # Verifica a cada 30 segundos + progress_manager.save_progress() # Tenta salvar (só salva a cada 10 min) + + # Verifica código de retorno + if process.returncode == 0: + logging.info("SMAT executado com sucesso") + break + else: + raise subprocess.CalledProcessError(process.returncode, "nimrod") + + except subprocess.CalledProcessError as e: + logging.error(f"SMAT falhou (tentativa {attempt + 1}): código {e.returncode}") + + if attempt < max_retries: + delay = 60 * (attempt + 1) # 60s, 120s, etc. + logging.info(f"Aguardando {delay}s antes da próxima tentativa...") + time.sleep(delay) + else: + logging.error("SMAT falhou após todas as tentativas") + return False + + except KeyboardInterrupt: + logging.info("Execução interrompida pelo usuário") + progress_manager.save_progress() + return False + + # Executa gráficos se disponível + graphics_script = Path(__file__).parent / "graficos_metricas.py" + if graphics_script.exists(): + try: + logging.info("Gerando gráficos...") + subprocess.run([sys.executable, str(graphics_script)], check=True) + logging.info("Gráficos gerados com sucesso") + except Exception as e: + logging.warning(f"Erro ao gerar gráficos: {e}") + + return True + + except Exception as e: + logging.error(f"Erro inesperado: {e}") + return False + finally: + progress_manager.save_progress(force=True) + +def load_targets_from_input(): + """Carrega lista de targets do input-smat.json""" + try: + input_file = Path("input-smat.json") + if not input_file.exists(): + logging.warning("input-smat.json não encontrado") + return [] + + with open(input_file) as f: + data = json.load(f) + + targets = [] + for scenario in data: + for class_name, methods in scenario.get("targets", {}).items(): + for method_item in methods: + if isinstance(method_item, dict): + method_name = method_item.get("method", "") + else: + method_name = method_item + + targets.append({ + "class": class_name, + "method": method_name, + "project": scenario.get("projectName", "unknown") + }) + + return targets + except Exception as e: + logging.error(f"Erro ao carregar targets: {e}") + return [] + +def verify_and_update_completed_targets(progress_manager, config_name, targets): + """ + Verifica quais targets foram realmente concluídos baseado nos arquivos gerados + e atualiza o progresso em tempo real + """ + completed_count = 0 + output_base = Path("SMAT/output-test-dest/projects") + + try: + if not output_base.exists(): + logging.debug("Diretório de output não existe ainda") + return 0 + + # Procura por pastas de output que correspondem ao config atual + for project_dir in output_base.iterdir(): + if not project_dir.is_dir(): + continue + + # Verifica se há pastas com o padrão do modelo atual + for model_dir in project_dir.iterdir(): + if not model_dir.is_dir(): + continue + + # Verifica se o nome da pasta contém as informações da configuração atual + dir_name = model_dir.name + if should_match_config(dir_name, config_name): + # Verifica cada target individualmente + for target in targets: + if check_target_completed(model_dir, target): + progress_manager.add_completed_target(config_name, target) + completed_count += 1 + logging.debug(f"Target verificado como concluído: {target['class']}.{target['method']}") + + + except Exception as e: + logging.warning(f"Erro ao verificar targets concluídos: {e}") + + return completed_count + +def should_match_config(dir_name, config_name): + """Verifica se o nome do diretório corresponde à configuração atual""" + return all(part in dir_name for part in config_name.split('_')) + +def check_target_completed(model_dir, target): + """Verifica se um target específico foi concluído com sucesso""" + try: + # Verifica se há arquivos .java gerados para este target + llm_outputs_dir = model_dir / "llm_outputs" + if not llm_outputs_dir.exists(): + return False + + # Procura por arquivos que contenham referências ao target + class_simple_name = target['class'].split('.')[-1] + method_name = target['method'].split('(')[0] + + target_pattern = f"*{class_simple_name}*{method_name}*" + + matching_files = list(llm_outputs_dir.glob(target_pattern)) + + # Se encontrou arquivos, verifica se têm conteúdo válido + for file_path in matching_files: + if file_path.stat().st_size > 100: # Arquivo não vazio (pelo menos 100 bytes) + return True + + return False + + except Exception as e: + logging.debug(f"Erro ao verificar conclusão do target {target['class']}.{target['method']}: {e}") + return False + +def run_smat_with_monitoring(progress_manager, config_name, targets): + """Executa SMAT com verificação de progresso pós-execução""" + return run_smat(progress_manager, config_name=config_name) + +def run_smat_configs(progress_manager): + """Executa múltiplas configurações sequencialmente""" + total_configs = len(MULTI_CONFIGS) + targets = load_targets_from_input() + + logging.info(f"Iniciando execução multi-configuração: {total_configs} configs, {len(targets)} targets") + + for i, config in enumerate(MULTI_CONFIGS, 1): + logging.info(f"\n[CONFIG {i}/{total_configs}] Iniciando: {config['name']}") + + try: + # Atualiza configuração + update_env_config(config) + + # Executa SMAT com esta configuração e monitora progresso + success = run_smat_with_monitoring(progress_manager, config['name'], targets) + + if success: + progress_manager.add_completed(config['name']) + + # Verifica targets realmente concluídos + completed_count = verify_and_update_completed_targets(progress_manager, config['name'], targets) + logging.info(f"[CONFIG {i}/{total_configs}] OK Concluída: {config['name']} - {completed_count}/{len(targets)} targets verificados como concluídos") + else: + progress_manager.add_failed(config['name']) + + # Mesmo com falha, verifica se alguns targets foram concluídos + completed_count = verify_and_update_completed_targets(progress_manager, config['name'], targets) + logging.error(f"[CONFIG {i}/{total_configs}] ERRO Falhou: {config['name']} - {completed_count}/{len(targets)} targets parcialmente concluídos") + + except Exception as e: + # Mesmo com exceção, verifica progresso parcial + try: + completed_count = verify_and_update_completed_targets(progress_manager, config['name'], targets) + logging.error(f"[CONFIG {i}/{total_configs}] EXCEÇÃO: {config['name']} - {e} - {completed_count}/{len(targets)} targets parcialmente concluídos") + except: + logging.error(f"[CONFIG {i}/{total_configs}] EXCEÇÃO: {config['name']} - {e}") + + logging.error(f"[CONFIG {i}/{total_configs}] ERRO: {config['name']} - {e}") + progress_manager.add_failed(config['name']) + + # Pausa entre configurações + if i < total_configs: + logging.info(f"Pausa de 30s antes da próxima configuração...") + time.sleep(30) + + # Restaura configuração original + restore_env_config() + + # Resumo final + summary = progress_manager.get_summary() + logging.info(f"Resumo final: {summary['completed']} concluídas, {summary['failed']} com falha") + + # Detalhes por configuração + for config_name, config_data in summary['configurations'].items(): + completed_targets = config_data['completed_targets'] + failed_targets = config_data['failed_targets'] + logging.info(f"\n{config_name}:") + logging.info(f" Targets concluídos: {completed_targets}") + logging.info(f" Targets falharam: {failed_targets}") + if config_data['targets']: + logging.info(f" Lista de targets: {', '.join(config_data['targets'])}") + + return summary['failed'] == 0 + +def main(): + """Função principal""" + + # Setup básico + log_file = setup_simple_logging() + + # Argumentos simples + resume_session = None + + if len(sys.argv) > 1: + if sys.argv[1] == "--resume" and len(sys.argv) > 2: + resume_session = sys.argv[2] + elif sys.argv[1] == "--list": + sessions = SimpleProgressManager.list_sessions() + if sessions: + print("Sessões disponíveis:") + for session in sessions: + print(f" {session['id']}: {session['start_time']} (Concluídos: {session['completed']}, Falhas: {session['failed']})") + else: + print("Nenhuma sessão encontrada") + return 0 + elif sys.argv[1] in ["--help", "-h"]: + print("Uso:") + print(" python3 run_experiment.py # Execução multi-configuração") + print(" python3 run_experiment.py --resume SESSION_ID") + print(" python3 run_experiment.py --list # Lista sessões") + return 0 + + # Configura gerenciador de progresso + if resume_session: + progress_manager = SimpleProgressManager.load_session(resume_session) + if not progress_manager: + return 1 + else: + progress_manager = SimpleProgressManager() + + logging.info(f"SMAT multi-config - Sessão: {progress_manager.session_id}") + + # Executa SMAT com múltiplas configurações + success = run_smat_configs(progress_manager) + + # Resultado final + if success: + logging.info("Execução concluída com sucesso") + return 0 + else: + logging.error(f"Execução falhou. Use: python3 run_experiment.py --resume {progress_manager.session_id}") + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/nimrod/__main__.py b/nimrod/__main__.py index d5604f12..72dcf125 100644 --- a/nimrod/__main__.py +++ b/nimrod/__main__.py @@ -1,5 +1,5 @@ import logging -from typing import Dict, List, Any +from typing import Dict, List from nimrod.dynamic_analysis.behavior_change_checker import BehaviorChangeChecker from nimrod.dynamic_analysis.criteria.first_semantic_conflict_criteria import FirstSemanticConflictCriteria from nimrod.dynamic_analysis.criteria.second_semantic_conflict_criteria import SecondSemanticConflictCriteria @@ -16,7 +16,7 @@ from nimrod.test_suite_generation.generators.randoop_test_suite_generator import RandoopTestSuiteGenerator from nimrod.test_suite_generation.generators.evosuite_differential_test_suite_generator import EvosuiteDifferentialTestSuiteGenerator from nimrod.test_suite_generation.generators.evosuite_test_suite_generator import EvosuiteTestSuiteGenerator -from nimrod.test_suite_generation.generators.ollama_test_suite_generator import OllamaTestSuiteGenerator +from nimrod.test_suite_generation.generators.codellama_test_suite_generator import CodellamaTestSuiteGenerator from nimrod.test_suite_generation.generators.project_test_suite_generator import ProjectTestSuiteGenerator from nimrod.test_suites_execution.main import TestSuitesExecution, TestSuiteExecutor from nimrod.tools.bin import MOD_RANDOOP, RANDOOP @@ -25,9 +25,25 @@ from nimrod.input_parsing.input_parser import CsvInputParser, JsonInputParser -def get_test_suite_generators(config: Dict[str, Any]) -> List[TestSuiteGenerator]: +def get_llm_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGenerator]: + """ + Creates test suite generators for all available LLM models configured in api_params. + Each model gets its own generator instance to enable parallel processing and comparison. + """ + generators: List[TestSuiteGenerator] = list() + api_params = config.get('api_params', {}) + + for model_key, model_config in api_params.items(): + # Create a generator for each configured model + generator = CodellamaTestSuiteGenerator(Java(), model_key, model_config) + generators.append(generator) + + return generators + + +def get_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGenerator]: config_generators = config.get( - 'test_suite_generators', ['randoop', 'randoop-modified', 'evosuite', 'evosuite-differential', 'ollama', 'project']) + 'test_suite_generators', ['randoop', 'randoop-modified', 'evosuite', 'evosuite-differential', 'codellama', 'project']) generators: List[TestSuiteGenerator] = list() if 'randoop' in config_generators: @@ -39,21 +55,16 @@ def get_test_suite_generators(config: Dict[str, Any]) -> List[TestSuiteGenerator generators.append(EvosuiteTestSuiteGenerator(Java())) if 'evosuite-differential' in config_generators: generators.append(EvosuiteDifferentialTestSuiteGenerator(Java())) - if 'ollama' in config_generators: - # Create one generator instance for each configured model - api_params = config.get('api_params', {}) - if api_params: - for model_key, model_config in api_params.items(): - generators.append(OllamaTestSuiteGenerator(Java(), model_key, model_config)) - else: - generators.append(OllamaTestSuiteGenerator(Java())) + if 'codellama' in config_generators: + # Create one generator for each configured model + generators.extend(get_llm_test_suite_generators(config)) if 'project' in config_generators: generators.append(ProjectTestSuiteGenerator(Java())) return generators -def get_output_generators(config: Dict[str, Any]) -> List[OutputGenerator]: +def get_output_generators(config: Dict[str, str]) -> List[OutputGenerator]: config_generators = config.get( 'output_generators', ['behavior_changes', 'semantic_conflicts', 'test_suites']) generators: List[OutputGenerator] = list() @@ -69,7 +80,7 @@ def get_output_generators(config: Dict[str, Any]) -> List[OutputGenerator]: return generators -def parse_scenarios_from_input(config: Dict[str, Any]) -> List[MergeScenarioUnderAnalysis]: +def parse_scenarios_from_input(config: Dict[str, str]) -> List[MergeScenarioUnderAnalysis]: json_input = config.get('input_path', "") csv_input_path = config.get('path_hash_csv', "") diff --git a/nimrod/setup_tools/tools.py b/nimrod/setup_tools/tools.py index 57b3dcf7..c0985757 100644 --- a/nimrod/setup_tools/tools.py +++ b/nimrod/setup_tools/tools.py @@ -5,4 +5,4 @@ class Tools(Enum): RANDOOP_MOD='RANDOOP-MODIFIED' EVOSUITE='EVOSUITE' DIFF_EVOSUITE='DIFFERENTIAL-EVOSUITE' - OLLAMA='OLLAMA' \ No newline at end of file + CODELLAMA='CODELLAMA' \ No newline at end of file diff --git a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py b/nimrod/test_suite_generation/generators/codellama_test_suite_generator.py similarity index 87% rename from nimrod/test_suite_generation/generators/ollama_test_suite_generator.py rename to nimrod/test_suite_generation/generators/codellama_test_suite_generator.py index 43009207..4b0053e2 100644 --- a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py +++ b/nimrod/test_suite_generation/generators/codellama_test_suite_generator.py @@ -1,8 +1,9 @@ import json import logging import os -import requests # type: ignore +import requests from typing import List, Dict, Union, Any, Optional +from itertools import combinations import re import tree_sitter_java as tsjava @@ -11,7 +12,6 @@ from nimrod.core.merge_scenario_under_analysis import MergeScenarioUnderAnalysis from nimrod.test_suite_generation.generators.test_suite_generator import TestSuiteGenerator from nimrod.test_suite_generation.generators.prompt_manager import PromptManager -from nimrod.test_suite_generation.generators.llm_output_processor import LLMOutputProcessor from nimrod.tests.utils import get_config from nimrod.utils import load_json, save_json @@ -72,6 +72,7 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: try: self.set_payload_messages(messages) response = self.post(self.payload) + #logging.debug("Response: %s", response) return { "response": response.get("message", {}).get("content", "Response not found."), "total_duration": response.get("total_duration", self.timeout_seconds * 1_000_000_000), @@ -81,15 +82,14 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: return {"error": "Output generation error", "total_duration": self.timeout_seconds * 1_000_000_000} -class OllamaTestSuiteGenerator(TestSuiteGenerator): +class CodellamaTestSuiteGenerator(TestSuiteGenerator): - def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[str, Any] = {}): + def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[str, Any] = None): super().__init__(java_tool) self.model_key = model_key - self.model_config = model_config - self.api: Optional[Api] = None + self.model_config = model_config or {} + self.api = None self.prompt_manager = PromptManager() - self.output_processor = LLMOutputProcessor() # Loads global configurations global_config = get_config() @@ -101,16 +101,15 @@ def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[s "zero_shot" ) - logging.info(f"Initialized {self.model_key} with prompt template: {self.prompt_template}") - + logging.info(f"Inicializado {self.model_key} com template: {self.prompt_template}") + def generate_messages_list(self, method_info: Dict[str, str], full_class_name: str, branch: str, output_path: str) -> Dict[str, List[Dict[str, str]]]: """ Generates messages for API requests using the configurable prompt system. Supports different templates (zero-shot, one-shot) and context combinations. """ - api = self._get_api_instance() - api.set_branch(branch) # Set the branch + self.api.set_branch(branch) # Set the branch class_name = full_class_name.split('.')[-1] method_name = method_info.get("method_name", "") @@ -136,10 +135,10 @@ def generate_messages_list(self, method_info: Dict[str, str], full_class_name: s return messages_dict - def _ensure_api_initialized(self) -> Api: - """Initializes the API if it has not been initialized yet and returns the instance.""" + def _ensure_api_initialized(self) -> None: + """Initializes the API if it has not been initialized yet.""" if self.api is not None: - return self.api + return config = get_config() api_params = config.get("api_params", {}) @@ -161,14 +160,9 @@ def _ensure_api_initialized(self) -> Api: seed=model_params.get("seed", 42), model=model_params.get("model", "codellama:70b") ) - return self.api - - def _get_api_instance(self) -> Api: - """Returns a valid API instance, initializing it if necessary.""" - return self._ensure_api_initialized() def get_generator_tool_name(self) -> str: - self._get_api_instance() + self._ensure_api_initialized() config_suffix = self._generate_config_suffix() return f"{self.model_key.upper()}{config_suffix}" @@ -200,15 +194,26 @@ def _get_test_suite_class_names(self, test_suite_path: str) -> List[str]: def save_output(self, test_template: str, output: str, dir: str, output_file_name: str) -> None: """Saves the output generated by the model to a file, replacing #TEST_METHODS# in the template.""" - # Process and sanitize the LLM output using the configured processor - processed_output = self.output_processor.process(output) - - # Replace the placeholder in the template with the processed content - filled_template = test_template.replace("#TEST_METHODS#", processed_output) - - # Save to file + # Remove content between tags + output = re.sub(r'.*?', '', output, flags=re.DOTALL) + + # Extract only the content inside ``` blocks (excluding the ``` markers) + matches = re.findall(r'```(?:\w+)?\n?(.*?)```', output, flags=re.DOTALL) + output = '\n'.join(matches).strip() + + # Remove lines starting with "number. " (e.g., "1. public void test() {...}") + output = re.sub(r"^\d+\.\s.*$", "", output, flags=re.MULTILINE) + + # Look for @Before, @BeforeClass first; fallback to @Test if none are found + markers = ["@Before", "@BeforeClass", "@Test"] + index = min((output.find(marker) for marker in markers if marker in output), default=-1) + + # Keep only the content starting from the first found annotation + output = output[index:] if index != -1 else output + llm_outputs_dir = os.path.join(dir, "llm_outputs") output_file_path = os.path.join(llm_outputs_dir, f"{output_file_name}.txt") + filled_template = test_template.replace("#TEST_METHODS#", output) os.makedirs(llm_outputs_dir, exist_ok=True) with open(output_file_path, "w") as file: @@ -247,12 +252,22 @@ def extract_class_info(self, source_code_path: str, full_method_name: str, full_ name: (identifier) @constructor_name) @constructor_declaration (method_declaration name: (identifier) @method_name) @method_def + (class_declaration) @nested_class (#eq? @method_name "{method_name}") (#eq? @constructor_name "{class_name}") ] ) (#eq? @class_name "{class_name}") ) + + ; Searches for methods in any class (including nested ones) + (method_declaration + name: (identifier) @any_method_name + (#eq? @any_method_name "{method_name}") + ) @any_method_def + + ; Searches for fields in any class (including nested ones) + (field_declaration) @any_field_declaration """ query = JAVA_LANGUAGE.query(query_text) cursor = QueryCursor(query) @@ -279,11 +294,39 @@ def extract_class_info(self, source_code_path: str, full_method_name: str, full_ class_constructors.append(captured_text) elif capture_name == "method_def": class_method = captured_text + elif capture_name == "any_method_def" and not class_method: + class_method = captured_text + elif capture_name == "any_field_declaration" and method_name in captured_text and not class_method: + class_method = captured_text + + if not class_method: + logging.debug(f"Method/field '{method_name}' not found with main query, trying broader field search") + + # More specific query for fields with exact name (including in nested classes) + field_query_text = f""" + (field_declaration + declarator: (variable_declarator + name: (identifier) @field_name + ) + (#eq? @field_name "{method_name}") + ) @target_field_declaration + """ + + field_query = JAVA_LANGUAGE.query(field_query_text) + field_cursor = QueryCursor(field_query) + field_captures_dict = field_cursor.captures(tree.root_node) + + for capture_name, nodes in field_captures_dict.items(): + for node in nodes: + if capture_name == "target_field_declaration": + class_method = self.extract_snippet(source_code, node.start_byte, node.end_byte) + logging.debug(f"Found field '{method_name}' as target: {class_method[:100]}...") + break return class_fields, class_constructors, class_method except Exception as e: - logging.error("An error occurred while extracting class info for '%s': %s", full_class_name, e) + logging.error(f"An error occurred while extracting class info for '{full_class_name}': {e}") raise e def save_scenario_infos(self, scenario_infos_path: str, class_name: str, methods: Union[List[str], List[Dict[str, str]]], source_code_path: str) -> None: @@ -533,7 +576,7 @@ def record_output_duration(self, time_duration_path: str, output_path: str, clas raise def _execute_tool_for_tests_generation(self, input_jar: str, output_path: str, scenario: MergeScenarioUnderAnalysis, use_determinism: bool) -> None: - self._get_api_instance() + self._ensure_api_initialized() # Define paths for storing scenario information (for prompt generation), # importing data (to be extracted from source code), and recording time duration (for each output) @@ -584,13 +627,12 @@ def _process_prompts(self, messages_list: Dict[str, List[Dict[str, str]]], test_ def _process_single_prompt(self, messages: List[Dict[str, str]], test_template: str, output_path: str, branch: str, class_name: str, imports: List[str], i: int, j: int, time_duration_path: str, project_name: str, output_file_name: str, prompt_key: str) -> None: - api = self._get_api_instance() - total_duration = api.timeout_seconds * 1_000_000_000 # Initialize with timeout value in nanoseconds + total_duration = self.api.timeout_seconds * 1_000_000_000 # Initialize with timeout value in nanoseconds try: logging.debug("Processing output %d%d for prompt key '%s' in branch \"%s\"", i, j, prompt_key, branch) - output = api.generate_output(messages) + output = self.api.generate_output(messages) response = output.get("response", "Response not found.") - total_duration = int(output.get("total_duration", api.timeout_seconds * 1_000_000_000)) + total_duration = int(output.get("total_duration", self.api.timeout_seconds * 1_000_000_000)) self.save_output(test_template, response, output_path, output_file_name) except Exception as e: logging.error("Error while processing output %d%d for prompt key '%s' in branch \"%s\": %s", i, j, prompt_key, branch, e) diff --git a/nimrod/test_suite_generation/generators/llm_output_processor.py b/nimrod/test_suite_generation/generators/llm_output_processor.py deleted file mode 100644 index 9209ec2e..00000000 --- a/nimrod/test_suite_generation/generators/llm_output_processor.py +++ /dev/null @@ -1,108 +0,0 @@ -import re -from typing import List, Optional -from abc import ABC, abstractmethod - - -class OutputSanitizationRule(ABC): - """Abstract base class for output sanitization rules.""" - - @abstractmethod - def apply(self, output: str) -> str: - """Apply the sanitization rule to the output.""" - pass - - -class RemoveThinkTagsRule(OutputSanitizationRule): - """Removes content between tags.""" - - def apply(self, output: str) -> str: - return re.sub(r'.*?', '', output, flags=re.DOTALL) - - -class ExtractCodeBlocksRule(OutputSanitizationRule): - """Extracts content from code blocks (``` markers).""" - - def apply(self, output: str) -> str: - matches = re.findall(r'```(?:\w+)?\n?(.*?)```', output, flags=re.DOTALL) - return '\n'.join(matches).strip() - - -class RemoveNumberedLinesRule(OutputSanitizationRule): - """Removes lines starting with 'number. ' pattern.""" - - def apply(self, output: str) -> str: - return re.sub(r"^\d+\.\s.*$", "", output, flags=re.MULTILINE) - - -class ExtractFromAnnotationsRule(OutputSanitizationRule): - """Keeps only content starting from the first annotation marker.""" - - def __init__(self, markers: Optional[List[str]] = None): - self.markers = markers or ["@Before", "@BeforeClass", "@Test"] - - def apply(self, output: str) -> str: - index = min( - (output.find(marker) for marker in self.markers if marker in output), - default=-1 - ) - return output[index:] if index != -1 else output - - -class LLMOutputProcessor: - """ - Processes and sanitizes LLM outputs using configurable rules. - - This class provides a flexible framework for cleaning LLM outputs - by applying a series of sanitization rules in sequence. - """ - - def __init__(self) -> None: - self._rules: List[OutputSanitizationRule] = [] - self._load_default_rules() - - def _load_default_rules(self) -> None: - """Load the default set of sanitization rules.""" - self._rules = [ - RemoveThinkTagsRule(), - ExtractCodeBlocksRule(), - RemoveNumberedLinesRule(), - ExtractFromAnnotationsRule() - ] - - def add_rule(self, rule: OutputSanitizationRule) -> None: - """Add a custom sanitization rule.""" - self._rules.append(rule) - - def remove_rule(self, rule_type: type) -> None: - """Remove all rules of the specified type.""" - self._rules = [rule for rule in self._rules if not isinstance(rule, rule_type)] - - def clear_rules(self) -> None: - """Remove all sanitization rules.""" - self._rules.clear() - - def process(self, output: str) -> str: - """ - Process the LLM output by applying all sanitization rules in sequence. - - Args: - output: The raw output from the LLM model - - Returns: - The processed and sanitized output - """ - processed_output = output - - for rule in self._rules: - try: - processed_output = rule.apply(processed_output) - except Exception as e: - # Log the error but continue processing with other rules - import logging - logging.warning(f"Error applying rule {rule.__class__.__name__}: {e}") - - return processed_output - - def get_active_rules(self) -> List[str]: - """Get the names of currently active rules.""" - return [rule.__class__.__name__ for rule in self._rules] diff --git a/nimrod/tests/env-config.json b/nimrod/tests/env-config.json index 9934a146..b4d9f713 100644 --- a/nimrod/tests/env-config.json +++ b/nimrod/tests/env-config.json @@ -1,22 +1,79 @@ { - "java_home": "", + "java_home": "/usr/lib/jvm/java-8-openjdk-amd64", "maven_home": "", - "repo_dir": "", "projects_folder": "", - "input_path": "", + "input_path": "/path/input-smat.json", "tests_dst": "", "path_output_csv": "", "logger_level": "DEBUG", - "test_suite_generators":["ollama", "evosuite", "randoop"], - "test_suite_generation_search_time_available":"45", + "test_suite_generators": [ + "codellama" + ], + "test_suite_generation_search_time_available": "45", "prompt_template": "zero_shot", "api_params": { - "codellama-70b": { - "model": "codellama:70b", + "deepseek-r1-8b": { + "model": "deepseek-r1:8b", "api_url": "http://ip/api/chat", - "temperature": 0.7, - "seed": 42, + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "deepseek-r1-70b": { + "model": "deepseek-r1:70b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "deepseek-r1-32b": { + "model": "deepseek-r1:32b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "gemma3-27b": { + "model": "gemma3:27b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "gemma3-12b": { + "model": "gemma3:12b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "gemma3-4b": { + "model": "gemma3:4b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "qwen3-32b": { + "model": "qwen3:32b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "qwen3-30b": { + "model": "qwen3:30b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, + "timeout_seconds": 300 + }, + "llama4-16x17b": { + "model": "llama4:16x17b", + "api_url": "http://ip/api/chat", + "temperature": 0, + "seed": 123, "timeout_seconds": 300 } } diff --git a/nimrod/tests/utils.py b/nimrod/tests/utils.py index d3726a3b..6b6dccdf 100644 --- a/nimrod/tests/utils.py +++ b/nimrod/tests/utils.py @@ -1,7 +1,10 @@ import logging +import logging.handlers import os import json import shutil +from datetime import datetime +from pathlib import Path from typing import Dict, Any PATH = os.path.dirname(os.path.abspath(__file__)) @@ -71,9 +74,13 @@ def calculator_sum_aor_1(): def setup_logging(): - config = get_config() - config_level = config.get('logger_level', 'INFO').upper() - level = logging._nameToLevel.get(config_level, logging.INFO) + try: + config = get_config() + config_level = config.get('logger_level', 'INFO').upper() + except (FileNotFoundError, json.JSONDecodeError, KeyError): + config_level = 'INFO' + + level = getattr(logging, config_level, logging.INFO) logger = logging.getLogger() logger.setLevel(level) @@ -81,19 +88,43 @@ def setup_logging(): if logger.hasHandlers(): logger.handlers.clear() - formatter = logging.Formatter( - '[%(asctime)s] %(levelname)s %(filename)s:%(lineno)d: %(message)s', + log_dir = Path("logs") + log_dir.mkdir(exist_ok=True) + + detailed_formatter = logging.Formatter( + '[%(asctime)s] %(levelname)-8s [%(name)s:%(lineno)d] %(funcName)s() - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) + + console_formatter = logging.Formatter( + '[%(asctime)s] %(levelname)-8s - %(message)s', + datefmt='%H:%M:%S' + ) - file_handler = logging.FileHandler('logfile.log', mode='a') - file_handler.setFormatter(formatter) - - stream_handler = logging.StreamHandler() - stream_handler.setFormatter(formatter) - - logger.addHandler(file_handler) - logger.addHandler(stream_handler) + try: + main_log_file = log_dir / "smat_nimrod.log" + main_handler = logging.handlers.RotatingFileHandler( + main_log_file, + maxBytes=50 * 1024 * 1024, # 50MB + backupCount=5, + encoding='utf-8' + ) + main_handler.setLevel(logging.DEBUG) + main_handler.setFormatter(detailed_formatter) + logger.addHandler(main_handler) + except (OSError, PermissionError): + fallback_log = log_dir / f"smat_nimrod_{datetime.now().strftime('%Y%m%d')}.log" + fallback_handler = logging.FileHandler(fallback_log, mode='a', encoding='utf-8') + fallback_handler.setLevel(logging.DEBUG) + fallback_handler.setFormatter(detailed_formatter) + logger.addHandler(fallback_handler) + + console_handler = logging.StreamHandler() + console_handler.setLevel(level) + console_handler.setFormatter(console_formatter) + logger.addHandler(console_handler) + + logger.info("SMAT Logging initialized - Level: %s", config_level) def get_base_output_path() -> str: current_dir = os.getcwd() diff --git a/nimrod/tools/ollama.py b/nimrod/tools/codellama.py similarity index 77% rename from nimrod/tools/ollama.py rename to nimrod/tools/codellama.py index 939ef04e..c1aa1462 100644 --- a/nimrod/tools/ollama.py +++ b/nimrod/tools/codellama.py @@ -4,10 +4,10 @@ from nimrod.utils import get_class_files -class Ollama(SuiteGenerator): +class Codellama(SuiteGenerator): def _get_tool_name(self): - return "ollama" + return "codellama" def _test_classes(self): classes = [] @@ -19,4 +19,4 @@ def _test_classes(self): return classes def _get_suite_dir(self): - return os.path.join(self.suite_dir, 'ollama-tests') + return os.path.join(self.suite_dir, 'codellama-tests') diff --git a/nimrod/utils.py b/nimrod/utils.py index b6cf35c1..b51388d8 100644 --- a/nimrod/utils.py +++ b/nimrod/utils.py @@ -47,9 +47,5 @@ def load_json(file_path): def save_json(file_path, content): """Saves a dictionary as a JSON file""" - try: - os.makedirs(os.path.dirname(file_path), exist_ok=True) - with open(file_path, "w") as file: - json.dump(content, file, indent=4) - except (OSError, IOError) as e: - print(f"Error saving JSON to {file_path}: {e}") + with open(file_path, "w") as file: + json.dump(content, file, indent=4) From f48e43924ead5362d582c8733559fe38c58977d1 Mon Sep 17 00:00:00 2001 From: Nathalia Barbosa Date: Mon, 15 Jun 2026 10:20:58 -0300 Subject: [PATCH 2/5] refactor: rename codellama to ollama --- nimrod/__main__.py | 8 ++++---- nimrod/setup_tools/tools.py | 2 +- ..._suite_generator.py => ollama_test_suite_generator.py} | 6 +++--- nimrod/tests/env-config.json | 2 +- nimrod/tools/{codellama.py => ollama.py} | 6 +++--- setup.py | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) rename nimrod/test_suite_generation/generators/{codellama_test_suite_generator.py => ollama_test_suite_generator.py} (99%) rename nimrod/tools/{codellama.py => ollama.py} (77%) diff --git a/nimrod/__main__.py b/nimrod/__main__.py index 72dcf125..b3dd3da3 100644 --- a/nimrod/__main__.py +++ b/nimrod/__main__.py @@ -16,7 +16,7 @@ from nimrod.test_suite_generation.generators.randoop_test_suite_generator import RandoopTestSuiteGenerator from nimrod.test_suite_generation.generators.evosuite_differential_test_suite_generator import EvosuiteDifferentialTestSuiteGenerator from nimrod.test_suite_generation.generators.evosuite_test_suite_generator import EvosuiteTestSuiteGenerator -from nimrod.test_suite_generation.generators.codellama_test_suite_generator import CodellamaTestSuiteGenerator +from nimrod.test_suite_generation.generators.ollama_test_suite_generator import OllamaTestSuiteGenerator from nimrod.test_suite_generation.generators.project_test_suite_generator import ProjectTestSuiteGenerator from nimrod.test_suites_execution.main import TestSuitesExecution, TestSuiteExecutor from nimrod.tools.bin import MOD_RANDOOP, RANDOOP @@ -35,7 +35,7 @@ def get_llm_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGener for model_key, model_config in api_params.items(): # Create a generator for each configured model - generator = CodellamaTestSuiteGenerator(Java(), model_key, model_config) + generator = OllamaTestSuiteGenerator(Java(), model_key, model_config) generators.append(generator) return generators @@ -43,7 +43,7 @@ def get_llm_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGener def get_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGenerator]: config_generators = config.get( - 'test_suite_generators', ['randoop', 'randoop-modified', 'evosuite', 'evosuite-differential', 'codellama', 'project']) + 'test_suite_generators', ['randoop', 'randoop-modified', 'evosuite', 'evosuite-differential', 'ollama', 'project']) generators: List[TestSuiteGenerator] = list() if 'randoop' in config_generators: @@ -55,7 +55,7 @@ def get_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGenerator generators.append(EvosuiteTestSuiteGenerator(Java())) if 'evosuite-differential' in config_generators: generators.append(EvosuiteDifferentialTestSuiteGenerator(Java())) - if 'codellama' in config_generators: + if 'ollama' in config_generators: # Create one generator for each configured model generators.extend(get_llm_test_suite_generators(config)) if 'project' in config_generators: diff --git a/nimrod/setup_tools/tools.py b/nimrod/setup_tools/tools.py index c0985757..57b3dcf7 100644 --- a/nimrod/setup_tools/tools.py +++ b/nimrod/setup_tools/tools.py @@ -5,4 +5,4 @@ class Tools(Enum): RANDOOP_MOD='RANDOOP-MODIFIED' EVOSUITE='EVOSUITE' DIFF_EVOSUITE='DIFFERENTIAL-EVOSUITE' - CODELLAMA='CODELLAMA' \ No newline at end of file + OLLAMA='OLLAMA' \ No newline at end of file diff --git a/nimrod/test_suite_generation/generators/codellama_test_suite_generator.py b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py similarity index 99% rename from nimrod/test_suite_generation/generators/codellama_test_suite_generator.py rename to nimrod/test_suite_generation/generators/ollama_test_suite_generator.py index 4b0053e2..a71ccb19 100644 --- a/nimrod/test_suite_generation/generators/codellama_test_suite_generator.py +++ b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py @@ -82,9 +82,9 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: return {"error": "Output generation error", "total_duration": self.timeout_seconds * 1_000_000_000} -class CodellamaTestSuiteGenerator(TestSuiteGenerator): +class OllamaTestSuiteGenerator(TestSuiteGenerator): - def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[str, Any] = None): + def __init__(self, java_tool, model_key: str = "ollama", model_config: Dict[str, Any] = None): super().__init__(java_tool) self.model_key = model_key self.model_config = model_config or {} @@ -158,7 +158,7 @@ def _ensure_api_initialized(self) -> None: timeout_seconds=model_params.get("timeout_seconds", 60), temperature=model_params.get("temperature", 0), seed=model_params.get("seed", 42), - model=model_params.get("model", "codellama:70b") + model=model_params.get("model", "ollama:70b") ) def get_generator_tool_name(self) -> str: diff --git a/nimrod/tests/env-config.json b/nimrod/tests/env-config.json index b4d9f713..6a2f8244 100644 --- a/nimrod/tests/env-config.json +++ b/nimrod/tests/env-config.json @@ -8,7 +8,7 @@ "path_output_csv": "", "logger_level": "DEBUG", "test_suite_generators": [ - "codellama" + "ollama" ], "test_suite_generation_search_time_available": "45", "prompt_template": "zero_shot", diff --git a/nimrod/tools/codellama.py b/nimrod/tools/ollama.py similarity index 77% rename from nimrod/tools/codellama.py rename to nimrod/tools/ollama.py index c1aa1462..939ef04e 100644 --- a/nimrod/tools/codellama.py +++ b/nimrod/tools/ollama.py @@ -4,10 +4,10 @@ from nimrod.utils import get_class_files -class Codellama(SuiteGenerator): +class Ollama(SuiteGenerator): def _get_tool_name(self): - return "codellama" + return "ollama" def _test_classes(self): classes = [] @@ -19,4 +19,4 @@ def _test_classes(self): return classes def _get_suite_dir(self): - return os.path.join(self.suite_dir, 'codellama-tests') + return os.path.join(self.suite_dir, 'ollama-tests') diff --git a/setup.py b/setup.py index c0854b14..99d02cbe 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ def readme(): 'argparse==1.4.0', 'beautifulsoup4==4.6.0', 'pygithub==2.5.0', - 'gitpython==3.1.41' + 'gitpython==3.1.50' ], test_suite='nose.collector', tests_require=[ From afc4a839abfd75a3fb691bc6959e137b9abaa9c6 Mon Sep 17 00:00:00 2001 From: Nathalia Barbosa Date: Mon, 15 Jun 2026 10:37:38 -0300 Subject: [PATCH 3/5] feat: improvements from other branch --- .../generators/llm_output_processor.py | 108 ++++++++++++++++++ .../generators/ollama_test_suite_generator.py | 61 +++++----- nimrod/utils.py | 8 +- 3 files changed, 143 insertions(+), 34 deletions(-) create mode 100644 nimrod/test_suite_generation/generators/llm_output_processor.py diff --git a/nimrod/test_suite_generation/generators/llm_output_processor.py b/nimrod/test_suite_generation/generators/llm_output_processor.py new file mode 100644 index 00000000..f7254c2e --- /dev/null +++ b/nimrod/test_suite_generation/generators/llm_output_processor.py @@ -0,0 +1,108 @@ +import re +from typing import List, Optional +from abc import ABC, abstractmethod + + +class OutputSanitizationRule(ABC): + """Abstract base class for output sanitization rules.""" + + @abstractmethod + def apply(self, output: str) -> str: + """Apply the sanitization rule to the output.""" + pass + + +class RemoveThinkTagsRule(OutputSanitizationRule): + """Removes content between tags.""" + + def apply(self, output: str) -> str: + return re.sub(r'.*?', '', output, flags=re.DOTALL) + + +class ExtractCodeBlocksRule(OutputSanitizationRule): + """Extracts content from code blocks (``` markers).""" + + def apply(self, output: str) -> str: + matches = re.findall(r'```(?:\w+)?\n?(.*?)```', output, flags=re.DOTALL) + return '\n'.join(matches).strip() + + +class RemoveNumberedLinesRule(OutputSanitizationRule): + """Removes lines starting with 'number. ' pattern.""" + + def apply(self, output: str) -> str: + return re.sub(r"^\d+\.\s.*$", "", output, flags=re.MULTILINE) + + +class ExtractFromAnnotationsRule(OutputSanitizationRule): + """Keeps only content starting from the first annotation marker.""" + + def __init__(self, markers: Optional[List[str]] = None): + self.markers = markers or ["@Before", "@BeforeClass", "@Test"] + + def apply(self, output: str) -> str: + index = min( + (output.find(marker) for marker in self.markers if marker in output), + default=-1 + ) + return output[index:] if index != -1 else output + + +class LLMOutputProcessor: + """ + Processes and sanitizes LLM outputs using configurable rules. + + This class provides a flexible framework for cleaning LLM outputs + by applying a series of sanitization rules in sequence. + """ + + def __init__(self) -> None: + self._rules: List[OutputSanitizationRule] = [] + self._load_default_rules() + + def _load_default_rules(self) -> None: + """Load the default set of sanitization rules.""" + self._rules = [ + RemoveThinkTagsRule(), + ExtractCodeBlocksRule(), + RemoveNumberedLinesRule(), + ExtractFromAnnotationsRule() + ] + + def add_rule(self, rule: OutputSanitizationRule) -> None: + """Add a custom sanitization rule.""" + self._rules.append(rule) + + def remove_rule(self, rule_type: type) -> None: + """Remove all rules of the specified type.""" + self._rules = [rule for rule in self._rules if not isinstance(rule, rule_type)] + + def clear_rules(self) -> None: + """Remove all sanitization rules.""" + self._rules.clear() + + def process(self, output: str) -> str: + """ + Process the LLM output by applying all sanitization rules in sequence. + + Args: + output: The raw output from the LLM model + + Returns: + The processed and sanitized output + """ + processed_output = output + + for rule in self._rules: + try: + processed_output = rule.apply(processed_output) + except Exception as e: + # Log the error but continue processing with other rules + import logging + logging.warning(f"Error applying rule {rule.__class__.__name__}: {e}") + + return processed_output + + def get_active_rules(self) -> List[str]: + """Get the names of currently active rules.""" + return [rule.__class__.__name__ for rule in self._rules] \ No newline at end of file diff --git a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py index a71ccb19..1a884759 100644 --- a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py +++ b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py @@ -1,9 +1,8 @@ import json import logging import os -import requests +import requests # type: ignore from typing import List, Dict, Union, Any, Optional -from itertools import combinations import re import tree_sitter_java as tsjava @@ -12,6 +11,7 @@ from nimrod.core.merge_scenario_under_analysis import MergeScenarioUnderAnalysis from nimrod.test_suite_generation.generators.test_suite_generator import TestSuiteGenerator from nimrod.test_suite_generation.generators.prompt_manager import PromptManager +from nimrod.test_suite_generation.generators.llm_output_processor import LLMOutputProcessor from nimrod.tests.utils import get_config from nimrod.utils import load_json, save_json @@ -84,12 +84,13 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: class OllamaTestSuiteGenerator(TestSuiteGenerator): - def __init__(self, java_tool, model_key: str = "ollama", model_config: Dict[str, Any] = None): + def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[str, Any] = None): super().__init__(java_tool) self.model_key = model_key self.model_config = model_config or {} - self.api = None + self.api: Optional[Api] = None self.prompt_manager = PromptManager() + self.output_processor = LLMOutputProcessor() # Loads global configurations global_config = get_config() @@ -101,7 +102,7 @@ def __init__(self, java_tool, model_key: str = "ollama", model_config: Dict[str, "zero_shot" ) - logging.info(f"Inicializado {self.model_key} com template: {self.prompt_template}") + logging.info(f"Initialized {self.model_key} with prompt template: {self.prompt_template}") def generate_messages_list(self, method_info: Dict[str, str], full_class_name: str, branch: str, output_path: str) -> Dict[str, List[Dict[str, str]]]: @@ -109,7 +110,8 @@ def generate_messages_list(self, method_info: Dict[str, str], full_class_name: s Generates messages for API requests using the configurable prompt system. Supports different templates (zero-shot, one-shot) and context combinations. """ - self.api.set_branch(branch) # Set the branch + api = self._get_api_instance() + api.set_branch(branch) # Set the branch class_name = full_class_name.split('.')[-1] method_name = method_info.get("method_name", "") @@ -135,10 +137,10 @@ def generate_messages_list(self, method_info: Dict[str, str], full_class_name: s return messages_dict - def _ensure_api_initialized(self) -> None: - """Initializes the API if it has not been initialized yet.""" + def _ensure_api_initialized(self) -> Api: + """Initializes the API if it has not been initialized yet and returns the instance.""" if self.api is not None: - return + return self.api config = get_config() api_params = config.get("api_params", {}) @@ -158,11 +160,16 @@ def _ensure_api_initialized(self) -> None: timeout_seconds=model_params.get("timeout_seconds", 60), temperature=model_params.get("temperature", 0), seed=model_params.get("seed", 42), - model=model_params.get("model", "ollama:70b") + model=model_params.get("model", "codellama:70b") ) + return self.api + + def _get_api_instance(self) -> Api: + """Returns a valid API instance, initializing it if necessary.""" + return self._ensure_api_initialized() def get_generator_tool_name(self) -> str: - self._ensure_api_initialized() + self._get_api_instance() config_suffix = self._generate_config_suffix() return f"{self.model_key.upper()}{config_suffix}" @@ -194,26 +201,15 @@ def _get_test_suite_class_names(self, test_suite_path: str) -> List[str]: def save_output(self, test_template: str, output: str, dir: str, output_file_name: str) -> None: """Saves the output generated by the model to a file, replacing #TEST_METHODS# in the template.""" - # Remove content between tags - output = re.sub(r'.*?', '', output, flags=re.DOTALL) - - # Extract only the content inside ``` blocks (excluding the ``` markers) - matches = re.findall(r'```(?:\w+)?\n?(.*?)```', output, flags=re.DOTALL) - output = '\n'.join(matches).strip() - - # Remove lines starting with "number. " (e.g., "1. public void test() {...}") - output = re.sub(r"^\d+\.\s.*$", "", output, flags=re.MULTILINE) - - # Look for @Before, @BeforeClass first; fallback to @Test if none are found - markers = ["@Before", "@BeforeClass", "@Test"] - index = min((output.find(marker) for marker in markers if marker in output), default=-1) + # Process and sanitize the LLM output using the configured processor + processed_output = self.output_processor.process(output) - # Keep only the content starting from the first found annotation - output = output[index:] if index != -1 else output + # Replace the placeholder in the template with the processed content + filled_template = test_template.replace("#TEST_METHODS#", processed_output) + # Save to file llm_outputs_dir = os.path.join(dir, "llm_outputs") output_file_path = os.path.join(llm_outputs_dir, f"{output_file_name}.txt") - filled_template = test_template.replace("#TEST_METHODS#", output) os.makedirs(llm_outputs_dir, exist_ok=True) with open(output_file_path, "w") as file: @@ -326,7 +322,7 @@ def extract_class_info(self, source_code_path: str, full_method_name: str, full_ return class_fields, class_constructors, class_method except Exception as e: - logging.error(f"An error occurred while extracting class info for '{full_class_name}': {e}") + logging.error("An error occurred while extracting class info for '%s': %s", full_class_name, e) raise e def save_scenario_infos(self, scenario_infos_path: str, class_name: str, methods: Union[List[str], List[Dict[str, str]]], source_code_path: str) -> None: @@ -576,7 +572,7 @@ def record_output_duration(self, time_duration_path: str, output_path: str, clas raise def _execute_tool_for_tests_generation(self, input_jar: str, output_path: str, scenario: MergeScenarioUnderAnalysis, use_determinism: bool) -> None: - self._ensure_api_initialized() + self._get_api_instance() # Define paths for storing scenario information (for prompt generation), # importing data (to be extracted from source code), and recording time duration (for each output) @@ -627,12 +623,13 @@ def _process_prompts(self, messages_list: Dict[str, List[Dict[str, str]]], test_ def _process_single_prompt(self, messages: List[Dict[str, str]], test_template: str, output_path: str, branch: str, class_name: str, imports: List[str], i: int, j: int, time_duration_path: str, project_name: str, output_file_name: str, prompt_key: str) -> None: - total_duration = self.api.timeout_seconds * 1_000_000_000 # Initialize with timeout value in nanoseconds + api = self._get_api_instance() + total_duration = api.timeout_seconds * 1_000_000_000 # Initialize with timeout value in nanoseconds try: logging.debug("Processing output %d%d for prompt key '%s' in branch \"%s\"", i, j, prompt_key, branch) - output = self.api.generate_output(messages) + output = api.generate_output(messages) response = output.get("response", "Response not found.") - total_duration = int(output.get("total_duration", self.api.timeout_seconds * 1_000_000_000)) + total_duration = int(output.get("total_duration", api.timeout_seconds * 1_000_000_000)) self.save_output(test_template, response, output_path, output_file_name) except Exception as e: logging.error("Error while processing output %d%d for prompt key '%s' in branch \"%s\": %s", i, j, prompt_key, branch, e) diff --git a/nimrod/utils.py b/nimrod/utils.py index b51388d8..b6cf35c1 100644 --- a/nimrod/utils.py +++ b/nimrod/utils.py @@ -47,5 +47,9 @@ def load_json(file_path): def save_json(file_path, content): """Saves a dictionary as a JSON file""" - with open(file_path, "w") as file: - json.dump(content, file, indent=4) + try: + os.makedirs(os.path.dirname(file_path), exist_ok=True) + with open(file_path, "w") as file: + json.dump(content, file, indent=4) + except (OSError, IOError) as e: + print(f"Error saving JSON to {file_path}: {e}") From b1f058b9d4dbf9d09b42d417115d582dc983534e Mon Sep 17 00:00:00 2001 From: Nathalia Barbosa Date: Mon, 15 Jun 2026 11:32:47 -0300 Subject: [PATCH 4/5] fix: mypy issues --- nimrod/__main__.py | 4 ++-- .../generators/ollama_test_suite_generator.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nimrod/__main__.py b/nimrod/__main__.py index b3dd3da3..9763c797 100644 --- a/nimrod/__main__.py +++ b/nimrod/__main__.py @@ -1,5 +1,5 @@ import logging -from typing import Dict, List +from typing import Dict, List, Any from nimrod.dynamic_analysis.behavior_change_checker import BehaviorChangeChecker from nimrod.dynamic_analysis.criteria.first_semantic_conflict_criteria import FirstSemanticConflictCriteria from nimrod.dynamic_analysis.criteria.second_semantic_conflict_criteria import SecondSemanticConflictCriteria @@ -25,7 +25,7 @@ from nimrod.input_parsing.input_parser import CsvInputParser, JsonInputParser -def get_llm_test_suite_generators(config: Dict[str, str]) -> List[TestSuiteGenerator]: +def get_llm_test_suite_generators(config: Dict[str, Any]) -> List[TestSuiteGenerator]: """ Creates test suite generators for all available LLM models configured in api_params. Each model gets its own generator instance to enable parallel processing and comparison. diff --git a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py index 1a884759..bafdb4ca 100644 --- a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py +++ b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py @@ -84,10 +84,10 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: class OllamaTestSuiteGenerator(TestSuiteGenerator): - def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[str, Any] = None): + def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[str, Any] = {}): super().__init__(java_tool) self.model_key = model_key - self.model_config = model_config or {} + self.model_config = model_config self.api: Optional[Api] = None self.prompt_manager = PromptManager() self.output_processor = LLMOutputProcessor() From dc6dcef434e6db252d788f1c2149134457c96546 Mon Sep 17 00:00:00 2001 From: Nathalia Barbosa Date: Mon, 29 Jun 2026 18:26:40 -0300 Subject: [PATCH 5/5] remove spacing and extra files --- extra/input-smat.json | 1451 ----------------- extra/run_experiment.py | 565 ------- .../generators/ollama_test_suite_generator.py | 11 +- nimrod/tests/env-config.json | 77 +- 4 files changed, 15 insertions(+), 2089 deletions(-) delete mode 100644 extra/input-smat.json delete mode 100644 extra/run_experiment.py diff --git a/extra/input-smat.json b/extra/input-smat.json deleted file mode 100644 index dc257d48..00000000 --- a/extra/input-smat.json +++ /dev/null @@ -1,1451 +0,0 @@ -[ - { - "projectName": "Storm", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.apache.storm.kafka.spout.KafkaSpoutConfig": [ - { - "method": "toString()", - "leftChangesSummary": "Left removes the field and reference for maxRetries of the returning string from the method toString()", - "rightChangesSummary": "Right performs a refactoring involving the references for key and value variables. It updates how the variable values are accessed (now using get methods instead of directly accessing the values). Right also removes references to the field: kafkaSpoutStreams, tuplesBuilder, topics, and topicWildcardPattern. Finally, it adds reference for subscription and translator." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/base/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/base/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/base/storm-kafka-client-2.0.0-jar-with-dependencies.jar", - "left": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/left/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/left/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/left/storm-kafka-client-2.0.0-jar-with-dependencies.jar", - "right": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/right/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/right/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/right/storm-kafka-client-2.0.0-jar-with-dependencies.jar", - "merge": "/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/merge/kafka-clients-0.10.0.0.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/merge/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/ad2be678831b3b060229fd936e3908110162b7ac/transformed/merge/storm-kafka-client-2.0.0-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "Storm", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.apache.storm.kafka.spout.KafkaSpout": [ - { - "method": "emitTupleIfNotEmitted(ConsumerRecord)", - "leftChangesSummary": "Left performs a refactoring extracting a variable of an IF statement. it also changes another IF condition.", - "rightChangesSummary": "Right updates the method signature changing its return type for boolean and adds return statements." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/base/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/base/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/base/storm-kafka-client-2.0.0-jar-with-dependencies.jar", - "left": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/left/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/left/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/left/storm-kafka-client-2.0.0-jar-with-dependencies.jar", - "right": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/right/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/right/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/right/storm-kafka-client-2.0.0-jar-with-dependencies.jar", - "merge": "/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/merge/kafka-clients-2.4.1.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/merge/storm-core-2.0.0-jar-with-dependencies.jar:/path/mergedataset/storm/bd1f5c54752f67b484a83c26667331234234d3a3/transformed/merge/storm-kafka-client-2.0.0-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "antlr4", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.antlr.v4.codegen.target.Python2Target": [ - { - "method": "python2Keywords", - "leftChangesSummary": "Left changes the list of values of an array of Strings during its initialization (adition of a new value)", - "rightChangesSummary": "Right changes the list of values of an array of Strings during its initialization (adition of a new value)" - } - ], - "org.antlr.v4.codegen.target.Python3Target": [ - { - "method": "python3Keywords", - "leftChangesSummary": "Left changes the list of values of an array of Strings during its initialization (adition of a new value)", - "rightChangesSummary": "Right changes the list of values of an array of Strings during its initialization (adition of a new value)" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/base/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/left/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/right/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-master-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-maven-plugin-4.5.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/antlr4/69ff2669eec265e25721dbc27cb00f6c381d0b41/transformed/merge/antlr4-runtime-4.5.3-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "cloud-slang", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "io.cloudslang.lang.api.SlangImpl": [ - { - "method": "getAllEventTypes()", - "leftChangesSummary": "Left adds new values into a list", - "rightChangesSummary": "Right adds new values into a list" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/base/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/left/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/right/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-all-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-cli-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-compiler-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-content-verifier-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-entities-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-runtime-0.7.50-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/cloud-slang/20bac30d9bd76569aa6a4fa1e8261c1a9b5e6f76/transformed/merge/cloudslang-tests-0.7.50-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "fitnesse", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "fitnesse.testsystems.slim.tables.SlimTableFactory": [ - { - "method": "SlimTableFactory()", - "leftChangesSummary": "Left adds two new elements into a map, by calling the add method addTableTye twice.", - "rightChangesSummary": "Right adds a new element into a map, also calling the method addTableType." - } - ], - "fitnesse.testsystems.slim.tables.SlimTableFactoryTest": [ - { - "method": "setUp()", - "leftChangesSummary": "Left adds two entries on the field map.", - "rightChangesSummary": "Right adds one entry on the field map." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/base/fitnesse-standalone.jar", - "left": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/left/fitnesse-standalone.jar", - "right": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/right/fitnesse-standalone.jar", - "merge": "/path/mergedataset/fitnesse/4d9ba9d221d879507440feb084fa7521b95111ec/transformed/merge/fitnesse-standalone.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "okhttp", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.squareup.okhttp.OkHttpClient": [ - { - "method": "copyWithDefaults()", - "leftChangesSummary": "Left changed the object returned by the method using the current object of the class and ass a new value to the field transports.", - "rightChangesSummary": "Right changes the value assigned to result.hostnameverifier adding now an object OkHostnameVerifier." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/base/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/guide-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/left/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/right/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/guide-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/okhttp-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/okhttp-apache-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/sample-parent-1.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/35166168529bd27281685e56a0a122eff44460e9/transformed/merge/simple-client-1.0-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "okhttp", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.squareup.okhttp.internal.bytes.GzipSource": [ - { - "method": "consumeHeader(Deadline)", - "leftChangesSummary": "Left does a refactoring by renaming the method getByte on OkBuffer class.", - "rightChangesSummary": "Right does a refactoring by extracting the local method seek to OkBuffers class." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/base/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/left/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/right/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/benchmarks-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/guide-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/mockwebserver-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/okhttp-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/okhttp-apache-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/okhttp-protocols-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/sample-parent-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/simple-client-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/okhttp/1151c9853ccc3c9c3211c613b9b845b925f8c6a6/transformed/merge/static-server-2.0.0-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "jOOQ", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.jooq.impl.DSL": [ - { - "method": "coalesce(T, T[])", - "leftChangesSummary": "added method declaration coalesce(T, T[])", - "rightChangesSummary": "also added method declaration coalesce(T, T[]), but with different body" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/base/jooq-scala-3.6.0-SNAPSHOT.jar", - "left": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/left/jooq-scala-3.6.0-SNAPSHOT.jar", - "right": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/right/jooq-scala-3.6.0-SNAPSHOT.jar", - "merge": "/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-maven-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-codegen-maven-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-meta-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-meta-3.6.0-SNAPSHOT.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-parent-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-scala-3.6.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/jOOQ/d96120f327107feb1ebb15e7c090dc38eeff72ca/transformed/merge/jooq-scala-3.6.0-SNAPSHOT.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "swagger-maven-plugin", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.github.kongchen.swagger.docgen.reader.AbstractReader": [ - { - "method": "hasValidAnnotations(List)", - "leftChangesSummary": "Left adds items to the returned list used to define the return of method hasValidAnnotations", - "rightChangesSummary": "Right also adds items to the returned list used to define the return of method hasValidAnnotations" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/base/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/base/swagger-maven-plugin-3.1.1-SNAPSHOT.jar", - "left": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/left/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/left/swagger-maven-plugin-3.1.1-SNAPSHOT.jar", - "right": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/right/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/right/swagger-maven-plugin-3.1.1-SNAPSHOT.jar", - "merge": "/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/merge/swagger-maven-plugin-3.1.1-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-maven-plugin/e825a7fdc6ef688f1253b93d2cb236e710acfc56/transformed/merge/swagger-maven-plugin-3.1.1-SNAPSHOT.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "retrofit", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "retrofit.RequestBuilder": [ - { - "method": "build()", - "leftChangesSummary": "Left changed the argument of a method call and chained it with another call. Semantically, it inserts \"?\" in the middle of a string stored in the url variable.", - "rightChangesSummary": "Right adds an if statement that surrounds an assignment (which comes from base) to the url variable." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/base/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/left/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/right/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/parent-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/retrofit-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/sample-github-client-1.0.2-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/71f622ce51031b152a0be6ad5facfb27a654bf5a/transformed/merge/samples-1.0.2-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "retrofit", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "retrofit.RestAdapter": [ - { - "method": "logAndReplaceResponse(String, Response, long)", - "leftChangesSummary": "Left does a refactoring.", - "rightChangesSummary": "Right creates a new method toString() and uses it to write on log." - }, - { - "method": "logAndReplaceRequest(Request)", - "leftChangesSummary": "Deleted a loop with many calls to log and changed to one with arguments different from the previous call, which simply writes to the log output.", - "rightChangesSummary": "Change the log parameter, adding a toString() on header attribute (header.toString())." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/base/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/left/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/right/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/converter-jackson-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/converter-protobuf-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/converter-wire-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/github-client-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/parent-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/retrofit-1.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/retrofit/2b6c719c6645f8e48dca6d0047c752069d321bc4/transformed/merge/retrofit-converters-1.2.3-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "jsoup", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.jsoup.helper.HttpConnection": [ - { - "method": "execute(Connection.Request, Response)", - "leftChangesSummary": "Left adds a new condition (OR) that is reponsible for changing the value of the local variable needsRedirect.", - "rightChangesSummary": "Right updates another if statement conditions; it changes a set of conditions grouped with AND, to the OR operator. This if is responsible for throw a new exception." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/base/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/left/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/right/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/jsoup/a8b6982de98ff76ef254031d7152fff57f6bf941/transformed/merge/jsoup-1.8.4-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "jsoup", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.jsoup.helper.HttpConnection": [ - { - "method": "execute(Connection.Request, Response)", - "leftChangesSummary": "Left adds a new condition (OR) that is reponsible for changing the value of the local variable needsRedirect.", - "rightChangesSummary": "Right updates another if statement conditions; it changes a set of conditions grouped with AND, to the OR operator. This if is responsible for throw a new exception." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/base/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/left/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/right/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/jsoup/3f7d2c71dbbbb289c684f339874eed8ac2747fa0/transformed/merge/jsoup-1.7.4-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "jsoup", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.jsoup.nodes.TextNode": [ - { - "method": "outerHtmlHead(StringBuilder, int, Document.OutputSettings)", - "leftChangesSummary": "Left changes the condition of an if statement, which calls the method preserveWhitespace. Now the method only performs its verifications if the node is not null and is an instance of Element type; otherwise, no action is performed and the value of local variable html is not updated.", - "rightChangesSummary": "Right adds a new condition (OR) in an if statement, which may change the value of the parameter accum." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/base/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/left/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/right/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/jsoup/a44e18aa3c1fcd25a68a5965f9490d8f7d026509/transformed/merge/jsoup-1.7.2-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "jsoup", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.jsoup.helper.HttpConnection": [ - { - "method": "createConnection(Connection.Request)", - "leftChangesSummary": "Left adds a IF statement, allowing extra set fields of the object returned by the method", - "rightChangesSummary": "Rights changes a IF condition, setting more fields of the object returned by the method and accepting more values than before" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/base/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/left/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/right/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/jsoup/fee4762322f85a1109edd75ccb67f38cf5008c80/transformed/merge/jsoup-1.8.2-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "SimianArmy", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.netflix.simianarmy.basic.janitor.BasicJanitorMonkeyContext": [ - { - "method": "getInstanceJanitor()", - "leftChangesSummary": "Left updates the rule added in ruleEngine by method addRule().", - "rightChangesSummary": "Right adds a new if statement, which may also add a new rule in ruleEngine." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/base/simianarmy-all-2.5.0-SNAPSHOT.jar", - "left": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/left/simianarmy-all-2.5.0-SNAPSHOT.jar", - "right": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/right/simianarmy-all-2.5.0-SNAPSHOT.jar", - "merge": "/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/gradle-wrapper.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-2.5.0-SNAPSHOT-javadoc.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-2.5.0-SNAPSHOT-sources.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-2.5.0-SNAPSHOT.jar:/path/mergedataset/SimianArmy/345ad9513aafff397050d613fa87ad06ddffe99d/transformed/merge/simianarmy-all-2.5.0-SNAPSHOT.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "titan", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.thinkaurelius.titan.graphdb.database.serialize.SerializerInitialization": [ - { - "method": "initialize(Serializer)", - "leftChangesSummary": "Left adds and removes calls for method registerClass of serialize object, that registers new classes in the registrations hashmap.", - "rightChangesSummary": "Right changes one call for method registerClass by adding a new parameter (instead of only two), and this new parameter will be added into headers hashmap." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/base/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/left/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/right/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/titan/387c16ea05ef9fa312f37139228d2bbf61455ff4/transformed/merge/titan-core-0.4.1-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "Activiti", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.activiti.engine.impl.persistence.entity.DeploymentEntityManager": [ - { - "method": "deleteDeployment(String, boolean)", - "leftChangesSummary": "Left changes a if condition, that is reponsible for changing the value of the local variable nrOfProcessDefinitionsWithSameKey (incrementation)", - "rightChangesSummary": "Right adds a new IF statement; in case the condition is TRUE, it calls new mtethod using the objects of the local list timerStartJobs." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/base/yuicompressor-2.4.2.jar", - "left": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/left/yuicompressor-2.4.2.jar", - "right": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/right/yuicompressor-2.4.2.jar", - "merge": "/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-image-generator-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/jslint4java-1.3.3.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/50d8e43eb5917c63abfbcdec1e68e510943f325a/transformed/merge/yuicompressor-2.4.2.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "Activiti", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior": [ - { - "method": "execute(ActivityExecution)", - "leftChangesSummary": "Left adds a new IF statement, which may set the field formKey of the local variable formKey, or throws an exception.", - "rightChangesSummary": "Right adds a new IF statement, which may call static external methods without using their returns." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/base/yuicompressor-2.4.2.jar", - "left": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/left/yuicompressor-2.4.2.jar", - "right": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/right/yuicompressor-2.4.2.jar", - "merge": "/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-bpmn-converter-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-bpmn-model-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-engine-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-process-validation-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/activiti-root-5.16-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/jslint4java-1.3.3.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/org.activiti.designer.integration-0.6.0.jar:/path/mergedataset/activiti/bf46684ba62f5883673ea8fb0a14aecfe0aedea2/transformed/merge/yuicompressor-2.4.2.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "druid", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.metamx.druid.loading.S3SegmentPusher": [ - { - "method": "push(File, DataSegment)", - "leftChangesSummary": "Left changes the object that will be returned by setting the object field binaryVersion.", - "rightChangesSummary": "Right set the field acl on object toPush, which is used by the returned object." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-client-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-examples-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-examples-rand-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-examples-twitter-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-index-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-indexer-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-merger-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-realtime-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-server-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/base/druid-services-0.2.3-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-client-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-examples-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-examples-rand-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-examples-twitter-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-index-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-indexer-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-merger-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-realtime-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-server-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/left/druid-services-0.2.8-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-client-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-examples-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-examples-rand-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-examples-twitter-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-index-common-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-indexer-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-merger-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-realtime-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-server-0.2.3-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/right/druid-services-0.2.3-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-client-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-examples-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-examples-rand-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-examples-twitter-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-index-common-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-indexer-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-merger-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-realtime-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-server-0.2.8-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/druid/05168808c278c080c59c19e858d9471b316cd1f5/transformed/merge/druid-services-0.2.8-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "netty", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder": [ - { - "method": "decode(ChannelHandlerContext, Channel, ChannelBuffer)", - "leftChangesSummary": "Left updates how variable frameLength is incremented, which is done only if the new conditional in the if statement is true.", - "rightChangesSummary": "Right updates method call failIfNecessary adding a new parameter (boolean value). [But these changes were also done by Left.]" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/base/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/left/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/right/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/netty/193acdb36cd3da9bfc62dd69c4208dff3f0a2b1b/transformed/merge/netty-4.0.0.Alpha1-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "OpenTripPlanner", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.opentripplanner.routing.spt.MultiShortestPathTree": [ - { - "method": "dominates(State, State)", - "leftChangesSummary": "Left renames some local variables and updates three boolean local variables used to define the method return.", - "rightChangesSummary": "Right adds a new if statement, which may return false." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/base/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/left/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/right/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/OpenTripPlanner/4c506dce43775704919d084f0acfba86d251bf4a/transformed/merge/otp-1.0.0-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "webbit", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.webbitserver.netty.WebSocketClient": [ - { - "method": "adjustPipelineToWebSocket(ChannelHandlerContext, MessageEvent, ChannelHandler, ChannelHandler)", - "leftChangesSummary": "Left sets the version of webSockectConnection object calling the method setHybiWebSocketVersion.", - "rightChangesSummary": "Right changes the order of parameters used to create the local variable webSocketChannelHandler" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/base/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/left/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/right/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/webbit/74d2d2b87704d003acacb34e4ca8fb5f897b938f/transformed/merge/webbit-0.3.7-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory": [ - { - "method": "customizeConnector(org.apache.catalina.connector.Connector)", - "leftChangesSummary": "Added an if condition that has an asset in its body. One method call to configureSsl and two set method calls to connector", - "rightChangesSummary": "Added a wildcard to the generic of the AbstractProtocol class which is used as a casting" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/base/spring-boot-1.1.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/left/spring-boot-1.2.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/right/spring-boot-1.1.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/spring-boot/2d4e68a9777601bfb8309c94d8b74bc21be80ad1/original/merge/spring-boot-1.2.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "original" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.autoconfigure.mongo.MongoProperties": [ - { - "method": "builder(com.mongodb.MongoClientOptions)", - "leftChangesSummary": "Left changes one attribute of an object using a set method", - "rightChangesSummary": "Right changes nine attributes of an object using a set method" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/base/buildFinal.jar", - "left": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/left/buildFinal.jar", - "right": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/right/buildFinal.jar", - "merge": "/path/mergedataset/spring-boot/958a0a45f164601d01cb706c19f22ed3e25eff56/original/merge/buildFinal.jar" - }, - "jarType": "original" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.context.web.SpringBootServletInitializer": [ - { - "method": "createRootApplicationContext(javax.servlet.ServletContext)", - "leftChangesSummary": "Modified a class's instance declaration, instead of using new Class(), called a method that does this.", - "rightChangesSummary": "Inserted a conditional (if) for an attribute that has not been changed from the left, checking if an attribute of the class is true or false." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/base/spring-boot-1.2.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/left/spring-boot-1.3.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/right/spring-boot-1.2.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/spring-boot/3444ebbc05b99a164474c14d6a6784f749514428/original/merge/spring-boot-1.3.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "original" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.jta.atomikos.AtomikosProperties": [ - { - "method": "asProperties()", - "leftChangesSummary": "Left adds calls for method set, which adds values on the object properties.", - "rightChangesSummary": "Right removes calls for method set, which added values on the object properties." - } - ], - "org.springframework.boot.jta.atomikos.AtomikosPropertiesTests": [ - { - "method": "testProperties()", - "leftChangesSummary": "Left sets five new properties of the object properties (field), and consequently updates the expected value of first assertion.", - "rightChangesSummary": "Right removes five properties of the object properties (field), and consequently updates the expected value of first assertion." - }, - { - "method": "testDefaultProperties()", - "leftChangesSummary": "Added some attributes for a test, changing the quantity of the parameters and the key.length() attribute.", - "rightChangesSummary": "Removed some attributes for a test, changing the quantity of the parameters and the key.length() attribute." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/base/spring-boot-1.5.4.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/left/spring-boot-2.0.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/right/spring-boot-1.5.4.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/spring-boot/6664ce19d6f2388ebd6cf54763f54fdddd226b9a/original/merge/spring-boot-2.0.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "original" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.loader.archive.ExplodedArchive": [ - { - "method": "getUrl()", - "leftChangesSummary": "Left removes one parameter (handler) for the new URL object, that is returned by the method.", - "rightChangesSummary": "Right updates one parameter used to create the URL object that is returned by the method, by calling toURL()" - } - ], - "org.springframework.boot.loader.archive.ExplodedArchiveTests": [ - { - "method": "getUrl()", - "leftChangesSummary": "Equals to the base class", - "rightChangesSummary": "Changed a test assert" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/base/spring-boot-loader-1.3.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/left/spring-boot-loader-1.4.0.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/right/spring-boot-loader-1.3.6.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/spring-boot/af20dc6cc45c032573413c401f9f73aa75371744/transformed/merge/spring-boot-loader-1.4.0.BUILD-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory": [ - { - "method": "createDeploymentManager(ServletContextInitializer)", - "leftChangesSummary": "Left sets one attribute of object deployment, which is used to create the returned method object manager.", - "rightChangesSummary": "Right modifies the way the returned manager object is created; before, it was done by calling the method defaultContainer from Servlets, and now it’s done by calling the method newContainer." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/base/spring-boot-1.3.1.RELEASE-jar-with-dependencies.jar", - "left": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/left/spring-boot-1.3.1.BUILD-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/right/spring-boot-1.3.1.RELEASE-jar-with-dependencies.jar", - "merge": "/path/mergedataset/spring-boot/ea8107b6a53fa60b5f23b33e1b6d2e88bb60133c/transformed/merge/spring-boot-1.3.1.BUILD-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "spring-boot", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer": [ - { - "method": "logAutoConfigurationReport(boolean)", - "leftChangesSummary": "Change the string sent as a parameter to the logger.debug method", - "rightChangesSummary": "Change the string sent as a parameter to the logger.info method" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/base/buildFinal.jar", - "left": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/left/buildFinal.jar", - "right": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/right/buildFinal.jar", - "merge": "/path/mergedataset/spring-boot/fdd3f12ee0f92ac18844c08bf71df39feebb6673/original/merge/buildFinal.jar" - }, - "jarType": "original" - }, - { - "projectName": "eureka", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.netflix.appinfo.ApplicationInfoManager": [ - { - "method": "ApplicationInfoManager()", - "leftChangesSummary": "Left adds a new attribute, and also its initialization in the constructor.", - "rightChangesSummary": "Right changes the contructor access modifier to public." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/base/eureka-client-all-1.1.155-SNAPSHOT.jar", - "left": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/left/eureka-client-all-1.1.157-SNAPSHOT.jar", - "right": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/right/eureka-client-all-1.1.155-SNAPSHOT.jar", - "merge": "/path/mergedataset/eureka/6b09030e95e118a784ca7ec616398a4f0e384bcd/transformed/merge/eureka-client-all-1.1.157-SNAPSHOT.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "atmosphere", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.atmosphere.cpr.AtmosphereConfig": [ - { - "method": "AtmosphereConfig()", - "leftChangesSummary": "Left changes the contructor access modifier to protected.", - "rightChangesSummary": "Right adds a new attribute, and also its initialization in the constructor." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/base/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar", - "left": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/left/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar", - "right": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/right/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar", - "merge": "/path/mergedataset/atmosphere/ffc0c6e274094c6423e29d1c45bab1593b8fac7d/transformed/merge/atmosphere-runtime-2.3.0-SNAPSHOT-fat-tests.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "resty-gwt", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.fusesource.restygwt.rebind.DirectRestServiceInterfaceClassCreator": [ - { - "method": "getMethodCallback(JMethod)", - "leftChangesSummary": "changed if statement (condition, and block) on method getMethodCallback(JMethod)", - "rightChangesSummary": "extracted variable refactoring and added if statement on method getMethodCallback(JMethod)" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/base/restygwt-2.0.4-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/base/restygwt-2.0.4-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/base/restygwt-project-2.0.4-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/left/restygwt-2.2.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/left/restygwt-2.2.0-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/left/restygwt-project-2.2.0-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/right/restygwt-2.0.4-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/right/restygwt-2.0.4-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/right/restygwt-project-2.0.4-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/merge/restygwt-2.2.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/merge/restygwt-2.2.0-SNAPSHOT.jar:/path/mergedataset/resty-gwt/867b917c43c32acbdcac55767e7f04334006c866/transformed/merge/restygwt-project-2.2.0-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "HikariCP", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.zaxxer.hikari.HikariConfig": [ - { - "method": "validate()", - "leftChangesSummary": "Left adds a new IF statement, which may write in logger calling method info", - "rightChangesSummary": "Right removes source code, which would write in logger calling method error or wanr, or even trhows an exception. Changes on formating" - } - ], - "com.zaxxer.hikari.HikariPool": [ - { - "method": "addConnection()", - "leftChangesSummary": "Left: changes if condition that decrement totalGetCOnnection", - "rightChangesSummary": "Right: adds a new call to addConnection from addConnections" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/base/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/left/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/right/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/HikariCP/1bca94af9ec625f21d1b58ff10efb5be71ab87a6/transformed/merge/HikariCP-1.3.4-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "quickml", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "quickdt.experiments.OutOfTimeCrossValidatorRunner": [ - { - "method": "getRandomForestBuilder(int, int)", - "leftChangesSummary": "Left deletes a method call, which set the field maxDepth.", - "rightChangesSummary": "Right renames a local variable RandomForestBuilder, and replaces the method return for that local variable. This variable has a different type related to the method return type on Base commit, but the interface is still the superclass." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/base/quickdt-0.1.8-jar-with-dependencies.jar", - "left": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/left/quickdt-0.1.8-jar-with-dependencies.jar", - "right": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/right/quickdt-0.1.8.7-jar-with-dependencies.jar", - "merge": "/path/mergedataset/quickml/bae968d9a85c0501ba8842a6f88e7fc2c6b78693/transformed/merge/quickdt-0.1.8.7-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "pushy", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.relayrides.pushy.apns.PushManager": [ - { - "method": "handleConnectionClosure(ApnsConnection)", - "leftChangesSummary": "Left replaces “new Thread” with “listenerExecutor”", - "rightChangesSummary": "Right does a refactoring by “extracting\" two local methods." - }, - { - "method": "handleConnectionFailure(com.relayrides.pushy.apns.ApnsConnection| java.lang.Throwable)", - "leftChangesSummary": "Left changes the way a new thread is created.", - "rightChangesSummary": "Right does a structural refactoring by extracting two methods." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/base/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/left/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/right/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/pushy/58901c846e4f0874977c5aabbc34bcb4de3670e0/transformed/merge/pushy-0.3-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "java-faker", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "com.github.javafaker.Faker": [ - { - "method": "Faker(Locale, Random)", - "leftChangesSummary": "Left adds an initialization of two fields on constructor.", - "rightChangesSummary": "Right changes the initialization of a different field." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/base/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/left/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/right/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/java-faker/ca42fcfaf45cae1754c58e02e1d5d2a58ec03561/transformed/merge/javafaker-0.9-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "swagger-core", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "io.swagger.jaxrs2.OperationParser": [ - { - "method": "getSchemaFromAnnotation(io.swagger.oas.annotations.media.Schema)", - "leftChangesSummary": "Left adds two IF statements, which may set some fields on object schemaObject.", - "rightChangesSummary": "Right renames three methods _enum() to allowableValues(), and _default() to defaultValue" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/base/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/left/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/right/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-annotations-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-core-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-integration-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-jaxrs2-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-models-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/swagger-core/e7fea7c4889dbdd6a4e0b2d059c8aa0f126ab1c2/transformed/merge/swagger-project-2.0.0-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "cucumber-jvm", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "cuke4duke.internal.java.JavaLanguage": [ - { - "method": "load(String)", - "leftChangesSummary": "Left adds a new IF statement, which may restrict the new addition of the local variable clazz on the field objectFactory.", - "rightChangesSummary": "Right changes generics allowing any type for the local variable clazz." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/base/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/base/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/base/parent-0.1.2-jar-with-dependencies.jar", - "left": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/left/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/left/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/left/parent-0.1.2-jar-with-dependencies.jar", - "right": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/right/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/right/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/right/parent-0.1.2-jar-with-dependencies.jar", - "merge": "/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/merge/cuke4duke-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/merge/cuke4duke-maven-plugin-0.1.2-jar-with-dependencies.jar:/path/mergedataset/cucumber-jvm/4505c156b6267c1b760deec570ddbfe047b42aa9/transformed/merge/parent-0.1.2-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "hector", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "me.prettyprint.cassandra.connection.HConnectionManager": [ - { - "method": "operateWithFailover(me.prettyprint.cassandra.service.Operation)", - "leftChangesSummary": "Left changes the method used to write in the logger.", - "rightChangesSummary": "Right changes the initialization of the local variable stopWatch" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/base/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/left/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/right/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/hector/213f7887ea70eabdf0705cf8454de29af89e8c38/transformed/merge/hector-core-0.8.0-1-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "hector", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "me.prettyprint.cassandra.connection.client.HSaslThriftClient": [ - { - "method": "open()", - "leftChangesSummary": "Left does a refactoring regarding the value assigned to the local variable socket and adding a parameter when creating the object transport", - "rightChangesSummary": "Right remove a If statement, which changed the value assigned to transport" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/base/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/left/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/right/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/hector/0588608e7a2bdf974c985ff546207104f672bf6c/transformed/merge/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "hector", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "me.prettyprint.cassandra.connection.client.HKerberosThriftClient": [ - { - "method": "open()", - "leftChangesSummary": "Left does a refactoring regarding the value assigned to the local variable socket", - "rightChangesSummary": "Right remove a If statement, which changed the value assigned to transport" - } - ], - "me.prettyprint.cassandra.connection.client.HThriftClient": [ - { - "method": "open()", - "leftChangesSummary": "Left does a refactoring regarding the value assigned to the local variable socket and adding a parameter when creating the object transport", - "rightChangesSummary": "Right remove a If statement, which changed the value assigned to transport" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/base/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/left/hector-core-1.1-2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/right/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/hector/a33a46506656a39d1b0f7780973905665d3b6145/transformed/merge/hector-core-1.1-3-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "elasticsearch-river-mongodb", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.elasticsearch.river.mongodb.Slurper": [ - { - "method": "assignCollections()", - "leftChangesSummary": "Left adds some if statements and changed the values of two variables: adminDb and oplogDb.", - "rightChangesSummary": "Right changes the value of oplogRefsCollection by calling a method of oplogDb" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/base/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/left/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/right/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/elasticsearch-river-mongodb/3d4f99516ba3177f7d88a1f600923138a8b77cc8/transformed/merge/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "elasticsearch-river-mongodb", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.elasticsearch.river.mongodb.MongoDBRiverDefinition": [ - { - "method": "parseSettings(String, String, org.elasticsearch.river.RiverSettings, org.elasticsearch.script.ScriptService)", - "leftChangesSummary": "Left changes the local object builder, which is used as the returning object.", - "rightChangesSummary": "Right replaces the method used to write in the object logger." - } - ], - "org.elasticsearch.river.mongodb.Indexer": [ - { - "method": "applyAdvancedTransformation(org.elasticsearch.river.mongodb.MongoDBRiver$QueueEntry, String)", - "leftChangesSummary": "Left changes the local object builder, which is used as the returning object.", - "rightChangesSummary": "Right replaces the method used to write in the object logger." - }, - { - "method": "processBlockingQueue(org.elasticsearch.river.mongodb.MongoDBRiver$QueueEntry)", - "leftChangesSummary": "Left adds a new parameter used to create the local object executableScript.", - "rightChangesSummary": "Right replaces the method used to write in the object logger and the value assigned to the local object ctx." - } - ], - "org.elasticsearch.river.mongodb.Slurper": [ - { - "method": "run()", - "leftChangesSummary": "Left adds a if statement, restricting the value assigned to startTimestamp to be increased.", - "rightChangesSummary": "Right replaces the method used to write in the object logger." - }, - { - "method": "addToStream(org.elasticsearch.river.mongodb.Operation, org.elasticsearch.river.mongodb.Timestamp, com.mongodb.DBObject, String)", - "leftChangesSummary": "Left writes in the object logger.", - "rightChangesSummary": "Right writes in the object logger." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/base/elasticsearch-river-mongodb-2.0.1-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/left/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/right/elasticsearch-river-mongodb-2.0.1-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/elasticsearch-river-mongodb/6b6ce8e851c6613213c4508c3f277a80649e0c7b/transformed/merge/elasticsearch-river-mongodb-2.0.2-SNAPSHOT-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "elasticsearch", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.elasticsearch.index.query.support.NestedInnerQueryParseSupport": [ - { - "method": "setPathLevel()", - "leftChangesSummary": "Left adds a new field, and use it to assign values for fields parentFilter and parentObjectMapper; it has the same behavior when compared to base commit.", - "rightChangesSummary": "Right changes the value assigned to childFilter" - } - ], - "org.elasticsearch.index.query.MultiMatchQueryBuilder": [ - { - "method": "doXContent(org.elasticsearch.common.xcontent.XContentBuilder| org.elasticsearch.common.xcontent.ToXContent$Params)", - "leftChangesSummary": "Changed the parameter sent to the startObject method but the value of the parameter remained the same; Removed two if conditions that made calls to the field method by passing (\"boost\", boost) and (\"_name\", queryName). Added a call to the printBoostAndQueryName method passing the builder object as a parameter.", - "rightChangesSummary": "Removed an if condition (rewrite! = Null) that used the field method of the builder object" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/base/elasticsearch-2.1.0-jar-with-dependencies.jar", - "left": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/left/elasticsearch-2.1.0-jar-with-dependencies.jar", - "right": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/right/elasticsearch-2.1.0-jar-with-dependencies.jar", - "merge": "/path/mergedataset/elasticsearch/59cb67c7bd0ab6311115b20954e013412b676b29/transformed/merge/elasticsearch-2.1.0-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "elasticsearch", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.elasticsearch.index.query.SimpleIndexQueryParserTests": [ - { - "method": "setup()", - "leftChangesSummary": "Left set the fields type and id on the local variable doc.", - "rightChangesSummary": "Right adds a new entry on the local obecjt settings." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/base/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "left": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/left/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "right": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/right/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar", - "merge": "/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/merge/elasticsearch-2.0.0-SNAPSHOT-jar-with-dependencies.jar:/path/mergedataset/elasticsearch/36884807b3cc9d660db4da062275c7fdbec8ba67/transformed/merge/elasticsearch-2.1.0-jar-with-dependencies.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "elasticsearch", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.elasticsearch.common.settings.IndexScopedSettings": [ - { - "method": "BUILT_IN_INDEX_SETTINGS", - "leftChangesSummary": "Added two elements to a set is a static attribute named BUILT_IN_INDEX_SETTINGS initialization", - "rightChangesSummary": "Added one element to a set is a static attribute named BUILT_IN_INDEX_SETTINGS initialization" - } - ], - "org.elasticsearch.action.index.TransportIndexAction": [ - { - "method": "executeIndexRequestOnPrimary(org.elasticsearch.action.index.IndexRequest| org.elasticsearch.index.shard.IndexShard| org.elasticsearch.cluster.action.index.MappingUpdatedAction)", - "leftChangesSummary": "Added a call to a set method \"seqNo\", and passed the value as a parameter to the IndexResponse constructor", - "rightChangesSummary": "Extract variable on the object created by the IndexResponse constructor" - } - ], - "org.elasticsearch.action.support.replication.ReplicationOperationTests": [ - { - "method": "testReplication()", - "leftChangesSummary": "Extracted a variable from constructor TestReplicationOperation creating a TestPrimary object (Refactor) and added two assertThat method calls on the end of the method", - "rightChangesSummary": "Changed the generic used at the PlainActionFuture type on the listener variable and Changed the type of shardInfo to import directly the inner ShartInfo, instead as accessing it from its outer class " - } - ], - "org.elasticsearch.index.IndexSettings": [ - { - "method": "IndexSettings(org.elasticsearch.cluster.metadata.IndexMetaData| org.elasticsearch.common.settings.Settings| java.util.function.Predicate| org.elasticsearch.common.settings.IndexScopedSettings)", - "leftChangesSummary": "Added the initialization to the globalCheckPointInterval field getting from scopedSettings map", - "rightChangesSummary": "Added the initialization to the maxRefreshListeners field getting from scopedSettings map and added a call to addSettingsUpdateConsumer for the key that got the maxRefreshListeners" - } - ], - "org.elasticsearch.action.bulk.TransportShardBulkAction": [ - { - "method": "update(org.elasticsearch.cluster.metadata.IndexMetaData| org.elasticsearch.action.bulk.BulkShardRequest| org.elasticsearch.index.shard.IndexShard| long[]| org.elasticsearch.index.VersionType| org.elasticsearch.index.translog.Translog$Location| int| org.elasticsearch.action.bulk.BulkItemRequest)", - "leftChangesSummary": "Added the parameter seqNo to both calls of the UpdateResopnse constructor", - "rightChangesSummary": "Added a SupressWarning annotation twice and refactored the WriteResult class to return its parameters via getResponse and getLocation (Refactor)" - } - ], - "org.elasticsearch.action.support.replication.TransportReplicationAction": [ - { - "method": "doRun()", - "leftChangesSummary": "Left creates a new local variable, and assigns a value to it depending on a try, which was also changed by Left.", - "rightChangesSummary": "Right adds a new local variable and assings a value to it inside a try, which was chaged by Left." - } - ], - "org.elasticsearch.action.support.replication.ReplicationOperation": [ - { - "method": "execute()", - "leftChangesSummary": "Left creates a new local variable primaryRounting, while it also adds a new call for updateLocalCheckpointForShard on the field primary.", - "rightChangesSummary": "Right creates a new local variable primaryRounting and renames the local variable primaryId. It also adds a new call for replicaRequest on the field primaryResult." - } - ], - "org.elasticsearch.index.engine.InternalEngineTests": [ - { - "method": "testRecoverFromForeignTranslog()", - "leftChangesSummary": "Left updates the method call for creating a new Index object. Now, it is also assigned a value for field seqNo.", - "rightChangesSummary": "Right updates the method call for creating a new EngineConfig object. Now, it is also assigned a value for field refreshListeners." - } - ], - "org.elasticsearch.index.engine.InternalEngine": [ - { - "method": "InternalEngine(org.elasticsearch.index.engine.EngineConfig)", - "leftChangesSummary": "Left adds a new field in the class, and also assigns a value for it in the constructor.", - "rightChangesSummary": "Right adds a new IF statement, which whether a property on the object engineConfig is nulll." - } - ], - "org.elasticsearch.action.DocWriteResponse": [ - { - "method": "writeTo(org.elasticsearch.common.io.stream.StreamOutput)", - "leftChangesSummary": "Left adds a call for method writeZLong on the out object sending a long value.", - "rightChangesSummary": "Right adds a call for method writeBoolean on the object out sending a boolean value." - }, - { - "method": "readFrom(org.elasticsearch.common.io.stream.StreamInput)", - "leftChangesSummary": "Left adds a call for method readZLong on the in object.", - "rightChangesSummary": "Right adds a call for method readBoolean on the object in." - }, - { - "method": "toXContent(org.elasticsearch.common.xcontent.XContentBuilder| org.elasticsearch.common.xcontent.ToXContent$Params)", - "leftChangesSummary": "Left adds two calls for method field on the object builder.", - "rightChangesSummary": "Right adds a call for method field on the object builder." - } - ], - "org.elasticsearch.cluster.metadata.MetaDataCreateIndexService": [ - { - "method": "createIndex(org.elasticsearch.action.admin.indices.create.CreateIndexClusterStateUpdateRequest| org.elasticsearch.action.ActionListener)", - "leftChangesSummary": "Left adds two new parameters when creating the local variable indexService.", - "rightChangesSummary": "Right extracts a local variable (refactoring) and also adds a new local variable routingNumShards." - } - ], - "org.elasticsearch.action.update.TransportUpdateAction": [ - { - "method": "shardOperation(org.elasticsearch.action.update.UpdateRequest| org.elasticsearch.action.ActionListener| int)", - "leftChangesSummary": "Left adds new parameters when creating the local variable update.", - "rightChangesSummary": "Right sets the field forcedRefresh of the local variable update" - } - ], - "org.elasticsearch.action.delete.TransportDeleteAction": [ - { - "method": "executeDeleteRequestOnPrimary(org.elasticsearch.action.delete.DeleteRequest| org.elasticsearch.index.shard.IndexShard)", - "leftChangesSummary": "Left sets the field seqNo on object request, and added this value on the call to create the returned object DeleteResponse.", - "rightChangesSummary": "Right does a refactoring by extracting a variable, and them call the method to create the method return object." - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/base/core-all-5.0.0-SNAPSHOT.jar", - "left": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/left/core-all-5.0.0-SNAPSHOT.jar", - "right": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/right/core-all-5.0.0-SNAPSHOT.jar", - "merge": "/path/mergedataset/elasticsearch/d896886973660785aac45275ddb110c1a6babc57/transformed/merge/core-all-5.0.0-SNAPSHOT.jar" - }, - "jarType": "transformed" - }, - { - "projectName": "elasticsearch", - "runAnalysis": true, - "scenarioCommits": { - "base": "", - "left": "", - "right": "", - "merge": "" - }, - "targets": { - "org.elasticsearch.index.analysis.synonyms.SynonymsAnalysisTest": [ - { - "method": "testSynonymsAnalysis()", - "leftChangesSummary": "Left extracts a local variable home of the parameter used on method put. Now, it's used the return of createTempDir instead of createTempDir().toString();", - "rightChangesSummary": "Right extracts a local variable json from the parameter sent to method loadFromStream. It also replaced the method call loadFromClasspath to loadFromStream, which is done by the method return object of settingsBuilder." - } - ], - "org.elasticsearch.index.analysis.commongrams.CommonGramsTokenFilterFactoryTests": [ - { - "method": "testQueryModeCommonGramsAnalysis()", - "leftChangesSummary": "Replaced the call to the createTempDir().toString() method with createHome()", - "rightChangesSummary": "Added a variable called Json containing a String with the path to the file commongrams_query_mode.json; Replaced the loadFromClasspath method with loadFromStream" - }, - { - "method": "testCommonGramsAnalysis()", - "leftChangesSummary": "Left changed the local settings variable with a call to put() method in settingsBuilder(), which uses the local variable called \"json\" changed by right.", - "rightChangesSummary": "Right changed the local variable json. Changed the local varibale called settings with a call to loadFromStream() method in settingsBuilder()" - } - ], - "org.elasticsearch.index.analysis.KuromojiAnalysisTests": [ - { - "method": "createAnalysisService()", - "leftChangesSummary": "Left changed the local settings variable with a call to put() method in settingsBuilder(), which uses the local variable called \"json\" changed by right. Changed other local variables: empty_dict, dict, home, config and Files, not used by right. ", - "rightChangesSummary": "Right changed the local variable json. Changed the local varibale called settings with a call to loadFromStream() method in settingsBuilder()" - } - ] - }, - "scenarioJars": { - "base": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/base/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar", - "left": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/left/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar", - "right": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/right/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar", - "merge": "/path/mergedataset/elasticsearch/f3d63095dbcc985e24162fbac4ee0d6914dc757d/transformed/merge/elasticsearch-2.0.0-SNAPSHOT-fat-tests.jar" - }, - "jarType": "transformed" - } -] \ No newline at end of file diff --git a/extra/run_experiment.py b/extra/run_experiment.py deleted file mode 100644 index 331668a3..00000000 --- a/extra/run_experiment.py +++ /dev/null @@ -1,565 +0,0 @@ -#!/usr/bin/env python3 - -import subprocess -import sys -import os -import json -import time -import logging -import shutil -from datetime import datetime -from pathlib import Path - -# Configurações múltiplas para execução sequencial -MULTI_CONFIGS = [ - { - "name": "ZeroShot_T00_S123", - "prompt_template": "zero_shot", - "temperature": 0, - "seed": 123 - }, - { - "name": "OneShot_T70_S123", - "prompt_template": "one_shot", - "temperature": 0.7, - "seed": 123 - }, - { - "name": "ZeroShot_T70_S123", - "prompt_template": "zero_shot", - "temperature": 0.7, - "seed": 123 - }, - { - "name": "OneShot_T00_S123", - "prompt_template": "one_shot", - "temperature": 0, - "seed": 123 - } -] - -# Configuração de logging simples -def setup_simple_logging(): - """Configura logging básico mas eficaz""" - log_dir = Path("logs") - log_dir.mkdir(exist_ok=True) - - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - log_file = log_dir / f"smat_execution_{timestamp}.log" - - logging.basicConfig( - level=logging.INFO, - format='[%(asctime)s] %(levelname)s: %(message)s', - handlers=[ - logging.FileHandler(log_file), - logging.StreamHandler() - ] - ) - - return log_file - -# Gerenciamento simples de progresso -class SimpleProgressManager: - def __init__(self): - self.checkpoint_dir = Path("checkpoints") - self.checkpoint_dir.mkdir(exist_ok=True) - self.session_id = f"smat_{int(time.time())}" - self.checkpoint_file = self.checkpoint_dir / f"progress_{self.session_id}.json" - self.progress = { - "session_id": self.session_id, - "start_time": datetime.now().isoformat(), - "configurations": {}, # {"config_name": {"completed_targets": [], "failed_targets": []}} - "completed_scenarios": [], # Manter para compatibilidade - "failed_scenarios": [], - "current_scenario": None - } - self.last_save_time = 0 # Controle de frequência de salvamento - - def save_progress(self, force=False): - """Salva progresso atual (apenas a cada 10 minutos, exceto se force=True)""" - current_time = time.time() - - # Salva apenas a cada 10 minutos (600 segundos) ou se forçado - if not force and (current_time - self.last_save_time) < 600: - return - - try: - with open(self.checkpoint_file, 'w') as f: - json.dump(self.progress, f, indent=2) - - self.last_save_time = current_time - - # Conta targets totais por configuração - total_targets = sum( - len(config_data.get('completed_targets', [])) + len(config_data.get('failed_targets', [])) - for config_data in self.progress['configurations'].values() - ) - - logging.info(f"Progresso salvo: {len(self.progress['completed_scenarios'])} cenários, {total_targets} targets processados") - except Exception as e: - logging.error(f"Erro ao salvar progresso: {e}") - - def add_completed(self, scenario_name): - """Adiciona cenário concluído (compatibilidade)""" - if scenario_name not in self.progress["completed_scenarios"]: - self.progress["completed_scenarios"].append(scenario_name) - self.save_progress(force=True) - - def add_failed(self, scenario_name): - """Adiciona cenário que falhou (compatibilidade)""" - if scenario_name not in self.progress["failed_scenarios"]: - self.progress["failed_scenarios"].append(scenario_name) - self.save_progress(force=True) - - def set_current(self, scenario_name): - """Define cenário atual""" - self.progress["current_scenario"] = scenario_name - self.save_progress(force=True) - - def add_completed_target(self, config_name, target_info): - """Adiciona target específico concluído para uma configuração""" - if config_name not in self.progress["configurations"]: - self.progress["configurations"][config_name] = { - "completed_targets": [], - "failed_targets": [], - "start_time": datetime.now().isoformat() - } - - target_key = f"{target_info['class']}.{target_info['method']}" - if target_key not in self.progress["configurations"][config_name]["completed_targets"]: - self.progress["configurations"][config_name]["completed_targets"].append(target_key) - self.save_progress(force=True) # Força salvamento em eventos importantes - logging.info(f"Target concluído: {config_name} -> {target_key}") - - def add_failed_target(self, config_name, target_info, error=None): - """Adiciona target que falhou para uma configuração""" - if config_name not in self.progress["configurations"]: - self.progress["configurations"][config_name] = { - "completed_targets": [], - "failed_targets": [], - "start_time": datetime.now().isoformat() - } - - target_key = f"{target_info['class']}.{target_info['method']}" - failure_info = { - "target": target_key, - "error": str(error) if error else "Unknown error", - "timestamp": datetime.now().isoformat() - } - - self.progress["configurations"][config_name]["failed_targets"].append(failure_info) - self.save_progress(force=True) # Força salvamento em eventos importantes - logging.error(f"Target falhou: {config_name} -> {target_key}: {error}") - - def get_config_progress(self, config_name): - """Retorna progresso de uma configuração específica""" - if config_name not in self.progress["configurations"]: - return {"completed_targets": [], "failed_targets": []} - return self.progress["configurations"][config_name] - - def get_summary(self): - """Retorna resumo do progresso""" - completed = len(self.progress["completed_scenarios"]) - failed = len(self.progress["failed_scenarios"]) - - # Contagem detalhada por configuração - config_summary = {} - for config_name, config_data in self.progress["configurations"].items(): - completed_targets = len(config_data.get("completed_targets", [])) - failed_targets = len(config_data.get("failed_targets", [])) - config_summary[config_name] = { - "completed_targets": completed_targets, - "failed_targets": failed_targets, - "targets": config_data.get("completed_targets", []) + [f["target"] for f in config_data.get("failed_targets", [])] - } - - return { - "session_id": self.session_id, - "completed": completed, - "failed": failed, - "configurations": config_summary, - "current": self.progress["current_scenario"], - "start_time": self.progress["start_time"] - } - - @classmethod - def load_session(cls, session_id): - """Carrega sessão existente""" - checkpoint_dir = Path("checkpoints") - checkpoint_file = checkpoint_dir / f"progress_{session_id}.json" - - if not checkpoint_file.exists(): - logging.error(f"Sessão não encontrada: {session_id}") - return None - - try: - with open(checkpoint_file, 'r') as f: - progress_data = json.load(f) - - manager = cls() - manager.session_id = session_id - manager.checkpoint_file = checkpoint_file - manager.progress = progress_data - manager.last_save_time = 0 # Inicializa controle de salvamento - - logging.info(f"Sessão carregada: {session_id}") - return manager - except Exception as e: - logging.error(f"Erro ao carregar sessão: {e}") - return None - - @classmethod - def list_sessions(cls): - """Lista sessões disponíveis""" - checkpoint_dir = Path("checkpoints") - if not checkpoint_dir.exists(): - return [] - - sessions = [] - for file in checkpoint_dir.glob("progress_*.json"): - try: - with open(file, 'r') as f: - data = json.load(f) - sessions.append({ - 'id': data['session_id'], - 'start_time': data['start_time'], - 'completed': len(data.get('completed_scenarios', [])), - 'failed': len(data.get('failed_scenarios', [])) - }) - except: - continue - - return sorted(sessions, key=lambda x: x['start_time'], reverse=True) - -def update_env_config(config_update): - """Atualiza o arquivo env-config.json com nova configuração""" - env_config_path = Path("SMAT/nimrod/tests/env-config.json") - - # Faz backup do original - backup_path = env_config_path.with_suffix('.json.backup') - if not backup_path.exists(): - shutil.copy2(env_config_path, backup_path) - - # Carrega configuração atual - with open(env_config_path, 'r') as f: - config = json.load(f) - - # Atualiza configurações globais - if 'prompt_template' in config_update: - config['prompt_template'] = config_update['prompt_template'] - - # Atualiza configurações da API para todos os modelos - if 'temperature' in config_update or 'seed' in config_update: - for model_key in config.get('api_params', {}): - if 'temperature' in config_update: - config['api_params'][model_key]['temperature'] = config_update['temperature'] - if 'seed' in config_update: - config['api_params'][model_key]['seed'] = config_update['seed'] - - # Salva configuração atualizada - with open(env_config_path, 'w') as f: - json.dump(config, f, indent=2) - - logging.info(f"Configuração atualizada: {config_update['name']}") - -def restore_env_config(): - """Restaura configuração original do backup""" - env_config_path = Path("SMAT/nimrod/tests/env-config.json") - backup_path = env_config_path.with_suffix('.json.backup') - - if backup_path.exists(): - shutil.copy2(backup_path, env_config_path) - logging.info("Configuração original restaurada") - -def run_smat(progress_manager, max_retries=2, config_name="default"): - """Executa SMAT com retry básico e checkpoints""" - - - try: - # Configura ambiente - smat_dir = Path(__file__).parent / "SMAT" - os.environ['PYTHONPATH'] = str(smat_dir) - if 'JAVA_HOME' not in os.environ: - os.environ['JAVA_HOME'] = "/usr/lib/jvm/java-8-openjdk-amd64" - - logging.info(f"Iniciando SMAT - Sessão: {progress_manager.session_id} - Config: {config_name}") - logging.info(f"PYTHONPATH: {os.environ['PYTHONPATH']}") - - # Executa SMAT - - for attempt in range(max_retries + 1): - try: - logging.info(f"Tentativa {attempt + 1}/{max_retries + 1}") - - # Inicia processo SMAT - process = subprocess.Popen([ - sys.executable, "-m", "nimrod" - ], cwd=smat_dir) - - # Monitora processo enquanto executa - while process.poll() is None: - time.sleep(30) # Verifica a cada 30 segundos - progress_manager.save_progress() # Tenta salvar (só salva a cada 10 min) - - # Verifica código de retorno - if process.returncode == 0: - logging.info("SMAT executado com sucesso") - break - else: - raise subprocess.CalledProcessError(process.returncode, "nimrod") - - except subprocess.CalledProcessError as e: - logging.error(f"SMAT falhou (tentativa {attempt + 1}): código {e.returncode}") - - if attempt < max_retries: - delay = 60 * (attempt + 1) # 60s, 120s, etc. - logging.info(f"Aguardando {delay}s antes da próxima tentativa...") - time.sleep(delay) - else: - logging.error("SMAT falhou após todas as tentativas") - return False - - except KeyboardInterrupt: - logging.info("Execução interrompida pelo usuário") - progress_manager.save_progress() - return False - - # Executa gráficos se disponível - graphics_script = Path(__file__).parent / "graficos_metricas.py" - if graphics_script.exists(): - try: - logging.info("Gerando gráficos...") - subprocess.run([sys.executable, str(graphics_script)], check=True) - logging.info("Gráficos gerados com sucesso") - except Exception as e: - logging.warning(f"Erro ao gerar gráficos: {e}") - - return True - - except Exception as e: - logging.error(f"Erro inesperado: {e}") - return False - finally: - progress_manager.save_progress(force=True) - -def load_targets_from_input(): - """Carrega lista de targets do input-smat.json""" - try: - input_file = Path("input-smat.json") - if not input_file.exists(): - logging.warning("input-smat.json não encontrado") - return [] - - with open(input_file) as f: - data = json.load(f) - - targets = [] - for scenario in data: - for class_name, methods in scenario.get("targets", {}).items(): - for method_item in methods: - if isinstance(method_item, dict): - method_name = method_item.get("method", "") - else: - method_name = method_item - - targets.append({ - "class": class_name, - "method": method_name, - "project": scenario.get("projectName", "unknown") - }) - - return targets - except Exception as e: - logging.error(f"Erro ao carregar targets: {e}") - return [] - -def verify_and_update_completed_targets(progress_manager, config_name, targets): - """ - Verifica quais targets foram realmente concluídos baseado nos arquivos gerados - e atualiza o progresso em tempo real - """ - completed_count = 0 - output_base = Path("SMAT/output-test-dest/projects") - - try: - if not output_base.exists(): - logging.debug("Diretório de output não existe ainda") - return 0 - - # Procura por pastas de output que correspondem ao config atual - for project_dir in output_base.iterdir(): - if not project_dir.is_dir(): - continue - - # Verifica se há pastas com o padrão do modelo atual - for model_dir in project_dir.iterdir(): - if not model_dir.is_dir(): - continue - - # Verifica se o nome da pasta contém as informações da configuração atual - dir_name = model_dir.name - if should_match_config(dir_name, config_name): - # Verifica cada target individualmente - for target in targets: - if check_target_completed(model_dir, target): - progress_manager.add_completed_target(config_name, target) - completed_count += 1 - logging.debug(f"Target verificado como concluído: {target['class']}.{target['method']}") - - - except Exception as e: - logging.warning(f"Erro ao verificar targets concluídos: {e}") - - return completed_count - -def should_match_config(dir_name, config_name): - """Verifica se o nome do diretório corresponde à configuração atual""" - return all(part in dir_name for part in config_name.split('_')) - -def check_target_completed(model_dir, target): - """Verifica se um target específico foi concluído com sucesso""" - try: - # Verifica se há arquivos .java gerados para este target - llm_outputs_dir = model_dir / "llm_outputs" - if not llm_outputs_dir.exists(): - return False - - # Procura por arquivos que contenham referências ao target - class_simple_name = target['class'].split('.')[-1] - method_name = target['method'].split('(')[0] - - target_pattern = f"*{class_simple_name}*{method_name}*" - - matching_files = list(llm_outputs_dir.glob(target_pattern)) - - # Se encontrou arquivos, verifica se têm conteúdo válido - for file_path in matching_files: - if file_path.stat().st_size > 100: # Arquivo não vazio (pelo menos 100 bytes) - return True - - return False - - except Exception as e: - logging.debug(f"Erro ao verificar conclusão do target {target['class']}.{target['method']}: {e}") - return False - -def run_smat_with_monitoring(progress_manager, config_name, targets): - """Executa SMAT com verificação de progresso pós-execução""" - return run_smat(progress_manager, config_name=config_name) - -def run_smat_configs(progress_manager): - """Executa múltiplas configurações sequencialmente""" - total_configs = len(MULTI_CONFIGS) - targets = load_targets_from_input() - - logging.info(f"Iniciando execução multi-configuração: {total_configs} configs, {len(targets)} targets") - - for i, config in enumerate(MULTI_CONFIGS, 1): - logging.info(f"\n[CONFIG {i}/{total_configs}] Iniciando: {config['name']}") - - try: - # Atualiza configuração - update_env_config(config) - - # Executa SMAT com esta configuração e monitora progresso - success = run_smat_with_monitoring(progress_manager, config['name'], targets) - - if success: - progress_manager.add_completed(config['name']) - - # Verifica targets realmente concluídos - completed_count = verify_and_update_completed_targets(progress_manager, config['name'], targets) - logging.info(f"[CONFIG {i}/{total_configs}] OK Concluída: {config['name']} - {completed_count}/{len(targets)} targets verificados como concluídos") - else: - progress_manager.add_failed(config['name']) - - # Mesmo com falha, verifica se alguns targets foram concluídos - completed_count = verify_and_update_completed_targets(progress_manager, config['name'], targets) - logging.error(f"[CONFIG {i}/{total_configs}] ERRO Falhou: {config['name']} - {completed_count}/{len(targets)} targets parcialmente concluídos") - - except Exception as e: - # Mesmo com exceção, verifica progresso parcial - try: - completed_count = verify_and_update_completed_targets(progress_manager, config['name'], targets) - logging.error(f"[CONFIG {i}/{total_configs}] EXCEÇÃO: {config['name']} - {e} - {completed_count}/{len(targets)} targets parcialmente concluídos") - except: - logging.error(f"[CONFIG {i}/{total_configs}] EXCEÇÃO: {config['name']} - {e}") - - logging.error(f"[CONFIG {i}/{total_configs}] ERRO: {config['name']} - {e}") - progress_manager.add_failed(config['name']) - - # Pausa entre configurações - if i < total_configs: - logging.info(f"Pausa de 30s antes da próxima configuração...") - time.sleep(30) - - # Restaura configuração original - restore_env_config() - - # Resumo final - summary = progress_manager.get_summary() - logging.info(f"Resumo final: {summary['completed']} concluídas, {summary['failed']} com falha") - - # Detalhes por configuração - for config_name, config_data in summary['configurations'].items(): - completed_targets = config_data['completed_targets'] - failed_targets = config_data['failed_targets'] - logging.info(f"\n{config_name}:") - logging.info(f" Targets concluídos: {completed_targets}") - logging.info(f" Targets falharam: {failed_targets}") - if config_data['targets']: - logging.info(f" Lista de targets: {', '.join(config_data['targets'])}") - - return summary['failed'] == 0 - -def main(): - """Função principal""" - - # Setup básico - log_file = setup_simple_logging() - - # Argumentos simples - resume_session = None - - if len(sys.argv) > 1: - if sys.argv[1] == "--resume" and len(sys.argv) > 2: - resume_session = sys.argv[2] - elif sys.argv[1] == "--list": - sessions = SimpleProgressManager.list_sessions() - if sessions: - print("Sessões disponíveis:") - for session in sessions: - print(f" {session['id']}: {session['start_time']} (Concluídos: {session['completed']}, Falhas: {session['failed']})") - else: - print("Nenhuma sessão encontrada") - return 0 - elif sys.argv[1] in ["--help", "-h"]: - print("Uso:") - print(" python3 run_experiment.py # Execução multi-configuração") - print(" python3 run_experiment.py --resume SESSION_ID") - print(" python3 run_experiment.py --list # Lista sessões") - return 0 - - # Configura gerenciador de progresso - if resume_session: - progress_manager = SimpleProgressManager.load_session(resume_session) - if not progress_manager: - return 1 - else: - progress_manager = SimpleProgressManager() - - logging.info(f"SMAT multi-config - Sessão: {progress_manager.session_id}") - - # Executa SMAT com múltiplas configurações - success = run_smat_configs(progress_manager) - - # Resultado final - if success: - logging.info("Execução concluída com sucesso") - return 0 - else: - logging.error(f"Execução falhou. Use: python3 run_experiment.py --resume {progress_manager.session_id}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py index bafdb4ca..b6021bd4 100644 --- a/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py +++ b/nimrod/test_suite_generation/generators/ollama_test_suite_generator.py @@ -72,7 +72,6 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: try: self.set_payload_messages(messages) response = self.post(self.payload) - #logging.debug("Response: %s", response) return { "response": response.get("message", {}).get("content", "Response not found."), "total_duration": response.get("total_duration", self.timeout_seconds * 1_000_000_000), @@ -80,7 +79,7 @@ def generate_output(self, messages: List[Dict[str, str]]) -> Dict[str, Any]: except Exception as e: logging.error(f"Error generating output: {e}") return {"error": "Output generation error", "total_duration": self.timeout_seconds * 1_000_000_000} - + class OllamaTestSuiteGenerator(TestSuiteGenerator): @@ -103,7 +102,7 @@ def __init__(self, java_tool, model_key: str = "codellama", model_config: Dict[s ) logging.info(f"Initialized {self.model_key} with prompt template: {self.prompt_template}") - + def generate_messages_list(self, method_info: Dict[str, str], full_class_name: str, branch: str, output_path: str) -> Dict[str, List[Dict[str, str]]]: """ @@ -114,7 +113,7 @@ def generate_messages_list(self, method_info: Dict[str, str], full_class_name: s api.set_branch(branch) # Set the branch class_name = full_class_name.split('.')[-1] method_name = method_info.get("method_name", "") - + logging.debug(f"Generating messages for {class_name}.{method_name} using template: {self.prompt_template}") # Generates messages using the PromptManager @@ -124,7 +123,7 @@ def generate_messages_list(self, method_info: Dict[str, str], full_class_name: s branch=branch, template_name=self.prompt_template ) - + # Saves generated messages self.prompt_manager.save_generated_messages( messages_dict=messages_dict, @@ -132,7 +131,7 @@ def generate_messages_list(self, method_info: Dict[str, str], full_class_name: s class_name=class_name, method_name=method_name ) - + logging.info(f"Generated {len(messages_dict)} prompt variations for {class_name}.{method_name}") return messages_dict diff --git a/nimrod/tests/env-config.json b/nimrod/tests/env-config.json index 6a2f8244..3bf38229 100644 --- a/nimrod/tests/env-config.json +++ b/nimrod/tests/env-config.json @@ -1,80 +1,23 @@ { - "java_home": "/usr/lib/jvm/java-8-openjdk-amd64", + "java_home": "", "maven_home": "", + "repo_dir": "", "projects_folder": "", - "input_path": "/path/input-smat.json", + "input_path": "", "tests_dst": "", "path_output_csv": "", "logger_level": "DEBUG", - "test_suite_generators": [ - "ollama" - ], - "test_suite_generation_search_time_available": "45", + "test_suite_generators":["ollama", "evosuite", "randoop"], + "test_suite_generation_search_time_available":"45", "prompt_template": "zero_shot", "api_params": { - "deepseek-r1-8b": { - "model": "deepseek-r1:8b", + "codellama-70b": { + "model": "codellama:70b", "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "deepseek-r1-70b": { - "model": "deepseek-r1:70b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "deepseek-r1-32b": { - "model": "deepseek-r1:32b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "gemma3-27b": { - "model": "gemma3:27b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "gemma3-12b": { - "model": "gemma3:12b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "gemma3-4b": { - "model": "gemma3:4b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "qwen3-32b": { - "model": "qwen3:32b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "qwen3-30b": { - "model": "qwen3:30b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, - "timeout_seconds": 300 - }, - "llama4-16x17b": { - "model": "llama4:16x17b", - "api_url": "http://ip/api/chat", - "temperature": 0, - "seed": 123, + "temperature": 0.7, + "seed": 42, "timeout_seconds": 300 } } -} +} \ No newline at end of file