diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..8796191
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+FixPatternMiner
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..9d2856b
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aad31c1
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_2.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_2.xml
new file mode 100644
index 0000000..a8b0d9c
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_7.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_7.xml
new file mode 100644
index 0000000..cdd7959
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
new file mode 100644
index 0000000..6fec8f4
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_2.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_2.xml
new file mode 100644
index 0000000..1c76d0b
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_7.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_7.xml
new file mode 100644
index 0000000..6c2a760
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
new file mode 100644
index 0000000..9eb8596
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_github_mpkorstanje_simmetrics_core_3_0_3.xml b/.idea/libraries/Maven__com_github_mpkorstanje_simmetrics_core_3_0_3.xml
new file mode 100644
index 0000000..a009f87
--- /dev/null
+++ b/.idea/libraries/Maven__com_github_mpkorstanje_simmetrics_core_3_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
new file mode 100644
index 0000000..0e66824
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_gson_gson_2_3.xml b/.idea/libraries/Maven__com_google_code_gson_gson_2_3.xml
new file mode 100644
index 0000000..4dcaf15
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_code_gson_gson_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_11_0_2.xml b/.idea/libraries/Maven__com_google_guava_guava_11_0_2.xml
new file mode 100644
index 0000000..01a573a
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_guava_guava_11_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_18_0.xml b/.idea/libraries/Maven__com_google_guava_guava_18_0.xml
new file mode 100644
index 0000000..bbd71d7
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_guava_guava_18_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_nanohttpd_nanohttpd_2_1_1.xml b/.idea/libraries/Maven__com_nanohttpd_nanohttpd_2_1_1.xml
new file mode 100644
index 0000000..7c43448
--- /dev/null
+++ b/.idea/libraries/Maven__com_nanohttpd_nanohttpd_2_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_nanohttpd_nanohttpd_webserver_2_1_1.xml b/.idea/libraries/Maven__com_nanohttpd_nanohttpd_webserver_2_1_1.xml
new file mode 100644
index 0000000..c265679
--- /dev/null
+++ b/.idea/libraries/Maven__com_nanohttpd_nanohttpd_webserver_2_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_rabbitmq_amqp_client_4_0_0.xml b/.idea/libraries/Maven__com_rabbitmq_amqp_client_4_0_0.xml
new file mode 100644
index 0000000..0583b43
--- /dev/null
+++ b/.idea/libraries/Maven__com_rabbitmq_amqp_client_4_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sparkjava_spark_core_2_6_0.xml b/.idea/libraries/Maven__com_sparkjava_spark_core_2_6_0.xml
new file mode 100644
index 0000000..a1b274c
--- /dev/null
+++ b/.idea/libraries/Maven__com_sparkjava_spark_core_2_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_4_11.xml b/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_4_11.xml
new file mode 100644
index 0000000..09604f8
--- /dev/null
+++ b/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_4_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_typesafe_config_1_3_0.xml b/.idea/libraries/Maven__com_typesafe_config_1_3_0.xml
new file mode 100644
index 0000000..f92ac86
--- /dev/null
+++ b/.idea/libraries/Maven__com_typesafe_config_1_3_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml
new file mode 100644
index 0000000..27424a1
--- /dev/null
+++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml
new file mode 100644
index 0000000..a66d039
--- /dev/null
+++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
new file mode 100644
index 0000000..14681ee
--- /dev/null
+++ b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
new file mode 100644
index 0000000..c24f7e3
--- /dev/null
+++ b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_3_8_1.xml b/.idea/libraries/Maven__junit_junit_3_8_1.xml
new file mode 100644
index 0000000..71b2993
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_3_8_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_11.xml b/.idea/libraries/Maven__junit_junit_4_11.xml
new file mode 100644
index 0000000..f33320d
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 0000000..d411041
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__log4j_log4j_1_2_14.xml b/.idea/libraries/Maven__log4j_log4j_1_2_14.xml
new file mode 100644
index 0000000..2825a67
--- /dev/null
+++ b/.idea/libraries/Maven__log4j_log4j_1_2_14.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml b/.idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml
new file mode 100644
index 0000000..72d4d7e
--- /dev/null
+++ b/.idea/libraries/Maven__net_sf_trove4j_trove4j_3_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sourceforge_jexcelapi_jxl_2_6_12.xml b/.idea/libraries/Maven__net_sourceforge_jexcelapi_jxl_2_6_12.xml
new file mode 100644
index 0000000..19e6af8
--- /dev/null
+++ b/.idea/libraries/Maven__net_sourceforge_jexcelapi_jxl_2_6_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml
new file mode 100644
index 0000000..32bfe3b
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_7.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_7.xml
new file mode 100644
index 0000000..28edf49
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml
new file mode 100644
index 0000000..2970b5e
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_text_1_3.xml b/.idea/libraries/Maven__org_apache_commons_commons_text_1_3.xml
new file mode 100644
index 0000000..2930e62
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_text_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_poi_poi_3_12.xml b/.idea/libraries/Maven__org_apache_poi_poi_3_12.xml
new file mode 100644
index 0000000..f3bfa63
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_poi_poi_3_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_12.xml b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_12.xml
new file mode 100644
index 0000000..0f92377
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_12.xml b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_12.xml
new file mode 100644
index 0000000..fb871da
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml b/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml
new file mode 100644
index 0000000..cb0f76d
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_birt_runtime_org_eclipse_core_resources_3_10_0_v20150423_0755.xml b/.idea/libraries/Maven__org_eclipse_birt_runtime_org_eclipse_core_resources_3_10_0_v20150423_0755.xml
new file mode 100644
index 0000000..bec40e7
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_birt_runtime_org_eclipse_core_resources_3_10_0_v20150423_0755.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_core_contenttype_3_4_200_v20140207_1251.xml b/.idea/libraries/Maven__org_eclipse_core_contenttype_3_4_200_v20140207_1251.xml
new file mode 100644
index 0000000..f23ea73
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_core_contenttype_3_4_200_v20140207_1251.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_core_jobs_3_6_0_v20140424_0053.xml b/.idea/libraries/Maven__org_eclipse_core_jobs_3_6_0_v20140424_0053.xml
new file mode 100644
index 0000000..ecd0a0f
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_core_jobs_3_6_0_v20140424_0053.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_core_runtime_3_10_0_v20140318_2214.xml b/.idea/libraries/Maven__org_eclipse_core_runtime_3_10_0_v20140318_2214.xml
new file mode 100644
index 0000000..b1c50eb
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_core_runtime_3_10_0_v20140318_2214.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_equinox_app_1_3_200_v20130910_1609.xml b/.idea/libraries/Maven__org_eclipse_equinox_app_1_3_200_v20130910_1609.xml
new file mode 100644
index 0000000..c5372f9
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_equinox_app_1_3_200_v20130910_1609.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_equinox_common_3_6_200_v20130402_1505.xml b/.idea/libraries/Maven__org_eclipse_equinox_common_3_6_200_v20130402_1505.xml
new file mode 100644
index 0000000..0e8e398
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_equinox_common_3_6_200_v20130402_1505.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_equinox_preferences_3_5_200_v20140224_1527.xml b/.idea/libraries/Maven__org_eclipse_equinox_preferences_3_5_200_v20140224_1527.xml
new file mode 100644
index 0000000..cf2ff45
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_equinox_preferences_3_5_200_v20140224_1527.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_equinox_registry_3_5_400_v20140428_1507.xml b/.idea/libraries/Maven__org_eclipse_equinox_registry_3_5_400_v20140428_1507.xml
new file mode 100644
index 0000000..a35d91c
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_equinox_registry_3_5_400_v20140428_1507.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_client_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_client_9_4_4_v20170414.xml
new file mode 100644
index 0000000..753cd46
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_client_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_9_4_4_v20170414.xml
new file mode 100644
index 0000000..24b9595
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_9_4_4_v20170414.xml
new file mode 100644
index 0000000..be4af0a
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_security_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_security_9_4_4_v20170414.xml
new file mode 100644
index 0000000..0a0a61a
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_security_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_9_4_4_v20170414.xml
new file mode 100644
index 0000000..aa28eb9
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_9_4_4_v20170414.xml
new file mode 100644
index 0000000..8923ab4
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_9_4_4_v20170414.xml
new file mode 100644
index 0000000..b7d325c
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_webapp_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_webapp_9_4_4_v20170414.xml
new file mode 100644
index 0000000..bd09afa
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_webapp_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_xml_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_xml_9_4_4_v20170414.xml
new file mode 100644
index 0000000..9f8b202
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_xml_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_api_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_api_9_4_4_v20170414.xml
new file mode 100644
index 0000000..597060a
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_api_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_client_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_client_9_4_4_v20170414.xml
new file mode 100644
index 0000000..be2f9c9
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_client_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_common_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_common_9_4_4_v20170414.xml
new file mode 100644
index 0000000..af4b520
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_common_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_server_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_server_9_4_4_v20170414.xml
new file mode 100644
index 0000000..26b182a
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_server_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_servlet_9_4_4_v20170414.xml b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_servlet_9_4_4_v20170414.xml
new file mode 100644
index 0000000..d11dc2b
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_websocket_websocket_servlet_9_4_4_v20170414.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_osgi_3_10_0_v20140606_1445.xml b/.idea/libraries/Maven__org_eclipse_osgi_3_10_0_v20140606_1445.xml
new file mode 100644
index 0000000..4f8664b
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_osgi_3_10_0_v20140606_1445.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_tycho_org_eclipse_jdt_core_3_12_2_v20161117_1814.xml b/.idea/libraries/Maven__org_eclipse_tycho_org_eclipse_jdt_core_3_12_2_v20161117_1814.xml
new file mode 100644
index 0000000..152bde1
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_tycho_org_eclipse_jdt_core_3_12_2_v20161117_1814.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000..f58bbc1
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_16_1_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_16_1_GA.xml
new file mode 100644
index 0000000..7b4e548
--- /dev/null
+++ b/.idea/libraries/Maven__org_javassist_javassist_3_16_1_GA.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_javatuples_javatuples_1_2.xml b/.idea/libraries/Maven__org_javatuples_javatuples_1_2.xml
new file mode 100644
index 0000000..b524531
--- /dev/null
+++ b/.idea/libraries/Maven__org_javatuples_javatuples_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_reflections_reflections_0_9_9_RC1.xml b/.idea/libraries/Maven__org_reflections_reflections_0_9_9_RC1.xml
new file mode 100644
index 0000000..95dd64a
--- /dev/null
+++ b/.idea/libraries/Maven__org_reflections_reflections_0_9_9_RC1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_rendersnake_rendersnake_1_8.xml b/.idea/libraries/Maven__org_rendersnake_rendersnake_1_8.xml
new file mode 100644
index 0000000..7251aaa
--- /dev/null
+++ b/.idea/libraries/Maven__org_rendersnake_rendersnake_1_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml b/.idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml
new file mode 100644
index 0000000..f4b289b
--- /dev/null
+++ b/.idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_scala_lang_scala_library_2_11_8.xml b/.idea/libraries/Maven__org_scala_lang_scala_library_2_11_8.xml
new file mode 100644
index 0000000..fc8460c
--- /dev/null
+++ b/.idea/libraries/Maven__org_scala_lang_scala_library_2_11_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_13.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_13.xml
new file mode 100644
index 0000000..4fd913d
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_21.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_21.xml
new file mode 100644
index 0000000..1b644dd
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_21.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
new file mode 100644
index 0000000..20e8163
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_7.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_7.xml
new file mode 100644
index 0000000..1e67260
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__redis_clients_jedis_2_8_1.xml b/.idea/libraries/Maven__redis_clients_jedis_2_8_1.xml
new file mode 100644
index 0000000..f12195b
--- /dev/null
+++ b/.idea/libraries/Maven__redis_clients_jedis_2_8_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__stax_stax_api_1_0_1.xml b/.idea/libraries/Maven__stax_stax_api_1_0_1.xml
new file mode 100644
index 0000000..0b13335
--- /dev/null
+++ b/.idea/libraries/Maven__stax_stax_api_1_0_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml b/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml
new file mode 100644
index 0000000..c36e717
--- /dev/null
+++ b/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..cc1f0b7
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..272b874
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..dc408e4
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..19f4360
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,1218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FileHelper
+ contain
+ Time
+ getSub
+ Filenamef
+ .keys
+ write
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1550924800456
+
+
+ 1550924800456
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 25
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 83
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/cluster/CalculatePairs.java
+ 26
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/cluster/CalculatePairs.java
+ 33
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 77
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 80
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
+ 27
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
+ 79
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
+ 77
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
+ 37
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
+ 94
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
+ 104
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 72
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
+ 85
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 84
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java
+ 72
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
+ 34
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
+ 54
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java
+ 33
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
+ 84
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
+ 23
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
+ 116
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java
+ 47
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+ 140
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
+ 78
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
+ 114
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
+ 131
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
+ 184
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 61
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 28
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 35
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 41
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
+ 56
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 98
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 141
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 114
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
+ 146
+
+
+
+
+
+
+
+
+
+ folder.getParent()
+ JAVA
+ CODE_FRAGMENT
+
+
+ shape.getParent()
+ JAVA
+ CODE_FRAGMENT
+
+
+ cluster.getName()
+ JAVA
+ CODE_FRAGMENT
+
+
+ shape.getPath()
+ JAVA
+ CODE_FRAGMENT
+
+
+ cluster.getPath()
+ JAVA
+ CODE_FRAGMENT
+
+
+ actionSet.toString()
+ JAVA
+ CODE_FRAGMENT
+
+
+ file.getName()
+ JAVA
+ CODE_FRAGMENT
+
+
+ file.
+ JAVA
+ CODE_FRAGMENT
+
+
+ inner.get(prefix+"-"+firstValue);
+ JAVA
+ CODE_FRAGMENT
+
+
+
+
+ 1
+ JAVA
+ EXPRESSION
+
+
+ "JDT"
+ JAVA
+ EXPRESSION
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No facets are configured
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ client
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ Maven: ch.qos.logback:logback-classic:1.1.2
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FixPatternMiner.iml b/FixPatternMiner.iml
index a7d8955..82122fc 100644
--- a/FixPatternMiner.iml
+++ b/FixPatternMiner.iml
@@ -1,6 +1,6 @@
-
+
@@ -10,7 +10,17 @@
+
+
+
+
+
+
+
+
+
+
@@ -18,18 +28,9 @@
-
-
-
-
-
-
-
-
-
diff --git a/difffile b/difffile
new file mode 100644
index 0000000..4dc952b
--- /dev/null
+++ b/difffile
@@ -0,0 +1,210 @@
+diff --git a/.gitignore b/.gitignore
+index 24cae48..27c7ba3 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -14,6 +14,7 @@ GumTreeInput/
+ GumTreeInput1/
+ GumTreeOutput1/
+ GumTreeResults/
++.idea/*
+
+ */Test.java
+ *TestParser.java
+diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java
+index 4d885ea..eb1eca1 100644
+--- a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java
++++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/FixedViolationHunkParser.java
+@@ -1,5 +1,9 @@
+ package edu.lu.uni.serval.FixPatternParser.violations;
+
++import com.github.gumtreediff.actions.model.Delete;
++import com.github.gumtreediff.actions.model.Insert;
++import com.github.gumtreediff.actions.model.Move;
++import com.github.gumtreediff.actions.model.Update;
+ import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
+
+ import java.io.*;
+@@ -30,27 +34,29 @@ public class FixedViolationHunkParser extends FixedViolationParser {
+ public void parseFixPatterns(File prevFile, File revFile, File diffentryFile,String project) {
+ List actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile);
+ if (actionSets.size() != 0) {
+-// boolean isUpdate =
+-// actionSets.stream().allMatch(p -> p.getAction() instanceof Update);
+-// boolean isInsert =
+-// actionSets.stream().allMatch(p -> p.getAction() instanceof Insert);
+-// boolean isDelete =
+-// actionSets.stream().allMatch(p -> p.getAction() instanceof Delete);
+-// boolean isMove =
+-// actionSets.stream().allMatch(p -> p.getAction() instanceof Move);
+ int hunkSet = 0;
+ // if (isUpdate || isInsert || isDelete || isMove) {
+ for (HierarchicalActionSet actionSet : actionSets) {
+- String folder = "/ALL/";
+-// if (isUpdate) {
+-// folder = "/UPD/";
+-// } else if (isDelete) {
+-// folder = "/DEL/";
+-// } else if (isInsert) {
+-// folder = "/INS/";
+-// } else if (isMove) {
+-// folder = "/MOV/";
+-// }
++ boolean isUpdate =
++ actionSets.stream().allMatch(p -> p.getAction() instanceof Update);
++ boolean isInsert =
++ actionSets.stream().allMatch(p -> p.getAction() instanceof Insert);
++ boolean isDelete =
++ actionSets.stream().allMatch(p -> p.getAction() instanceof Delete);
++ boolean isMove =
++ actionSets.stream().allMatch(p -> p.getAction() instanceof Move);
++ String folder = "/MIX/";
++ if (isUpdate) {
++ folder = "/UPD/";
++ } else if (isDelete) {
++ folder = "/DEL/";
++ } else if (isInsert) {
++ folder = "/INS/";
++ } else if (isMove) {
++ folder = "/MOV/";
++ } else{
++ folder = "/MIX/";
++ }
+
+
+ FileOutputStream f = null;
+diff --git a/src/main/java/edu/lu/uni/serval/MultipleThreadsParser/ParseFixPatternWorker.java b/src/main/java/edu/lu/uni/serval/MultipleThreadsParser/ParseFixPatternWorker.java
+index 3084dbe..ffe1b01 100644
+--- a/src/main/java/edu/lu/uni/serval/MultipleThreadsParser/ParseFixPatternWorker.java
++++ b/src/main/java/edu/lu/uni/serval/MultipleThreadsParser/ParseFixPatternWorker.java
+@@ -61,7 +61,7 @@ public class ParseFixPatternWorker extends UntypedActor {
+ int testInfos = 0;
+ int timeouts = 0;
+ StringBuilder builder = new StringBuilder();
+-
++// log.info("Work queue size " + files.size());
+ for (MessageFile msgFile : files) {
+ File revFile = msgFile.getRevFile();
+ File prevFile = msgFile.getPrevFile();
+diff --git a/src/main/java/edu/lu/uni/serval/config/Configuration.java b/src/main/java/edu/lu/uni/serval/config/Configuration.java
+index 4421c72..7162180 100644
+--- a/src/main/java/edu/lu/uni/serval/config/Configuration.java
++++ b/src/main/java/edu/lu/uni/serval/config/Configuration.java
+@@ -2,6 +2,6 @@ package edu.lu.uni.serval.config;
+
+ public class Configuration {
+
+- public static final long SECONDS_TO_WAIT = 900L;
++ public static final long SECONDS_TO_WAIT = 90000L;
+
+ }
+diff --git a/src/main/java/edu/lu/uni/serval/fixminer/EnhancedASTDiff.java b/src/main/java/edu/lu/uni/serval/fixminer/EnhancedASTDiff.java
+index 43895e0..066b07d 100644
+--- a/src/main/java/edu/lu/uni/serval/fixminer/EnhancedASTDiff.java
++++ b/src/main/java/edu/lu/uni/serval/fixminer/EnhancedASTDiff.java
+@@ -5,7 +5,7 @@ import akka.actor.ActorSystem;
+ import edu.lu.uni.serval.MultipleThreadsParser.MessageFile;
+ import edu.lu.uni.serval.MultipleThreadsParser.ParseFixPatternActor;
+ import edu.lu.uni.serval.MultipleThreadsParser.WorkMessage;
+-import edu.lu.uni.serval.utils.FileHelper;
++import edu.lu.uni.serval.FixPattern.utils.FileHelper;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+@@ -13,6 +13,7 @@ import java.io.File;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.List;
++import java.util.Locale;
+ import java.util.stream.Collectors;
+ import java.util.stream.Stream;
+
+@@ -31,6 +32,7 @@ public class EnhancedASTDiff {
+ Stream stream = Arrays.stream(listOfFiles);
+ List folders = stream
+ .filter(x -> !x.getName().startsWith("."))
++// .filter(x -> x.getName().startsWith("JDT"))
+ .collect(Collectors.toList());
+
+
+@@ -49,11 +51,11 @@ public class EnhancedASTDiff {
+ FileHelper.createDirectory(GUM_TREE_OUTPUT + "/INS");
+ FileHelper.createDirectory(GUM_TREE_OUTPUT + "/DEL");
+ FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MOV");
+- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/ALL");
++ FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MIX");
+
+
+ int a = 0;
+-
++ log.info("Work queue size " + msgFiles.size());
+ ActorSystem system = null;
+ ActorRef parsingActor = null;
+ final WorkMessage msg = new WorkMessage(0, msgFiles);
+@@ -80,6 +82,11 @@ public class EnhancedASTDiff {
+ if (revFiles.length >= 0) {
+ for (File revFile : revFiles) {
+ String fileName = revFile.getName();
++ if(fileName.toLowerCase(Locale.ENGLISH).contains("test")){
++ log.info(fileName);
++ continue;
++ }
++
+ File prevFile = new File(gumTreeInput + "prevFiles/prev_" + fileName);// previous file
+ fileName = fileName.replace(".java", ".txt");
+ File diffentryFile = new File(gumTreeInput + "DiffEntries/" + fileName); // DiffEntry file
+diff --git a/src/main/java/edu/lu/uni/serval/fixminer/TestHunkParserSingleFile.java b/src/main/java/edu/lu/uni/serval/fixminer/TestHunkParserSingleFile.java
+index 44575a7..88f36c6 100644
+--- a/src/main/java/edu/lu/uni/serval/fixminer/TestHunkParserSingleFile.java
++++ b/src/main/java/edu/lu/uni/serval/fixminer/TestHunkParserSingleFile.java
+@@ -5,7 +5,7 @@ import akka.actor.ActorSystem;
+ import edu.lu.uni.serval.MultipleThreadsParser.MessageFile;
+ import edu.lu.uni.serval.MultipleThreadsParser.ParseFixPatternActor;
+ import edu.lu.uni.serval.MultipleThreadsParser.WorkMessage;
+-import edu.lu.uni.serval.utils.FileHelper;
++import edu.lu.uni.serval.FixPattern.utils.FileHelper;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+diff --git a/src/main/java/edu/lu/uni/serval/fixminer/cluster/CallShell.java b/src/main/java/edu/lu/uni/serval/fixminer/cluster/CallShell.java
+index 9c1d05d..3dceda0 100644
+--- a/src/main/java/edu/lu/uni/serval/fixminer/cluster/CallShell.java
++++ b/src/main/java/edu/lu/uni/serval/fixminer/cluster/CallShell.java
+@@ -37,7 +37,7 @@ public class CallShell {
+ }
+ // Thread.sleep(Integer.valueOf(serverWait));
+
+- String cmd = "redis-cli -p %s ping";
++ String cmd = "bash source activate redisEnv && redis-cli -p %s ping";
+ String cmd1 = String.format(cmd,Integer.valueOf(port));
+ runPing(cmd1);
+
+diff --git a/src/main/java/edu/lu/uni/serval/fixminer/cluster/StoreEDiffInCache.java b/src/main/java/edu/lu/uni/serval/fixminer/cluster/StoreEDiffInCache.java
+index 39bba51..8657dce 100644
+--- a/src/main/java/edu/lu/uni/serval/fixminer/cluster/StoreEDiffInCache.java
++++ b/src/main/java/edu/lu/uni/serval/fixminer/cluster/StoreEDiffInCache.java
+@@ -52,13 +52,15 @@ public class StoreEDiffInCache {
+ .filter(x -> x.getName().startsWith("UPD") ||
+ x.getName().startsWith("INS") ||
+ x.getName().startsWith("DEL") ||
++ x.getName().startsWith("MIX") ||
+ x.getName().startsWith("MOV"))
+ .collect(Collectors.toList());
+ File[] files1 = fs.get(0).listFiles();
+ File[] files2 = fs.get(1).listFiles();
+ File[] files3 = fs.get(2).listFiles();
+ File[] files4 = fs.get(3).listFiles();
+- dumps = Stream.of(files1, files2, files3,files4).flatMap(Stream::of).toArray(File[]::new);
++ File[] files5 = fs.get(4).listFiles();
++ dumps = Stream.of(files1, files2, files3,files4,files5).flatMap(Stream::of).toArray(File[]::new);
+ }else{
+ fs = fileStream
+ .filter(x -> x.getName().startsWith(operation))
+@@ -70,7 +72,7 @@ public class StoreEDiffInCache {
+ for (File f : dumps) {
+ String name = f.getName();
+
+- String key = pjName + "/"+ operation+"/" + name;
++ String key = pjName + f.getPath().replace(pj.getPath(),"");
+ String result = key +","+f.getPath();
+ workList.add(result);
+ }
diff --git a/pom.xml b/pom.xml
index 20628f7..e783f0d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,11 +25,11 @@
1.2
-
-
-
-
-
+
+ edu.lu.uni
+ simple-utils
+ 0.0.1-SNAPSHOT
+
@@ -135,7 +135,7 @@
- edu.lu.uni.serval.fixminer.Launcher
+ edu.lu.uni.serval.fixminer.akka.compare.CompareTrees
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java b/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
index a4cbbd0..79e1c22 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/Launcher.java
@@ -68,7 +68,7 @@ public class Launcher {
gumInput = datasetPath +"/"+pjName+"/";
gumOutput = datasetPath + "/EnhancedASTDiff" + pjName;
dbDir = datasetPath + "/redis";
- pairsPath = datasetPath + "/pairsImport"+pjName;
+ pairsPath = datasetPath + "/pairs";
dumpsName = "dumps-"+pjName+".rdb";
int iCursor = Integer.valueOf(cursor);
@@ -81,11 +81,11 @@ public class Launcher {
StoreEDiffInCache.main(gumOutput, portDumps, dbDir, actionType+dumpsName,actionType);
break;
case "SI":
- CalculatePairs.main(dbDir, actionType+dumpsName, portDumps, pairsPath+actionType, pjName+actionType,isBigPair,iCursor);
- ImportPairs2DB.main(pairsPath+actionType, portInner, dbDir,datasetPath,chunk);
+// CalculatePairs.main(dbDir, actionType+dumpsName, portDumps, pairsPath+actionType, pjName+actionType,isBigPair,iCursor);
+ ImportPairs2DB.main(pairsPath, portInner, dbDir,datasetPath,chunk);
break;
case "SIMI":
- AkkaTreeLoader.main(portInner, dbDir, pjName +actionType+chunk+".rdb" , portDumps, actionType+dumpsName,pairsPath+actionType,numOfWorkers,iCursor,chunk,eDiffTimeout,parallelism);
+ AkkaTreeLoader.main(portInner, dbDir, "pairs.rdb" , portDumps, actionType+dumpsName,pairsPath,numOfWorkers,iCursor,chunk,eDiffTimeout,parallelism);
break;
case "LEVEL1":
@@ -136,9 +136,9 @@ public class Launcher {
private static void level2(String port, String pythonPath, String datasetPath, String pjName, String actionType, String threshold, String dbDir, String dumpsName, String gumInput,int cursor) throws Exception {
String stopServer;
- MultiThreadTreeLoaderCluster.calculatePairsOfClusters(datasetPath + "/cluster"+pjName+ actionType, datasetPath,actionType);
+// MultiThreadTreeLoaderCluster.calculatePairsOfClusters(datasetPath + "/cluster"+pjName+ actionType, datasetPath,actionType);
- MultiThreadTreeLoaderCluster.mainCompare("6300", datasetPath+"/pairs"+actionType, datasetPath + "/redisSingleImport.sh", dbDir, "clusterl1-"+pjName+actionType+".rdb", actionType+dumpsName, "6301",actionType,cursor);
+ MultiThreadTreeLoaderCluster.mainCompare(port, datasetPath+"/pairsAction", datasetPath + "/redisSingleImport.sh", dbDir, "clusterl1-"+pjName+actionType+".rdb", actionType+dumpsName, "6380",actionType,cursor);
CallShell cs3 =new CallShell();
String db22 = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
index 15cbc87..6a23292 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/AkkaTreeParser.java
@@ -87,7 +87,8 @@ public class AkkaTreeParser {
log.info("Scanning ");
sc.count(cursor);
- sc.match("pair_[0-9]*");
+ sc.match("*");
+// sc.match("pair_[0-9]*");
scan = inner.scan("0", sc);
int size = scan.getResult().size();
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java
index ef93559..911d50b 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/Compare.java
@@ -38,11 +38,12 @@ public class Compare {
String i = split[1];
String j = split[2];
+ String keyName = split[0];
- oldTree = EDiffHelper.getSimpliedTree(i,outerPool);
+ oldTree = EDiffHelper.getSimpliedTree(keyName,i,outerPool);
- newTree = EDiffHelper.getSimpliedTree(j,outerPool);
+ newTree = EDiffHelper.getSimpliedTree(keyName,j,outerPool);
Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
m.match();
@@ -66,7 +67,7 @@ public class Compare {
if (((Double) chawatheSimilarity1).equals(1.0) || ((Double) diceSimilarity1).equals(1.0)
|| ((Double) jaccardSimilarity1).equals(1.0) || actions.size() == 0) {
- String matchKey = "match_" + (String.valueOf(i)) + "_" + String.valueOf(j);
+ String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
log.info("{} tagged to be similar" ,matchKey);
jedis.select(1);
@@ -76,7 +77,7 @@ public class Compare {
jedis.select(0);
- jedis.del("pair_" + (String.valueOf(i)) + "_" + String.valueOf(j));
+ jedis.del(keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j));
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
new file mode 100644
index 0000000..510230e
--- /dev/null
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/compare/CompareTrees.java
@@ -0,0 +1,197 @@
+package edu.lu.uni.serval.fixminer.akka.compare;
+
+import com.github.gumtreediff.actions.ActionGenerator;
+import com.github.gumtreediff.actions.model.Action;
+import com.github.gumtreediff.matchers.Matcher;
+import com.github.gumtreediff.matchers.Matchers;
+import com.github.gumtreediff.tree.ITree;
+import edu.lu.uni.serval.utils.EDiffHelper;
+import edu.lu.uni.serval.utils.PoolBuilder;
+import org.apache.commons.text.similarity.JaroWinklerDistance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static edu.lu.uni.serval.fixminer.jobs.MultiThreadTreeLoaderCluster3.getNames;
+
+
+/**
+ * Created by anilkoyuncu on 03/04/2018.
+ */
+public class CompareTrees {
+
+ private static Logger log = LoggerFactory.getLogger(CompareTrees.class);
+
+
+ public static void main(String[] args) throws IOException {
+
+ String portInner = "6380";
+ String port = "6399";
+//
+ JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
+
+ JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
+
+ List listOfPairs = AkkaTreeParser.getMessages(innerPool,100000000);
+// listOfPairs.stream().parallel().
+
+ int counter = new Object() {
+ int counter = 0;
+
+ {
+
+ listOfPairs.parallelStream().
+ peek(x -> counter++).
+ forEach(m ->
+ {
+// Compare compare = new Compare();
+ coreCompare(m, args[0],innerPool, outerPool);
+ if (counter % 1000 == 0) {
+ log.info("Finalized parsing " + counter + " files... remaing " + (listOfPairs.size() - counter));
+ }
+ }
+ );
+ }
+ }.counter;
+// coreCompare(args[0],args[1],args[2],args[3]);
+ }
+ public static void coreCompare(String pairName, String treeType,JedisPool innerPool,JedisPool outerPool ) {
+
+
+// String portInner = "6380";
+// String port = "6399";
+
+// JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
+//
+// JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
+
+ Map resultMap;
+ Jedis jedis = null;
+ ITree oldTree = null;
+ ITree newTree = null;
+
+ try {
+ jedis = innerPool.getResource();
+
+ String[] split = pairName.split("_");
+
+
+ String i = split[1];
+ String j = split[2];
+ String keyName = split[0];
+
+ switch (treeType) {
+ case "shape":
+ oldTree = EDiffHelper.getShapes(keyName, i, outerPool);
+ newTree = EDiffHelper.getShapes(keyName, j, outerPool);
+ break;
+ case "action":
+ oldTree = EDiffHelper.getActions(keyName, i, outerPool,innerPool);
+ newTree = EDiffHelper.getActions(keyName, j, outerPool,innerPool);
+ break;
+ case "token":
+ oldTree = EDiffHelper.getTokens(keyName, i, outerPool,innerPool);
+ newTree = EDiffHelper.getTokens(keyName, j, outerPool,innerPool);
+ List oldTokens = new ArrayList<>();
+ List newTokens = new ArrayList<>();
+
+
+
+
+ oldTokens = getNames(oldTree,oldTokens);
+ newTokens = getNames(newTree,newTokens);
+
+
+ CharSequence[] oldSequences = oldTokens.toArray(new CharSequence[oldTokens.size()]);
+ CharSequence[] newSequences = newTokens.toArray(new CharSequence[newTokens.size()]);
+ JaroWinklerDistance jwd = new JaroWinklerDistance();
+
+ Double overallSimi = Double.valueOf(0);
+ if(oldSequences.length > 0 && (oldSequences.length == newSequences.length)){
+ for (int idx = 0; idx < newSequences.length; idx++) {
+ Double simi = jwd.apply(newSequences[idx], oldSequences[idx]);
+ overallSimi = simi + overallSimi;
+ }
+ overallSimi = overallSimi / oldSequences.length;
+ }else{
+ overallSimi = Double.valueOf(0);
+// if(oldSequences.length != 0) {
+// log.info("ERROR");
+// }
+ }
+
+ int retval = Double.compare(overallSimi, Double.valueOf(0.8));
+ String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
+ if(retval >= 0){
+
+
+
+ String result = i + "," + j + ","+String.join(",", oldTokens);
+ jedis.select(2);
+ jedis.set(matchKey, result);
+ }
+ jedis.select(0);
+ jedis.del(matchKey);
+
+ return;
+ default:
+ break;
+ }
+
+ Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
+ m.match();
+
+
+ ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings());
+ ag.generate();
+ List actions = ag.getActions();
+
+ double chawatheSimilarity1 = m.chawatheSimilarity(oldTree, newTree);
+ String chawatheSimilarity = String.format("%1.2f", chawatheSimilarity1);
+ double diceSimilarity1 = m.diceSimilarity(oldTree, newTree);
+ String diceSimilarity = String.format("%1.2f", diceSimilarity1);
+ double jaccardSimilarity1 = m.jaccardSimilarity(oldTree, newTree);
+ String jaccardSimilarity = String.format("%1.2f", jaccardSimilarity1);
+
+ String editDistance = String.valueOf(actions.size());
+
+ String result = i + "," + j + "," + chawatheSimilarity + "," + diceSimilarity + "," + jaccardSimilarity + "," + editDistance;
+
+ String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
+
+ if (((Double) chawatheSimilarity1).equals(1.0) || ((Double) diceSimilarity1).equals(1.0)
+ || ((Double) jaccardSimilarity1).equals(1.0) || actions.size() == 0) {
+// log.info("{} tagged to be similar" ,matchKey);
+
+ jedis.select(2);
+ jedis.set(matchKey, result);
+
+ }
+
+
+ jedis.select(0);
+ jedis.del(matchKey);
+
+
+
+ } catch (Exception e) {
+
+ log.debug("{} not comparable", pairName);
+// e.printStackTrace();
+
+
+ }finally {
+ if (jedis != null) {
+ jedis.close();
+ }
+ }
+ }
+
+
+}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
index c2b6309..667680b 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/EDiffHunkParser.java
@@ -4,6 +4,7 @@ import com.github.gumtreediff.actions.model.Delete;
import com.github.gumtreediff.actions.model.Insert;
import com.github.gumtreediff.actions.model.Move;
import com.github.gumtreediff.actions.model.Update;
+import edu.lu.uni.serval.utils.FileHelper;
import java.io.*;
import java.util.List;
@@ -23,41 +24,41 @@ public class EDiffHunkParser extends EDiffParser {
public void parseFixPatterns(File prevFile, File revFile, File diffentryFile,String project,String actionType) {
List actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile);
if (actionSets.size() != 0) {
- String folder= null;
- boolean processActionSet = false;
+// String folder= null;
+ boolean processActionSet = true;
// switch (actionType){
// case "ALL":
- if(actionType.equals("ALL")){
- folder = "/ALL/";
- processActionSet = true;
- }else if(actionType.equals("UPD") || actionType.equals("INS") || actionType.equals("DEL") || actionType.equals("MOV")|| actionType.equals("MIX")){
- boolean isUPD = actionSets.stream().allMatch(p -> p.getAction() instanceof Update);
- boolean isINS = actionSets.stream().allMatch(p -> p.getAction() instanceof Insert);
- boolean isDEL = actionSets.stream().allMatch(p -> p.getAction() instanceof Delete);
- boolean isMOV = actionSets.stream().allMatch(p -> p.getAction() instanceof Move);
- if(isUPD){
- folder = "/UPD/";
- processActionSet = true;
- }else if(isINS){
- folder = "/INS/";
- processActionSet = true;
- }else if(isDEL){
- folder = "/DEL/";
- processActionSet = true;
- }else if(isMOV){
- folder = "/MOV/";
- processActionSet = true;
- }else{
- folder = "/MIX/";
- processActionSet = true;
- }
- }else{
-
-
- processActionSet = false;
- System.err.print(actionType + "not known");
-
- }
+// if(actionType.equals("ALL")){
+// folder = "/ALL/";
+// processActionSet = true;
+// }else if(actionType.equals("UPD") || actionType.equals("INS") || actionType.equals("DEL") || actionType.equals("MOV")|| actionType.equals("MIX")){
+// boolean isUPD = actionSets.stream().allMatch(p -> p.getAction() instanceof Update);
+// boolean isINS = actionSets.stream().allMatch(p -> p.getAction() instanceof Insert);
+// boolean isDEL = actionSets.stream().allMatch(p -> p.getAction() instanceof Delete);
+// boolean isMOV = actionSets.stream().allMatch(p -> p.getAction() instanceof Move);
+// if(isUPD){
+// folder = "/UPD/";
+// processActionSet = true;
+// }else if(isINS){
+// folder = "/INS/";
+// processActionSet = true;
+// }else if(isDEL){
+// folder = "/DEL/";
+// processActionSet = true;
+// }else if(isMOV){
+// folder = "/MOV/";
+// processActionSet = true;
+// }else{
+// folder = "/MIX/";
+// processActionSet = true;
+// }
+// }else{
+//
+//
+// processActionSet = false;
+// System.err.print(actionType + "not known");
+//
+// }
int hunkSet = 0;
@@ -70,12 +71,21 @@ public class EDiffHunkParser extends EDiffParser {
FileOutputStream f = null;
try {
+
+ String astNodeType = actionSet.getAstNodeType();
+ int size = actionSet.toString().split("\\n").length;
+
+// int size = actionSet.strList.size();
+
String datasetName = project;
String[] split1 = diffentryFile.getParent().split(datasetName);
String root = split1[0];
String pj = split1[1].split("/")[1];
- String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/" + pj + folder + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
+ File file = new File(root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/");
+ file.mkdirs();
+ String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
+// String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/" + pj + folder + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
f = new FileOutputStream(new File(hunkTreeFileName));
ObjectOutputStream o = new ObjectOutputStream(f);
o.writeObject(actionSet);
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java
index 3a019e0..62f44e4 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalActionSet.java
@@ -168,7 +168,7 @@ public class HierarchicalActionSet implements Comparable,
return this.startPosition.compareTo(o.startPosition);//this.action.compareTo(o.action);
}
-
+
private List strList = new ArrayList<>();
@Override
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
index e154673..915e4bc 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/AkkaTreeLoader.java
@@ -8,11 +8,16 @@ import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.io.BufferedReader;
+import java.io.File;
import java.io.FileReader;
import java.io.IOException;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import static edu.lu.uni.serval.fixminer.akka.compare.AkkaTreeParser.akkaCompare;
@@ -47,44 +52,63 @@ public class AkkaTreeLoader {
- String pairsIndexFile = pairsPath + "/"+ chunkName;
+// String pairsIndexFile = pairsPath + "/"+ chunkName;
//0.txt.rdb
- pairsIndexFile = pairsIndexFile.replace(chunk+".rdb",".index");
+// pairsIndexFile = pairsIndexFile.replace(chunk+".rdb",".index");
+ File folder = new File(pairsPath);
+ File[] rootsFolder = folder.listFiles();
- Pattern pattern = Pattern.compile(",");
- String csvFile = pairsIndexFile;
- try {
- try (BufferedReader in = new BufferedReader(new FileReader(csvFile));){
- Map namefreq = in
- .lines()
- .map(x -> pattern.split(x))
- .collect(HashMap::new, (map, x) ->
- map.put(x[0], x[1]),
- Map::putAll);
+ Stream stream = Arrays.stream(rootsFolder);
+ List roots = stream
+ .filter(x -> !x.getName().startsWith("."))
+ .collect(Collectors.toList());
- Jedis inner = null;
+ for(File root:roots) {
+
+ File[] files = root.listFiles();
+ Stream fileStream = Arrays.stream(files);
+ List pairsIndexFiles = fileStream
+ .filter(x -> !x.getName().startsWith("."))
+ .filter(x -> x.getName().endsWith(".index"))
+ .collect(Collectors.toList());
+ for (File pairsIndexFile : pairsIndexFiles) {
+
+ Pattern pattern = Pattern.compile(",");
+ String csvFile = pairsIndexFile.getPath();
try {
- inner = outerPool.getResource();
+ try (BufferedReader in = new BufferedReader(new FileReader(csvFile));) {
+ Map namefreq = in
+ .lines()
+ .map(x -> pattern.split(x))
+ .collect(HashMap::new, (map, x) ->
+ map.put(root.getName()+"-"+pairsIndexFile.getName().split("\\.")[0]+"-"+x[0], x[1]),
+ Map::putAll);
+
+ Jedis inner = null;
+ try {
+ inner = outerPool.getResource();
+
+ for (Map.Entry entry : namefreq.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue();
+ inner.select(1);
+ inner.set(key, value);
+ }
+
+
+ } finally {
+ if (inner != null) {
+ inner.close();
+ }
+ }
+
- for (Map.Entry entry : namefreq.entrySet()) {
- String key = entry.getKey();
- String value = entry.getValue();
- inner.select(1);
- inner.set(key,value);
- }
-
-
- }finally {
- if (inner != null) {
- inner.close();
}
+ } catch (IOException e) {
+ e.printStackTrace();
}
-
-
}
- } catch (IOException e) {
- e.printStackTrace();
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
index afe421b..f2d3c44 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/EnhancedASTDiff.java
@@ -50,15 +50,15 @@ public class EnhancedASTDiff {
// a
- if (actionType.equals("ALL")) {
- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/" + actionType);
- } else {
- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/UPD");
- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/INS");
- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/DEL");
- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MOV");
- FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MIX");
- }
+// if (actionType.equals("ALL")) {
+// FileHelper.createDirectory(GUM_TREE_OUTPUT + "/" + actionType);
+// } else {
+// FileHelper.createDirectory(GUM_TREE_OUTPUT + "/UPD");
+// FileHelper.createDirectory(GUM_TREE_OUTPUT + "/INS");
+// FileHelper.createDirectory(GUM_TREE_OUTPUT + "/DEL");
+// FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MOV");
+// FileHelper.createDirectory(GUM_TREE_OUTPUT + "/MIX");
+// }
}
switch (parallelism){
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java
index e3a04c7..585d082 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/ImportPairs2DB.java
@@ -30,36 +30,49 @@ public class ImportPairs2DB {
File folder = new File(csvInputPath);
File[] subFolders = folder.listFiles();
Stream stream = Arrays.stream(subFolders);
- List pjs = stream
- .filter(x -> x.getName().endsWith(chunkType))
+ List roots = stream
+// .filter(x -> x.getName().endsWith(chunkType))
.collect(Collectors.toList());
+
Integer portInt = Integer.valueOf(portInner);
- for (File pj : pjs) {
+ String cmd = "bash " + dbDir + "/" + "startServer.sh" + " %s %s %s";
+ cmd = String.format(cmd, dbDir,"pairs.rdb", portInt);
+ log.info(cmd);
+ CallShell cs = new CallShell();
+ cs.runShell(cmd, portInner);
- String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
- cmd = String.format(cmd, dbDir,pj.getName() +".rdb", portInt);
- log.info(cmd);
- CallShell cs = new CallShell();
- cs.runShell(cmd, portInner);
+ for (File root : roots) {
- cmd = "bash "+datasetPath + "/redisSingleImport.sh" +" %s %s";
+ File[] files = root.listFiles();
+ Stream fileStream = Arrays.stream(files);
+ List pairs = fileStream
+ .filter(x -> x.getName().endsWith(chunkType))
+ .collect(Collectors.toList());
- cmd = String.format(cmd, pj.getPath(), portInt);
- log.info(cmd);
- cs.runShell(cmd,portInner);
+ for(File pj:pairs) {
- String stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s";
- String stopServer2 = String.format(stopServer,portInt);
- cs.runShell(stopServer2, portInner);
- portInt++;
+
+ cmd = "bash " + datasetPath + "/redisSingleImport.sh" + " %s %s %s";
+
+ cmd = String.format(cmd, pj.getPath(), portInt,root.getName()+"-"+pj.getName().split("\\.")[0]);
+
+ log.info(cmd);
+ cs.runShell(cmd,portInner);
+
+
+ }
}
+ String stopServer = "bash " + dbDir + "/" + "stopServer.sh" + " %s";
+ String stopServer2 = String.format(stopServer, portInt);
+ cs.runShell(stopServer2, portInner);
+// portInt++;
log.info(parameters);
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
index 9b993ad..84e487d 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/MultiThreadTreeLoaderCluster.java
@@ -20,10 +20,8 @@ import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -49,8 +47,8 @@ public class MultiThreadTreeLoaderCluster {
- String cmd3;
- cmd3 = "bash " + importScript +" %s %s";
+// String cmd3;
+// cmd3 = "bash " + importScript +" %s %s";
JedisPool jedisPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
@@ -65,41 +63,74 @@ public class MultiThreadTreeLoaderCluster {
.filter(x -> !x.getName().startsWith("."))
.collect(Collectors.toList());
- for (File f:folders){
+ for (File f:folders) {
// if(f.getName().startsWith("cluster0")) {
+ File[] files = f.listFiles();
+ Stream fileStream = Arrays.stream(files);
+
+ List pairs = fileStream
+ .filter(x -> !x.getName().startsWith("."))
+ .filter(x -> !x.getName().endsWith(".index"))
+ .collect(Collectors.toList());
+ for (File pair : pairs) {
try (Jedis jedis = jedisPool.getResource()) {
// do operations with jedis resource
ScanParams sc = new ScanParams();
sc.count(cursor);
- sc.match("pair_[0-9]*");
+ sc.match(f.getName()+"*");
log.info("Scanning");
ScanResult scan = jedis.scan("0", sc);
int size = scan.getResult().size();
if (size == 0) {
- String comd = String.format(cmd3,f.getPath(),portInner);
+ String cmd3 = "bash " + importScript + " %s %s %s";
+
+ cmd3 = String.format(cmd3, pair.getPath(), portInner,f.getName()+"-"+pair.getName().split("\\.")[0]);
+// String comd = String.format(cmd3, f.getPath(), portInner);
// loadRedis(comd);
- log.info("Importing {} pairs for cluster {}",size,f.getName());
- cs.runShell(comd,portInner);
+ log.info("Importing {} pairs for cluster {}", size, f.getName());
+ cs.runShell(cmd3, portInner);
scan = jedis.scan("0", sc);
size = scan.getResult().size();
}
- log.info("Scanned {} for cluster {}",String.valueOf(size),f.getName());
+ log.info("Scanned {} for cluster {}", String.valueOf(size), f.getName());
+
+ Pattern pattern = Pattern.compile(",");
+ String csvFile = pair.getPath();
+ csvFile = csvFile.replace("txt","index");
+ try (BufferedReader in = new BufferedReader(new FileReader(csvFile));) {
+ Map namefreq = in
+ .lines()
+ .map(x -> pattern.split(x))
+ .collect(HashMap::new, (map, x) ->
+ map.put(f.getName()+"-"+pair.getName().split("\\.")[0]+"-"+x[0], x[1]),
+ Map::putAll);
+
+ for (Map.Entry entry : namefreq.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue();
+ jedis.select(1);
+ jedis.set(key, value);
+ }
- String clusterName = f.getName().replaceAll("[^0-9]+", "");
+
+ }
+
+
+// String clusterName = f.getName().replaceAll("[^0-9]+", "");
//76
scan.getResult().parallelStream()
- .forEach(m -> coreCompare(m, jedisPool, clusterName,outerPool,type));
+ .forEach(m -> coreCompare(m, jedisPool, f.getName(), outerPool, type));
jedis.save();
@@ -108,6 +139,7 @@ public class MultiThreadTreeLoaderCluster {
// }
+ }
}
String stopServer = "bash "+dbDir + "/" + "stopServer.sh" +" %s";
String stopServer1 = String.format(stopServer,Integer.valueOf(portInner));
@@ -122,26 +154,40 @@ public class MultiThreadTreeLoaderCluster {
- public static Pair getTree(String firstValue, JedisPool outerPool,String type){
+ public static Pair getTree(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool){
ITree tree = null;
Jedis inner = null;
- String[] split2 = firstValue.split("/");
-
- String fullFileName = split2[split2.length-1];
- String[] split = fullFileName.split(".txt_");
- String pureFileName = split[0];
- String[] splitPJ = split[1].split("_");
- String project = splitPJ[1];
- String actionSetPosition = splitPJ[0];
+ Jedis outer = null;
+// String[] split2 = firstValue.split("/");
+//
+// String fullFileName = split2[split2.length-1];
+// String[] split = fullFileName.split(".txt_");
+// String pureFileName = split[0];
+// String[] splitPJ = split[1].split("_");
+// String project = splitPJ[1];
+// String actionSetPosition = splitPJ[0];
try {
- inner = outerPool.getResource();
- String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
- String si= inner.get(filename);
+ inner = innerPool.getResource();
+ inner.select(1);
+ String dist2load = inner.get(prefix+"-"+firstValue);
+ outer = outerPool.getResource();
+ outer.select(0);
+ String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+ Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
+ if(keys.size() == 1) {
+ s = (String) keys.toArray()[0];
+ }else{
+ throw new Error("cok key");
+ }
+
+
+// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
+ String si= outer.get(s);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
@@ -161,8 +207,11 @@ public class MultiThreadTreeLoaderCluster {
if (inner != null) {
inner.close();
}
+ if (outer != null) {
+ outer.close();
+ }
}
- Pair pair = new Pair<>(tree,project);
+ Pair pair = new Pair<>(tree,null);
return pair;
@@ -197,19 +246,20 @@ public class MultiThreadTreeLoaderCluster {
catch (Exception e){
e.printStackTrace();
}
- String firstValue = resultMap.get("0");
- String secondValue = resultMap.get("1");
+// String firstValue = resultMap.get("0");
+// String secondValue = resultMap.get("1");
try {
- Pair oldPair = getTree(firstValue, outerPool,type);
- Pair newPair = getTree(secondValue, outerPool,type);
+ String keyName = split[0];
+ Pair oldPair = getTree(keyName,i, outerPool,jedisPool);
+ Pair newPair = getTree(keyName,j, outerPool,jedisPool);
ITree oldTree = oldPair.getValue0();
ITree newTree = newPair.getValue0();
- String oldProject = oldPair.getValue1();
- String newProject = newPair.getValue1();
+// String oldProject = oldPair.getValue1();
+// String newProject = newPair.getValue1();
@@ -231,23 +281,24 @@ public class MultiThreadTreeLoaderCluster {
String editDistance = String.valueOf(actions.size());
// jedis.select(1);
- String result = resultMap.get("0") + "," + oldProject +"," + resultMap.get("1") + "," +newProject+ "," + chawatheSimilarity + "," + diceSimilarity + "," + jaccardSimilarity + "," + editDistance;
+ String result = i+ "," + j + "," + chawatheSimilarity + "," + diceSimilarity + "," + jaccardSimilarity + "," + editDistance;
// jedis.set(resultKey, result);
+ String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
if (((Double) chawatheSimilarity1).equals(1.0) || ((Double) diceSimilarity1).equals(1.0)
|| ((Double) jaccardSimilarity1).equals(1.0) || actions.size() == 0) {
- String matchKey = "match-"+clusterName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
- jedis.select(1);
+ jedis.select(2);
jedis.set(matchKey, result);
}
jedis.select(0);
- String pairKey = "pair_" + (String.valueOf(i)) + "_" + String.valueOf(j);
- jedis.del(pairKey);
+
+ jedis.del(matchKey);
// log.info("Completed " + resultKey);
}catch (Exception e){
log.debug(e.toString() + " {}",(name));
+ e.printStackTrace();
}
diff --git a/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java b/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
index 2fbb676..e04f260 100644
--- a/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
+++ b/src/main/java/edu/lu/uni/serval/fixminer/jobs/StoreEDiffInCache.java
@@ -38,42 +38,55 @@ public class StoreEDiffInCache {
File folder = new File(inputPath);
File[] subFolders = folder.listFiles();
Stream stream = Arrays.stream(subFolders);
- List pjs = stream
+ List roots = stream
.filter(x -> !x.getName().startsWith("."))
.collect(Collectors.toList());
List workList = new ArrayList();
File[] dumps;
- for (File pj : pjs) {
- String pjName = pj.getName();
- File[] files = pj.listFiles();
- Stream fileStream = Arrays.stream(files);
- List fs;
-// if (operation.equals("ALLOP")){
-// fs= fileStream
-// .filter(x -> x.getName().startsWith("UPD") ||
-// x.getName().startsWith("INS") ||
-// x.getName().startsWith("DEL") ||
-// x.getName().startsWith("MOV"))
-// .collect(Collectors.toList());
-// File[] files1 = fs.get(0).listFiles();
-// File[] files2 = fs.get(1).listFiles();
-// File[] files3 = fs.get(2).listFiles();
-// File[] files4 = fs.get(3).listFiles();
-// dumps = Stream.of(files1, files2, files3,files4).flatMap(Stream::of).toArray(File[]::new);
-// }else{
- fs = fileStream
- .filter(x -> x.getName().startsWith(operation))
- .collect(Collectors.toList());
- dumps = fs.get(0).listFiles();
-// }
+ for (File root : roots) {
+ String pjName = root.getName();
+ File[] sizes = root.listFiles();
+ Stream sizesStream = Arrays.stream(sizes);
+ List sizeFolders = sizesStream
+ .filter(x -> !x.getName().startsWith("."))
+ .collect(Collectors.toList());
+
+ for (File sf:sizeFolders){
+ File[] files = sf.listFiles();
+ int length = files.length;
+ if (length == 1)
+ continue;
+
+ Stream fileStream = Arrays.stream(files);
+ List fs;
+ // if (operation.equals("ALLOP")){
+ // fs= fileStream
+ // .filter(x -> x.getName().startsWith("UPD") ||
+ // x.getName().startsWith("INS") ||
+ // x.getName().startsWith("DEL") ||
+ // x.getName().startsWith("MOV"))
+ // .collect(Collectors.toList());
+ // File[] files1 = fs.get(0).listFiles();
+ // File[] files2 = fs.get(1).listFiles();
+ // File[] files3 = fs.get(2).listFiles();
+ // File[] files4 = fs.get(3).listFiles();
+ // dumps = Stream.of(files1, files2, files3,files4).flatMap(Stream::of).toArray(File[]::new);
+ // }else{
+// fs = fileStream
+// .filter(x -> x.getName().startsWith(operation))
+// .collect(Collectors.toList());
+// dumps = fs.get(0).listFiles();
+ // }
- for (File f : dumps) {
- String name = f.getName();
+ for (File f : files) {
+ String name = f.getName();
+
+ String key = pjName + "/"+ sf.getName()+"/" + name;
+ String result = key +","+f.getPath();
+ workList.add(result);
+ }
- String key = pjName + "/"+ operation+"/" + name;
- String result = key +","+f.getPath();
- workList.add(result);
}
}
diff --git a/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java b/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
new file mode 100644
index 0000000..0285940
--- /dev/null
+++ b/src/main/java/edu/lu/uni/serval/utils/ClusterToPattern.java
@@ -0,0 +1,71 @@
+package edu.lu.uni.serval.utils;
+
+import com.github.gumtreediff.tree.ITree;
+import com.github.gumtreediff.tree.TreeContext;
+import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class ClusterToPattern {
+
+ public static void main(String[] args) throws IOException, ClassNotFoundException {
+ String shapesFolder = "/Users/anil.koyuncu/projects/fixminer-all/enhancedASTDiff/python/data/shapes";
+
+ String port = "6399";
+ JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
+
+ File folder = new File(shapesFolder);
+
+ File[] listOfFiles = folder.listFiles();
+ Stream stream = Arrays.stream(listOfFiles);
+ List shapes = stream
+ .filter(x -> !x.getName().startsWith("."))
+ .filter(x -> !x.getName().endsWith(".pickle"))
+ .collect(Collectors.toList());
+ for(File shape:shapes){
+ File[] clusters = shape.listFiles();
+ Stream fileStream = Arrays.stream(clusters);
+ List fileList = fileStream.filter(x -> !x.getName().startsWith("."))
+ .collect(Collectors.toList());
+ for(File cluster:fileList){
+ File[] files = cluster.listFiles();
+ File file = files[0];
+ String key = shape.getName() + "/*/"+file.getName();
+ Jedis outer = outerPool.getResource();
+ String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+ Set keys = outer.keys(key);
+ if (keys.size() == 1) {
+ s = (String) keys.toArray()[0];
+ } else {
+ throw new Error("cok key");
+ }
+
+ String si = outer.get(s);
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+
+
+ String s1 = actionSet.toString();
+ File saveFile = new File(folder.getParent()+"/shapePatterns/" +shape.getName()+"/"+cluster.getName()+".pattern");
+ saveFile.getParentFile().mkdirs();
+ BufferedWriter writer = new BufferedWriter(new FileWriter(saveFile));
+ writer.write(s1);
+
+ writer.close();
+
+
+ }
+
+ }
+
+ }
+}
diff --git a/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java b/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
index 10fddfe..766f154 100644
--- a/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
+++ b/src/main/java/edu/lu/uni/serval/utils/EDiffHelper.java
@@ -10,10 +10,7 @@ import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.io.*;
-import java.util.Base64;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -130,7 +127,7 @@ public class EDiffHelper {
.collect(Collectors.toList());
}
- public static ITree getSimpliedTree(String fn, JedisPool outerPool) {
+ public static ITree getSimpliedTree(String prefix, String fn, JedisPool outerPool) {
ITree tree = null;
Jedis inner = null;
@@ -140,9 +137,9 @@ public class EDiffHelper {
log.info("wait");
}
inner.select(1);
- String dist2load = inner.get(fn);
+ String dist2load = inner.get(prefix+"-"+fn);
inner.select(0);
- String s = inner.get(dist2load);
+ String s = inner.get(prefix.replace("-","/") +"/"+dist2load);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(s);
ITree parent = null;
@@ -164,6 +161,152 @@ public class EDiffHelper {
return tree;
}
+
+
+ public static ITree getShapes(String prefix, String fn, JedisPool outerPool) {
+
+ ITree tree = null;
+ Jedis inner = null;
+ try {
+ inner = outerPool.getResource();
+ while (!inner.ping().equals("PONG")){
+ log.info("wait");
+ }
+ inner.select(1);
+ String dist2load = inner.get(prefix+"-"+fn);
+ inner.select(0);
+ String s = inner.get(prefix.replace("-","/") +"/"+dist2load);
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(s);
+
+ ITree parent = null;
+ ITree children =null;
+ TreeContext tc = new TreeContext();
+ tree = EDiffHelper.getASTTree(actionSet, parent, children,tc);
+ //tree.setParent(null);
+ tc.validate();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }finally {
+ if (inner != null) {
+ inner.close();
+ }
+ }
+ return tree;
+
+ }
+
+
+ public static ITree getActions(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
+
+
+ ITree tree = null;
+ Jedis inner = null;
+ Jedis outer = null;
+
+
+ try {
+ inner = innerPool.getResource();
+ inner.select(1);
+ String dist2load = inner.get(prefix + "-" + firstValue);
+ outer = outerPool.getResource();
+ outer.select(0);
+ String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+ Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
+ if (keys.size() == 1) {
+ s = (String) keys.toArray()[0];
+ } else {
+ throw new Error("cok key");
+ }
+
+
+// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
+ String si = outer.get(s);
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+
+
+ ITree parent = null;
+ ITree children = null;
+ TreeContext tc = new TreeContext();
+ tree = EDiffHelper.getActionTree(actionSet, parent, children, tc);
+ //tree.setParent(null);
+ tc.validate();
+
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ if (inner != null) {
+ inner.close();
+ }
+ if (outer != null) {
+ outer.close();
+ }
+ }
+
+ return tree;
+ }
+
+
+ public static ITree getTokens(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
+
+
+ ITree tree = null;
+ Jedis inner = null;
+ Jedis outer = null;
+
+
+ try {
+ inner = innerPool.getResource();
+ inner.select(1);
+ String dist2load = inner.get(prefix + "-" + firstValue);
+ outer = outerPool.getResource();
+ outer.select(0);
+ String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
+ Set keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
+ if (keys.size() == 1) {
+ s = (String) keys.toArray()[0];
+ } else {
+ throw new Error("cok key");
+ }
+
+
+// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
+ String si = outer.get(s);
+ HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
+
+
+ ITree parent = null;
+ ITree children = null;
+ TreeContext tc = new TreeContext();
+ tree = EDiffHelper.getTokenTree(actionSet, parent, children, tc);
+ tree.setParent(null);
+ tc.validate();
+
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ if (inner != null) {
+ inner.close();
+ }
+ if (outer != null) {
+ outer.close();
+ }
+ }
+
+ return tree;
+ }
+
+
+
+
public static ITree getActionTree(HierarchicalActionSet actionSet, ITree parent, ITree children,TreeContext tc){
int newType = 0;