Skip to content

refstudy/RefactoringRelatedStudy

Repository files navigation

Data used in the study: https://drive.google.com/file/d/13ZXKbN9z2a_xINJ-CilnuKZ34ZqPDsGu/view?usp=sharing

Extension installation

  1. Download the .zip file. It is not necessary to decompress the file.
  2. Open the URL chrome://extensions/.
  3. Note that this extension version will only work on the specified commits and on Chromium-based browsers (Edge, Chrome, Brave, Opera, and others).
  4. Enable Developer mode in the top right corner of the extensions page.
  5. Drag and drop the downloaded .zip file onto the page.
  6. The extension should now appear. Make sure it is activated by checking the bottom right.

OBS: Without running the server, this extension version will only work on the commits used in the experiment.

HTTP Server Run

mvn spring-boot:run

Make sure all dependencies are available including the classifier method

By default, the extension will expect the server to be running at localhost

Classifier method

ChangeMetricsMiner is responsible for assembling AST, comparing and generating code modifications between two versions of a file or commit.

RefactoringMiner is responsible for detecting instances that refactoring has occurred using RefMiner. It will run ChangeMetricsMiner for each detected instance and filter/report code modifications based on the detected refactoring.

Configuration (Java openjdk 17.0.8.1 2023-08-24 LTS was used):

1- Clone the repository

git clone https://github.com/RefViewTool/RefViewer.git

2- Install the dependencies in both projects by running install in each root folder

mvn install

2.1- Opening both projects in the same IDE studio will cause changes to ChangeMetricsMiner to be detected by RefactoringMiner without a new install being necessary.

3- Adjust the settings in the config.json file of the RefactoringMiner project. It is necessary to define a temporary folder to keep the cloned projects and an output folder for the output. Finally, for each project, simply enter the .git url and the branch to be collected.

{

    "tempFoldPath": ".\\projetos",
    "outputFoldPath": ".\\data",
    "repositories": [
		    {
		    "url": "https://github.com/jwtk/jjwt.git",
		    "mainBranch": "master",
		    },
	]
}

4- Run the App.java in order to experiment the tool

Output example:

[
    {
        "commit": "0ae8d9f3b740dff1a82fb8e4d1d0afc8cff1c7a8",
        "sourceElements": "[org.activiti.engine.FormService.addComment(String, String, String)]",
        "targetElements": "[org.activiti.engine.TaskService.addComment(String, String, String)]",
        "type": "MOVE_METHOD",
        "related": [
            {
                "Metric": "ADDED_METHOD",
                "Method": "org.activiti.engine.TaskService",
                "Local": "L[268,269], C[3,75]",
                "Detail": "org.activiti.engine.TaskService.addComment(String, String, String)",
                "Code": "/** \n * Add a comment to a task and/or process instance. \n */\nvoid addComment(String taskId,String processInstanceId,String message);\n",
                "relationType": "MENTIONED_DECLARATION",
                "distance": 0
            },
            {
                "Metric": "REMOVED_METHOD",
                "Method": "org.activiti.engine.FormService",
                "Local": "L[76,77], C[3,75]",
                "Detail": "org.activiti.engine.FormService.addComment(String, String, String)",
                "Code": "/** \n * Add a comment to a task and/or process instance. \n */\nvoid addComment(String taskId,String processInstanceId,String message);\n",
                "relationType": "MENTIONED_DECLARATION",
                "distance": 0
            },
            {
                "Metric": "REMOVED_Javadoc",
                "Method": "org.activiti.engine.FormService.addComment(String, String, String)",
                "Local": "L[76,76], C[3,57]",
                "Detail": null,
                "Code": "/** \n * Add a comment to a task and/or process instance. \n */\n",
                "relationType": "MENTIONED",
                "distance": 0
            },
            {
                "Metric": "REMOVED_TextElement",
                "Method": "org.activiti.engine.FormService.addComment(String, String, String)",
                "Local": "L[76,76], C[7,55]",
                "Detail": null,
                "Code": "Add a comment to a task and/or process instance. ",
                "relationType": "MENTIONED",
                "distance": 0
            },
            {
                "Metric": "REMOVED_TagElement",
                "Method": "org.activiti.engine.FormService.addComment(String, String, String)",
                "Local": "L[76,76], C[7,55]",
                "Detail": null,
                "Code": "\n * Add a comment to a task and/or process instance. ",
                "relationType": "MENTIONED",
                "distance": 0
            },
            {
                "Metric": "ADDED_Javadoc",
                "Method": "org.activiti.engine.TaskService.addComment(String, String, String)",
                "Local": "L[268,268], C[3,57]",
                "Detail": null,
                "Code": "/** \n * Add a comment to a task and/or process instance. \n */\n",
                "relationType": "MENTIONED",
                "distance": 0
            },
            {
                "Metric": "ADDED_TextElement",
                "Method": "org.activiti.engine.TaskService.addComment(String, String, String)",
                "Local": "L[268,268], C[7,55]",
                "Detail": null,
                "Code": "Add a comment to a task and/or process instance. ",
                "relationType": "MENTIONED",
                "distance": 0
            },
            {
                "Metric": "ADDED_TagElement",
                "Method": "org.activiti.engine.TaskService.addComment(String, String, String)",
                "Local": "L[268,268], C[7,55]",
                "Detail": null,
                "Code": "\n * Add a comment to a task and/or process instance. ",
                "relationType": "MENTIONED",
                "distance": 0
            }
        ],
        "notRelated": [
            {
                "Metric": "REMOVED_Javadoc",
                "Method": "org.activiti.engine.FormService.getTaskComments(String)",
                "Local": "L[79,79], C[3,48]",
                "Detail": null,
                "Code": "/** \n * The comments related to the given task. \n */\n",
                "relationType": "NOT_RELATED",
                "distance": 99
            },
            {
                "Metric": "REMOVED_ParameterizedType",
                "Method": "org.activiti.engine.FormService.getTaskComments(String)",
                "Local": "L[80,80], C[3,15]",
                "Detail": null,
                "Code": "List<Comment>",
                "relationType": "NOT_RELATED",
                "distance": 99
            },

            {
                "Metric": "REMOVED_ParameterizedType",
                "Method": "org.activiti.engine.FormService.getProcessInstanceComments(String)",
                "Local": "L[83,83], C[3,15]",
                "Detail": null,
                "Code": "List<Comment>",
                "relationType": "NOT_RELATED",
                "distance": 99
            },
 
        ],
        "metadata": {
            "type": "Move Method",
            "description": "Move Method public addComment(taskId String, processInstanceId String, message String) : void from class org.activiti.engine.FormService to public addComment(taskId String, processInstanceId String, message String) : void from class org.activiti.engine.TaskService",
            "leftSideLocations": [
                {
                    "filePath": "modules/activiti-engine/src/main/java/org/activiti/engine/FormService.java",
                    "startLine": 76,
                    "endLine": 77,
                    "startColumn": 3,
                    "endColumn": 76,
                    "codeElementType": "METHOD_DECLARATION",
                    "description": "original method declaration",
                    "codeElement": "public addComment(taskId String, processInstanceId String, message String) : void"
                }
            ],
            "rightSideLocations": [
                {
                    "filePath": "modules/activiti-engine/src/main/java/org/activiti/engine/TaskService.java",
                    "startLine": 268,
                    "endLine": 269,
                    "startColumn": 3,
                    "endColumn": 76,
                    "codeElementType": "METHOD_DECLARATION",
                    "description": "moved method declaration",
                    "codeElement": "public addComment(taskId String, processInstanceId String, message String) : void"
                }
            ]
        }
    }

]

List of commits used in the validation experiment

Id Project Commit
Extract Method Easy T1-F1 Activiti-Activiti 1218270
T1-F2 Activiti-Activiti 14721cd
T1-F3 airbnb-lottie-android f970d3a
Medium T1-M1 abel533-Mapper 0bbdd89
T1-M2 alibaba-arthas 7442fba
T1-M3 alibaba-arthas ec6456c
Hard T1-D1 azkaban-azkaban b0adb99
T1-D2 azkaban-azkaban bd9e6e4
-------- -------- -------- -------- --------
Inline Method Easy T2-F1 discord-jda-JDA 36ee5ab
T2-F2 dreamhead-moco 0e6a290
T2-F3 dreamhead-moco 41fe372
Medium T2-M1 dreamhead-moco 424f653
T2-M2 Genymobile-gnirehtet 660d6a8
T2-M3 google-android-classyshark e436fc4
Hard T2-D1 google-auto 3f69cd2
T2-D2 google-google-java-format 33fc5ba
-------- -------- -------- -------- --------
Move Method Easy T3-F1 signalapp-Signal-Server 33c88ec
T3-F2 PhilJay-MPAndroidChart 8e193e2
T3-F3 osmandapp-OsmAnd c861265
Medium T3-M1 swagger-api-swagger-core 7416ff8
T3-M2 StarRocks-starrocks 9a26f19
T3-M3 StarRocks-starrocks 7646554
Hard T3-D1 Activiti-Activiti 00a1451
T3-D2 NanoHttpd-nanohttpd 6aa9777
-------- -------- -------- -------- --------
Pull Up Method Easy T4-F1 apache-storm f594c20
T4-F2 apache-zookeeper 6664679
T4-F3 facebook-fresco 9395f70
Medium T4-M1 Tencent-APIJSON 8592367
T4-M2 alibaba-jetcache e22b1ae
T4-M3 apache-shenyu 0cf7713
Hard T4-D1 apache-shenyu 0f3a09d
T4-D2 apache-shenyu 32a4229
-------- -------- -------- -------- --------
Push Down Method Easy T5-F1 Activiti-Activiti af10b56
T5-F2 discord-jda-JDA 2b0eff5
T5-F3 discord-jda-JDA a77218c
Medium T5-M1 discord-jda-JDA b579b3d
T5-M2 Doikki-DKVideoPlayer fbb79c0
T5-M3 Activiti-Activiti a48199c
Hard T5-D1 Activiti-Activiti 47cfe93
T5-D2 Activiti-Activiti 4c22d56
-------- -------- -------- -------- --------
Rename Method Easy T6-F1 abel533-Mapper 32fd500
T6-F2 Konloch-bytecode-viewer b2f7fcb
T6-F3 LMAX-Exchange-disruptor f0fa2f8
Medium T6-M1 Activiti-Activiti 3756580
T6-M2 mybatis-mybatis-3 2188eb2
T6-M3 mybatis-mybatis-3 2a68f4f
Hard T6-D1 Tencent-QMUI_Android ab82080
T6-D2 Tencent-QMUI_Android 8149f13

List of projects evaluated

  1. KunMinX-Jetpack-MVVM-Best-Practice (https://github.com/KunMinX/Jetpack-MVVM-Best-Practice.git)
  2. square-retrofit (https://github.com/square/retrofit.git)
  3. NationalSecurityAgency-ghidra (https://github.com/NationalSecurityAgency/ghidra.git)
  4. PhilJay-MPAndroidChart (https://github.com/PhilJay/MPAndroidChart.git)
  5. jeecgboot-jeecg-boot (https://github.com/jeecgboot/jeecg-boot.git)
  6. skylot-jadx (https://github.com/skylot/jadx.git)
  7. airbnb-lottie-android (https://github.com/airbnb/lottie-android.git)
  8. bumptech-glide (https://github.com/bumptech/glide.git)
  9. alibaba-arthas (https://github.com/alibaba/arthas.git)
  10. Blankj-AndroidUtilCode (https://github.com/Blankj/AndroidUtilCode.git)
  11. zxing-zxing (https://github.com/zxing/zxing.git)
  12. xkcoding-spring-boot-demo (https://github.com/xkcoding/spring-boot-demo.git)
  13. apolloconfig-apollo (https://github.com/apolloconfig/apollo.git)
  14. alibaba-easyexcel (https://github.com/alibaba/easyexcel.git)
  15. alibaba-canal (https://github.com/alibaba/canal.git)
  16. alibaba-spring-cloud-alibaba (https://github.com/alibaba/spring-cloud-alibaba.git)
  17. JakeWharton-butterknife (https://github.com/JakeWharton/butterknife.git)
  18. alibaba-fastjson (https://github.com/alibaba/fastjson.git)
  19. xuxueli-xxl-job (https://github.com/xuxueli/xxl-job.git)
  20. greenrobot-EventBus (https://github.com/greenrobot/EventBus.git)
  21. scwang90-SmartRefreshLayout (https://github.com/scwang90/SmartRefreshLayout.git)
  22. seata-seata (https://github.com/seata/seata.git)
  23. Netflix-Hystrix (https://github.com/Netflix/Hystrix.git)
  24. termux-termux-app (https://github.com/termux/termux-app.git)
  25. google-gson (https://github.com/google/gson.git)
  26. elunez-eladmin (https://github.com/elunez/eladmin.git)
  27. didi-DoKit (https://github.com/didi/DoKit.git)
  28. apache-rocketmq (https://github.com/apache/rocketmq.git)
  29. CarGuo-GSYVideoPlayer (https://github.com/CarGuo/GSYVideoPlayer.git)
  30. mybatis-mybatis-3 (https://github.com/mybatis/mybatis-3.git)
  31. brettwooldridge-HikariCP (https://github.com/brettwooldridge/HikariCP.git)
  32. facebook-fresco (https://github.com/facebook/fresco.git)
  33. Tencent-tinker (https://github.com/Tencent/tinker.git)
  34. YunaiV-ruoyi-vue-pro (https://github.com/YunaiV/ruoyi-vue-pro.git)
  35. shuzheng-zheng (https://github.com/shuzheng/zheng.git)
  36. iBotPeaches-Apktool (https://github.com/iBotPeaches/Apktool.git)
  37. openzipkin-zipkin (https://github.com/openzipkin/zipkin.git)
  38. LMAX-Exchange-disruptor (https://github.com/LMAX-Exchange/disruptor.git)
  39. Tencent-APIJSON (https://github.com/Tencent/APIJSON.git)
  40. williamfiset-Algorithms (https://github.com/williamfiset/Algorithms.git)
  41. justauth-JustAuth (https://github.com/justauth/JustAuth.git)
  42. Tencent-QMUI_Android (https://github.com/Tencent/QMUI_Android.git)
  43. heibaiying-BigData-Notes (https://github.com/heibaiying/BigData-Notes.git)
  44. Konloch-bytecode-viewer (https://github.com/Konloch/bytecode-viewer.git)
  45. ben-manes-caffeine (https://github.com/ben-manes/caffeine.git)
  46. Grasscutters-Grasscutter (https://github.com/Grasscutters/Grasscutter.git)
  47. deeplearning4j-deeplearning4j (https://github.com/deeplearning4j/deeplearning4j.git)
  48. GoogleContainerTools-jib (https://github.com/GoogleContainerTools/jib.git)
  49. Netflix-zuul (https://github.com/Netflix/zuul.git)
  50. dromara-Sa-Token (https://github.com/dromara/Sa-Token.git)
  51. LuckSiege-PictureSelector (https://github.com/LuckSiege/PictureSelector.git)
  52. YunaiV-yudao-cloud (https://github.com/YunaiV/yudao-cloud.git)
  53. macrozheng-mall-learning (https://github.com/macrozheng/mall-learning.git)
  54. projectlombok-lombok (https://github.com/projectlombok/lombok.git)
  55. google-guice (https://github.com/google/guice.git)
  56. kunal-kushwaha-DSA-Bootcamp-Java (https://github.com/kunal-kushwaha/DSA-Bootcamp-Java.git)
  57. Netflix-eureka (https://github.com/Netflix/eureka.git)
  58. codecentric-spring-boot-admin (https://github.com/codecentric/spring-boot-admin.git)
  59. pagehelper-Mybatis-PageHelper (https://github.com/pagehelper/Mybatis-PageHelper.git)
  60. apache-zookeeper (https://github.com/apache/zookeeper.git)
  61. redis-jedis (https://github.com/redis/jedis.git)
  62. barry-ran-QtScrcpy (https://github.com/barry-ran/QtScrcpy.git)
  63. pxb1988-dex2jar (https://github.com/pxb1988/dex2jar.git)
  64. gyoogle-tech-interview-for-developer (https://github.com/gyoogle/tech-interview-for-developer.git)
  65. code4craft-webmagic (https://github.com/code4craft/webmagic.git)
  66. mission-peace-interview (https://github.com/mission-peace/interview.git)
  67. android-async-http-android-async-http (https://github.com/android-async-http/android-async-http.git)
  68. LSPosed-LSPosed (https://github.com/LSPosed/LSPosed.git)
  69. square-javapoet (https://github.com/square/javapoet.git)
  70. JessYanCoding-MVPArms (https://github.com/JessYanCoding/MVPArms.git)
  71. jhy-jsoup (https://github.com/jhy/jsoup.git)
  72. google-auto (https://github.com/google/auto.git)
  73. clojure-clojure (https://github.com/clojure/clojure.git)
  74. TooTallNate-Java-WebSocket (https://github.com/TooTallNate/Java-WebSocket.git)
  75. Netflix-conductor (https://github.com/Netflix/conductor.git)
  76. Activiti-Activiti (https://github.com/Activiti/Activiti.git)
  77. asLody-VirtualApp (https://github.com/asLody/VirtualApp.git)
  78. Justson-AgentWeb (https://github.com/Justson/AgentWeb.git)
  79. OpenFeign-feign (https://github.com/OpenFeign/feign.git)
  80. resilience4j-resilience4j (https://github.com/resilience4j/resilience4j.git)
  81. junit-team-junit4 (https://github.com/junit-team/junit4.git)
  82. signalapp-Signal-Server (https://github.com/signalapp/Signal-Server.git)
  83. plantuml-plantuml (https://github.com/plantuml/plantuml.git)
  84. zhoutaoo-SpringCloud (https://github.com/zhoutaoo/SpringCloud.git)
  85. hs-web-hsweb-framework (https://github.com/hs-web/hsweb-framework.git)
  86. react-native-image-picker-react-native-image-picker (https://github.com/react-native-image-picker/react-native-image-picker.git)
  87. json-path-JsonPath (https://github.com/json-path/JsonPath.git)
  88. apache-shardingsphere-elasticjob (https://github.com/apache/shardingsphere-elasticjob.git)
  89. java-native-access-jna (https://github.com/java-native-access/jna.git)
  90. apache-shenyu (https://github.com/apache/shenyu.git)
  91. dropwizard-metrics (https://github.com/dropwizard/metrics.git)
  92. zfile-dev-zfile (https://github.com/zfile-dev/zfile.git)
  93. google-android-classyshark (https://github.com/google/android-classyshark.git)
  94. wildfirechat-im-server (https://github.com/wildfirechat/im-server.git)
  95. swagger-api-swagger-core (https://github.com/swagger-api/swagger-core.git)
  96. flyway-flyway (https://github.com/flyway/flyway.git)
  97. abel533-Mapper (https://github.com/abel533/Mapper.git)
  98. karatelabs-karate (https://github.com/karatelabs/karate.git)
  99. li-xiaojun-XPopup (https://github.com/li-xiaojun/XPopup.git)
  100. Tencent-Shadow (https://github.com/Tencent/Shadow.git)
  101. naman14-Timber (https://github.com/naman14/Timber.git)
  102. NanoHttpd-nanohttpd (https://github.com/NanoHttpd/nanohttpd.git)
  103. zo0r-react-native-push-notification (https://github.com/zo0r/react-native-push-notification.git)
  104. alibaba-transmittable-thread-local (https://github.com/alibaba/transmittable-thread-local.git)
  105. apache-storm (https://github.com/apache/storm.git)
  106. rest-assured-rest-assured (https://github.com/rest-assured/rest-assured.git)
  107. mrniko-netty-socketio (https://github.com/mrniko/netty-socketio.git)
  108. ArthurHub-Android-Image-Cropper (https://github.com/ArthurHub/Android-Image-Cropper.git)
  109. mapstruct-mapstruct (https://github.com/mapstruct/mapstruct.git)
  110. didi-KnowStreaming (https://github.com/didi/KnowStreaming.git)
  111. sshahine-JFoenix (https://github.com/sshahine/JFoenix.git)
  112. AsyncHttpClient-async-http-client (https://github.com/AsyncHttpClient/async-http-client.git)
  113. provectus-kafka-ui (https://github.com/provectus/kafka-ui.git)
  114. joelittlejohn-jsonschema2pojo (https://github.com/joelittlejohn/jsonschema2pojo.git)
  115. gzu-liyujiang-AndroidPicker (https://github.com/gzu-liyujiang/AndroidPicker.git)
  116. lightbend-config (https://github.com/lightbend/config.git)
  117. prolificinteractive-material-calendarview (https://github.com/prolificinteractive/material-calendarview.git)
  118. weibocom-motan (https://github.com/weibocom/motan.git)
  119. springfox-springfox (https://github.com/springfox/springfox.git)
  120. graphql-java-graphql-java (https://github.com/graphql-java/graphql-java.git)
  121. apache-seatunnel (https://github.com/apache/seatunnel.git)
  122. lets-blade-blade (https://github.com/lets-blade/blade.git)
  123. haifengl-smile (https://github.com/haifengl/smile.git)
  124. cabaletta-baritone (https://github.com/cabaletta/baritone.git)
  125. microg-GmsCore (https://github.com/microg/GmsCore.git)
  126. quartz-scheduler-quartz (https://github.com/quartz-scheduler/quartz.git)
  127. wiremock-wiremock (https://github.com/wiremock/wiremock.git)
  128. amitshekhariitbhu-Fast-Android-Networking (https://github.com/amitshekhariitbhu/Fast-Android-Networking.git)
  129. Vedenin-useful-java-links (https://github.com/Vedenin/useful-java-links.git)
  130. btraceio-btrace (https://github.com/btraceio/btrace.git)
  131. PowerJob-PowerJob (https://github.com/PowerJob/PowerJob.git)
  132. scribejava-scribejava (https://github.com/scribejava/scribejava.git)
  133. AriaLyy-Aria (https://github.com/AriaLyy/Aria.git)
  134. TommyLemon-Android-ZBLibrary (https://github.com/TommyLemon/Android-ZBLibrary.git)
  135. vavr-io-vavr (https://github.com/vavr-io/vavr.git)
  136. huanghongxun-HMCL (https://github.com/huanghongxun/HMCL.git)
  137. Genymobile-gnirehtet (https://github.com/Genymobile/gnirehtet.git)
  138. mybatis-generator (https://github.com/mybatis/generator.git)
  139. lettuce-io-lettuce-core (https://github.com/lettuce-io/lettuce-core.git)
  140. google-google-java-format (https://github.com/google/google-java-format.git)
  141. razerdp-BasePopup (https://github.com/razerdp/BasePopup.git)
  142. JodaOrg-joda-time (https://github.com/JodaOrg/joda-time.git)
  143. OpenTSDB-opentsdb (https://github.com/OpenTSDB/opentsdb.git)
  144. claritylab-lucida (https://github.com/claritylab/lucida.git)
  145. spring-projects-spring-data-examples (https://github.com/spring-projects/spring-data-examples.git)
  146. youlookwhat-CloudReader (https://github.com/youlookwhat/CloudReader.git)
  147. WeiYe-Jing-datax-web (https://github.com/WeiYe-Jing/datax-web.git)
  148. pig-mesh-pig (https://github.com/pig-mesh/pig.git)
  149. spring-cloud-spring-cloud-netflix (https://github.com/spring-cloud/spring-cloud-netflix.git)
  150. sofastack-sofa-boot (https://github.com/sofastack/sofa-boot.git)
  151. jankotek-mapdb (https://github.com/jankotek/mapdb.git)
  152. StarRocks-starrocks (https://github.com/StarRocks/starrocks.git)
  153. coobird-thumbnailator (https://github.com/coobird/thumbnailator.git)
  154. web3j-web3j (https://github.com/web3j/web3j.git)
  155. natario1-CameraView (https://github.com/natario1/CameraView.git)
  156. cglib-cglib (https://github.com/cglib/cglib.git)
  157. Doikki-DKVideoPlayer (https://github.com/Doikki/DKVideoPlayer.git)
  158. obsidiandynamics-kafdrop (https://github.com/obsidiandynamics/kafdrop.git)
  159. Javen205-IJPay (https://github.com/Javen205/IJPay.git)
  160. brianfrankcooper-YCSB (https://github.com/brianfrankcooper/YCSB.git)
  161. firebase-FirebaseUI-Android (https://github.com/firebase/FirebaseUI-Android.git)
  162. citerus-dddsample-core (https://github.com/citerus/dddsample-core.git)
  163. j-easy-easy-rules (https://github.com/j-easy/easy-rules.git)
  164. Netflix-ribbon (https://github.com/Netflix/ribbon.git)
  165. JSQLParser-JSqlParser (https://github.com/JSQLParser/JSqlParser.git)
  166. CellularPrivacy-Android-IMSI-Catcher-Detector (https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector.git)
  167. xuexiangjys-XUI (https://github.com/xuexiangjys/XUI.git)
  168. spring-projects-spring-authorization-server (https://github.com/spring-projects/spring-authorization-server.git)
  169. opengoofy-hippo4j (https://github.com/opengoofy/hippo4j.git)
  170. stleary-JSON-java (https://github.com/stleary/JSON-java.git)
  171. line-armeria (https://github.com/line/armeria.git)
  172. azkaban-azkaban (https://github.com/azkaban/azkaban.git)
  173. LWJGL-lwjgl3 (https://github.com/LWJGL/lwjgl3.git)
  174. chewiebug-GCViewer (https://github.com/chewiebug/GCViewer.git)
  175. codingapi-tx-lcn (https://github.com/codingapi/tx-lcn.git)
  176. dreamhead-moco (https://github.com/dreamhead/moco.git)
  177. DiUS-java-faker (https://github.com/DiUS/java-faker.git)
  178. bytedeco-javacpp (https://github.com/bytedeco/javacpp.git)
  179. zlt2000-microservices-platform (https://github.com/zlt2000/microservices-platform.git)
  180. jetlinks-jetlinks-community (https://github.com/jetlinks/jetlinks-community.git)
  181. apache-shiro (https://github.com/apache/shiro.git)
  182. Freeyourgadget-Gadgetbridge (https://github.com/Freeyourgadget/Gadgetbridge.git)
  183. spring-cloud-spring-cloud-gateway (https://github.com/spring-cloud/spring-cloud-gateway.git)
  184. ververica-flink-cdc-connectors (https://github.com/ververica/flink-cdc-connectors.git)
  185. powermock-powermock (https://github.com/powermock/powermock.git)
  186. eirslett-frontend-maven-plugin (https://github.com/eirslett/frontend-maven-plugin.git)
  187. killbill-killbill (https://github.com/killbill/killbill.git)
  188. dromara-hmily (https://github.com/dromara/hmily.git)
  189. GeyserMC-Geyser (https://github.com/GeyserMC/Geyser.git)
  190. oshi-oshi (https://github.com/oshi/oshi.git)
  191. alibaba-jetcache (https://github.com/alibaba/jetcache.git)
  192. mybatis-spring-boot-starter (https://github.com/mybatis/spring-boot-starter.git)
  193. jboss-javassist-javassist (https://github.com/jboss-javassist/javassist.git)
  194. apache-nifi (https://github.com/apache/nifi.git)
  195. rubenlagus-TelegramBots (https://github.com/rubenlagus/TelegramBots.git)
  196. discord-jda-JDA (https://github.com/discord-jda/JDA.git)
  197. rovo89-XposedInstaller (https://github.com/rovo89/XposedInstaller.git)
  198. osmandapp-OsmAnd (https://github.com/osmandapp/OsmAnd.git)
  199. zq2599-blog_demos (https://github.com/zq2599/blog_demos.git)
  200. sofastack-sofa-rpc (https://github.com/sofastack/sofa-rpc.git)
  201. nayuki-QR-Code-generator (https://github.com/nayuki/QR-Code-generator.git)
  202. killme2008-aviatorscript (https://github.com/killme2008/aviatorscript.git)
  203. zendesk-maxwell (https://github.com/zendesk/maxwell.git)
  204. jacoco-jacoco (https://github.com/jacoco/jacoco.git)
  205. apache-incubator-heron (https://github.com/apache/incubator-heron.git)
  206. ikarus23-MifareClassicTool (https://github.com/ikarus23/MifareClassicTool.git)
  207. davideas-FlexibleAdapter (https://github.com/davideas/FlexibleAdapter.git)
  208. lilishop-lilishop (https://github.com/lilishop/lilishop.git)
  209. DrKLO-Telegram (https://github.com/DrKLO/Telegram)
  210. bytedeco-javacv (https://github.com/bytedeco/javacv)
  211. CaffeineMC-sodium-fabric (https://github.com/CaffeineMC/sodium-fabric)
  212. alibaba-Sentinel (https://github.com/alibaba/Sentinel)
  213. dromara-lamp-cloud (https://github.com/dromara/lamp-cloud)

List of most frequent modifications per layer

Layer 0 Layer 1 Layer 2 Layer 3 and beyond
Rename Method rename_element (84.18%) added_method_call (39.57%) removed_method_call (38.38%) added_return_value (23.60%) removed_return_value (22.86%) added_variable (17.60%) added_method (17.33%) removed_variable (17.03%) removed_method (15.35%) added_javadoc (11.85%) added_method_call (66.91%) removed_method_call (58.99%) rename_element (33.07%) added_method (24.86%) added_return_value (23.48%) removed_return_value (20.58%) added_expressionstatement (20.08%) removed_expressionstatement (19.07%) changed_fielddeclaration (18.35%) removed_method (17.49%) added_method_call (56.57%) removed_method_call (44.64%) added_variable (42.63%) removed_variable (35.08%) added_infixexpression (27.28%) added_expressionstatement (27.15%) added_return_value (25.92%) removed_infixexpression (21.87%) added_if_statement (20.64%) removed_expressionstatement (20.24%) added_method_call (17.29%) removed_method_call (12.01%) added_variable (11.22%) added_method (10.48%) added_infixexpression (9.39%) added_if_statement (8.74%) removed_variable (8.51%) added_expressionstatement (7.62%) added_return_value (7.40%) removed_infixexpression (6.84%)
Extract Method added_method_call (99.79%) added_method (95.96%) removed_method_call (87.90%) removed_variable (49.41%) added_return_value (48.98%) added_variable (47.55%) added_infixexpression (42.40%) removed_infixexpression (40.06%) added_if_statement (37.24%) added_class_instance (36.69%) added_modifier (97.24%) added_method_call (72.99%) removed_method_call (49.73%) added_return_value (37.20%) removed_variable (30.25%) added_variable (26.13%) added_parameterizedtype (24.49%) added_if_statement (20.84%) removed_if_statement (18.99%) added_method (18.61%) added_method_call (47.10%) added_variable (46.77%) removed_method_call (42.70%) removed_variable (32.15%) added_if_statement (25.73%) removed_infixexpression (25.40%) added_infixexpression (25.10%) added_expressionstatement (23.66%) removed_expressionstatement (18.93%) added_return_value (18.33%) added_method_call (20.80%) added_variable (14.02%) added_method (13.01%) added_infixexpression (11.34%) added_if_statement (10.42%) added_expressionstatement (8.81%) added_return_value (7.24%) added_class_instance (6.85%) added_classinstcreation (6.85%) removed_method_call (6.63%)
Inline Method removed_method_call (99.37%) removed_method (87.62%) added_method_call (82.79%) removed_return_value (62.70%) removed_infixexpression (44.13%) removed_variable (42.49%) removed_if_statement (38.78%) added_variable (37.78%) removed_class_instance (34.66%) removed_classinstcreation (34.66%) removed_modifier (97.40%) removed_method_call (64.32%) added_method_call (56.68%) added_variable (31.36%) removed_parameterizedtype (24.23%) removed_return_value (24.16%) added_if_statement (23.41%) added_modifier (23.11%) removed_method (23.09%) removed_textelement (22.51%) added_method_call (59.43%) removed_method_call (47.81%) removed_variable (47.77%) added_variable (41.21%) added_infixexpression (33.72%) added_expressionstatement (30.07%) removed_if_statement (28.37%) removed_expressionstatement (27.79%) removed_infixexpression (27.19%) added_if_statement (26.74%) removed_method_call (19.62%) removed_variable (14.18%) added_method_call (13.99%) removed_method (12.32%) removed_infixexpression (12.18%) added_variable (9.71%) removed_expressionstatement (9.64%) removed_if_statement (9.41%) removed_return_value (8.11%) added_infixexpression (7.92%)
Move Method added_method (97.92%) removed_method (97.32%) removed_modifier (93.90%) added_modifier (93.59%) added_method_call (79.75%) removed_method_call (79.37%) added_return_value (57.08%) removed_return_value (56.70%) removed_variable (45.79%) added_variable (45.60%) removed_method_call (64.89%) added_method_call (63.85%) added_fielddeclaration (42.33%) added_class (40.58%) added_method (39.39%) removed_method (37.94%) removed_fielddeclaration (37.77%) added_expressionstatement (26.93%) removed_expressionstatement (25.25%) removed_class (20.75%) added_method_call (63.46%) added_variable (58.77%) removed_method_call (55.11%) added_method (50.58%) removed_variable (50.42%) added_return_value (42.93%) added_expressionstatement (41.99%) added_infixexpression (39.51%) added_fielddeclaration (38.77%) removed_expressionstatement (36.23%) added_method (19.26%) added_method_call (17.63%) removed_method_call (17.54%) removed_method (15.69%) added_variable (14.24%) removed_variable (13.92%) added_infixexpression (11.69%) removed_infixexpression (11.59%) added_if_statement (11.31%) added_return_value (10.91%)
Pull Up Method removed_method (96.87%) added_method (93.42%) removed_modifier (92.80%) added_modifier (89.88%) added_method_call (66.45%) removed_method_call (65.20%) added_return_value (54.77%) removed_return_value (54.38%) removed_markerannotation (51.96%) added_markerannotation (45.42%) removed_method_call (60.96%) added_method_call (60.87%) added_fielddeclaration (54.54%) removed_fielddeclaration (52.89%) added_class (50.14%) added_method (49.51%) removed_method (46.94%) added_expressionstatement (37.89%) removed_expressionstatement (37.01%) added_return_value (29.34%) added_method_call (66.91%) added_method (60.18%) added_return_value (56.34%) removed_method_call (55.68%) added_variable (53.71%) added_fielddeclaration (51.24%) added_expressionstatement (51.24%) added_infixexpression (48.05%) removed_variable (44.58%) removed_expressionstatement (40.69%) added_method (19.86%) removed_method_call (17.62%) added_method_call (17.58%) removed_method (17.11%) removed_variable (13.38%) added_variable (13.25%) removed_infixexpression (11.80%) added_infixexpression (11.33%) added_return_value (11.17%) removed_expressionstatement (11.14%)
Push Down Method added_method (99.17%) added_modifier (93.64%) removed_modifier (84.80%) removed_method_call (68.48%) added_method_call (68.40%) removed_return_value (62.04%) added_return_value (62.04%) removed_method (61.91%) added_markerannotation (51.38%) removed_variable (31.00%) removed_method_call (72.33%) added_method_call (69.92%) removed_fielddeclaration (63.50%) added_fielddeclaration (59.54%) added_class (57.19%) added_method (56.62%) removed_method (56.48%) removed_expressionstatement (49.32%) added_expressionstatement (44.77%) removed_return_value (42.16%) added_method_call (70.52%) removed_method_call (67.02%) added_variable (60.94%) added_method (59.43%) added_return_value (58.95%) added_expressionstatement (57.25%) removed_variable (56.37%) added_infixexpression (53.50%) added_fielddeclaration (52.36%) removed_expressionstatement (52.27%) added_method (20.10%) removed_method_call (17.90%) added_method_call (17.30%) removed_variable (14.18%) removed_method (14.11%) added_variable (13.57%) removed_infixexpression (12.52%) added_infixexpression (11.80%) removed_expressionstatement (11.75%) added_expressionstatement (11.72%)

Change Models

List of change models detected in the study

   "ACCESS_INCREASED",
   "ACCESS_REDUCED",
   "ADDED_ANNOTATION",
   "ADDED_ASSERTSTATEMENT",
   "ADDED_BREAKSTATEMENT",
   "ADDED_CATCH_CLAUSE",
   "ADDED_CLASS",
   "ADDED_CLASS_ANONYMOUS_DECLARATION",
   "ADDED_CLASS_INSTANCE",
   "ADDED_CONSTRUCTORINVOCATION",
   "ADDED_CONTINUESTATEMENT",
   "ADDED_DOSTATEMENT",
   "ADDED_ELSE_STATEMENT",
   "ADDED_ENHANCEDFORSTATEMENT",
   "ADDED_ENUM",
   "ADDED_EXCEPTION_THROWN",
   "ADDED_EXPRESSIONSTATEMENT",
   "ADDED_FORSTATEMENT",
   "ADDED_HIERARCHY",
   "ADDED_IF_STATEMENT",
   "ADDED_IMPORT",
   "ADDED_INTERFACE",
   "ADDED_LABELEDSTATEMENT",
   "ADDED_METHOD",
   "ADDED_METHOD_CALL",
   "ADDED_PARAMETER",
   "ADDED_RECORD",
   "ADDED_RETURN_VALUE",
   "ADDED_SUPERCONSTRUCTORINVOCATION",
   "ADDED_SWITCHCASE",
   "ADDED_SWITCHSTATEMENT",
   "ADDED_SYNCHRONIZEDSTATEMENT",
   "ADDED_THROWSTATEMENT",
   "ADDED_TRYSTATEMENT",
   "ADDED_TRY_CATCH",
   "ADDED_VARIABLE",
   "ADDED_WHILESTATEMENT",
   "ADDED_YIELDSTATEMENT",
   "CATCH_CLAUSE_CHANGE",
   "CATCH_HANDLING_CHANGE",
   "CHANGED_ANONYMOUS_DECLARATION",
   "CHANGED_ASSERTSTATEMENT",
   "CHANGED_BREAKSTATEMENT",
   "CHANGED_CLASS",
   "CHANGED_CONSTRUCTORINVOCATION",
   "CHANGED_CONTINUESTATEMENT",
   "CHANGED_DOSTATEMENT",
   "CHANGED_ELSE_CONDITION",
   "CHANGED_ENHANCEDFORSTATEMENT",
   "CHANGED_ENUM",
   "CHANGED_EXISTING_ELSE_BLOCK",
   "CHANGED_EXISTING_IF_BLOCK",
   "CHANGED_EXPRESSIONSTATEMENT",
   "CHANGED_FORSTATEMENT",
   "CHANGED_HIERARCHY",
   "CHANGED_IF_CONDITION",
   "CHANGED_IMPORT",
   "CHANGED_INTERFACE",
   "CHANGED_LABELEDSTATEMENT",
   "CHANGED_RECORD",
   "CHANGED_RETURN_TYPE",
   "CHANGED_RETURN_VALUE",
   "CHANGED_SUPERCONSTRUCTORINVOCATION",
   "CHANGED_SWITCHCASE",
   "CHANGED_SWITCHSTATEMENT",
   "CHANGED_SYNCHRONIZEDSTATEMENT",
   "CHANGED_THROWSTATEMENT",
   "CHANGED_TRYSTATEMENT",
   "CHANGED_VARIABLE",
   "CHANGED_VAR_VALUE",
   "CHANGED_WHILESTATEMENT",
   "CHANGED_YIELDSTATEMENT",
   "CLASS_INSTANCE_ARGUMENTS_CHANGE",
   "METHOD_CALL_ARGUMENTS_CHANGE",
   "REMOVED_ANNOTATION",
   "REMOVED_ASSERTSTATEMENT",
   "REMOVED_BREAKSTATEMENT",
   "REMOVED_CATCH_CLAUSE",
   "REMOVED_CLASS",
   "REMOVED_CLASS_ANONYMOUS_DECLARATION",
   "REMOVED_CLASS_INSTANCE",
   "REMOVED_CONSTRUCTORINVOCATION",
   "REMOVED_CONTINUESTATEMENT",
   "REMOVED_DOSTATEMENT",
   "REMOVED_ELSE_STATEMENT",
   "REMOVED_ENHANCEDFORSTATEMENT",
   "REMOVED_ENUM",
   "REMOVED_EXCEPTION_THROWN",
   "REMOVED_EXPRESSIONSTATEMENT",
   "REMOVED_FORSTATEMENT",
   "REMOVED_HIERARCHY",
   "REMOVED_IF_STATEMENT",
   "REMOVED_IMPORT",
   "REMOVED_INTERFACE",
   "REMOVED_LABELEDSTATEMENT",
   "REMOVED_METHOD",
   "REMOVED_METHOD_CALL",
   "REMOVED_PARAMETER",
   "REMOVED_RECORD",
   "REMOVED_RETURN_VALUE",
   "REMOVED_SUPERCONSTRUCTORINVOCATION",
   "REMOVED_SWITCHCASE",
   "REMOVED_SWITCHSTATEMENT",
   "REMOVED_SYNCHRONIZEDSTATEMENT",
   "REMOVED_THROWSTATEMENT",
   "REMOVED_TRYSTATEMENT",
   "REMOVED_TRY_CATCH",
   "REMOVED_VARIABLE",
   "REMOVED_WHILESTATEMENT",
   "REMOVED_YIELDSTATEMENT",
   "RENAME_ELEMENT",
   "TRY_CATCH_CHANGE",
   "TURNED_INTO_CLASS",
   "TURNED_INTO_INTERFACE",
   "VAR_TYPE_CHANGED"

Based on AST

    "ADDED_AnnotationTypeDeclaration",
    "ADDED_AnnotationTypeMemberDeclaration",
    "ADDED_AnonymousClassDeclaration",
    "ADDED_ArrayAccess",
    "ADDED_ArrayCreation",
    "ADDED_ArrayInitializer",
    "ADDED_ArrayType",
    "ADDED_BooleanLiteral",
    "ADDED_CastExpression",
    "ADDED_CatchClause",
    "ADDED_CharacterLiteral",
    "ADDED_ClassInstanceCreation",
    "ADDED_ConditionalExpression",
    "ADDED_CreationReference",
    "ADDED_Dimension",
    "ADDED_EnumConstantDeclaration",
    "ADDED_EnumDeclaration",
    "ADDED_ExpressionMethodReference",
    "ADDED_FieldAccess",
    "ADDED_FieldDeclaration",
    "ADDED_ImportDeclaration",
    "ADDED_InfixExpression",
    "ADDED_Initializer",
    "ADDED_InstanceofExpression",
    "ADDED_IntersectionType",
    "ADDED_Javadoc",
    "ADDED_LambdaExpression",
    "ADDED_MarkerAnnotation",
    "ADDED_MemberRef",
    "ADDED_MemberValuePair",
    "ADDED_MethodRef",
    "ADDED_MethodRefParameter",
    "ADDED_Modifier",
    "ADDED_ModuleQualifiedName",
    "ADDED_NameQualifiedType",
    "ADDED_NormalAnnotation",
    "ADDED_NullLiteral",
    "ADDED_PackageDeclaration",
    "ADDED_ParameterizedType",
    "ADDED_ParenthesizedExpression",
    "ADDED_PatternInstanceofExpression",
    "ADDED_PostfixExpression",
    "ADDED_PrefixExpression",
    "ADDED_QualifiedType",
    "ADDED_RecordDeclaration",
    "ADDED_SingleMemberAnnotation",
    "ADDED_SuperFieldAccess",
    "ADDED_SuperMethodInvocation",
    "ADDED_SuperMethodReference",
    "ADDED_SwitchExpression",
    "ADDED_TagElement",
    "ADDED_TextBlock",
    "ADDED_TextElement",
    "ADDED_ThisExpression",
    "ADDED_TypeDeclarationStatement",
    "ADDED_TypeLiteral",
    "ADDED_TypeMethodReference",
    "ADDED_TypeParameter",
    "ADDED_UnionType",
    "ADDED_VariableDeclarationExpression",
    "ADDED_WildcardType",
    "CHANGED_AnnotationTypeDeclaration",
    "CHANGED_AnnotationTypeMemberDeclaration",
    "CHANGED_AnonymousClassDeclaration",
    "CHANGED_ArrayAccess",
    "CHANGED_ArrayCreation",
    "CHANGED_ArrayInitializer",
    "CHANGED_ArrayType",
    "CHANGED_BooleanLiteral",
    "CHANGED_CastExpression",
    "CHANGED_CatchClause",
    "CHANGED_CharacterLiteral",
    "CHANGED_ClassInstanceCreation",
    "CHANGED_ConditionalExpression",
    "CHANGED_CreationReference",
    "CHANGED_Dimension",
    "CHANGED_EnumConstantDeclaration",
    "CHANGED_EnumDeclaration",
    "CHANGED_ExpressionMethodReference",
    "CHANGED_FieldAccess",
    "CHANGED_FieldDeclaration",
    "CHANGED_ImportDeclaration",
    "CHANGED_InfixExpression",
    "CHANGED_Initializer",
    "CHANGED_InstanceofExpression",
    "CHANGED_Javadoc",
    "CHANGED_LambdaExpression",
    "CHANGED_MarkerAnnotation",
    "CHANGED_MemberRef",
    "CHANGED_MemberValuePair",
    "CHANGED_MethodRef",
    "CHANGED_MethodRefParameter",
    "CHANGED_Modifier",
    "CHANGED_NormalAnnotation",
    "CHANGED_PackageDeclaration",
    "CHANGED_ParameterizedType",
    "CHANGED_ParenthesizedExpression",
    "CHANGED_PatternInstanceofExpression",
    "CHANGED_PostfixExpression",
    "CHANGED_PrefixExpression",
    "CHANGED_QualifiedType",
    "CHANGED_RecordDeclaration",
    "CHANGED_SingleMemberAnnotation",
    "CHANGED_SuperFieldAccess",
    "CHANGED_SuperMethodInvocation",
    "CHANGED_SwitchExpression",
    "CHANGED_TagElement",
    "CHANGED_TextBlock",
    "CHANGED_TextElement",
    "CHANGED_ThisExpression",
    "CHANGED_TypeLiteral",
    "CHANGED_TypeParameter",
    "CHANGED_UnionType",
    "CHANGED_VariableDeclarationExpression",
    "CHANGED_WildcardType",
    "REMOVED_AnnotationTypeDeclaration",
    "REMOVED_AnnotationTypeMemberDeclaration",
    "REMOVED_AnonymousClassDeclaration",
    "REMOVED_ArrayAccess",
    "REMOVED_ArrayCreation",
    "REMOVED_ArrayInitializer",
    "REMOVED_ArrayType",
    "REMOVED_BooleanLiteral",
    "REMOVED_CastExpression",
    "REMOVED_CatchClause",
    "REMOVED_CharacterLiteral",
    "REMOVED_ClassInstanceCreation",
    "REMOVED_ConditionalExpression",
    "REMOVED_CreationReference",
    "REMOVED_Dimension",
    "REMOVED_EnumConstantDeclaration",
    "REMOVED_EnumDeclaration",
    "REMOVED_ExpressionMethodReference",
    "REMOVED_FieldAccess",
    "REMOVED_FieldDeclaration",
    "REMOVED_ImportDeclaration",
    "REMOVED_InfixExpression",
    "REMOVED_Initializer",
    "REMOVED_InstanceofExpression",
    "REMOVED_IntersectionType",
    "REMOVED_Javadoc",
    "REMOVED_LambdaExpression",
    "REMOVED_MarkerAnnotation",
    "REMOVED_MemberRef",
    "REMOVED_MemberValuePair",
    "REMOVED_MethodRef",
    "REMOVED_MethodRefParameter",
    "REMOVED_Modifier",
    "REMOVED_NameQualifiedType",
    "REMOVED_NormalAnnotation",
    "REMOVED_NullLiteral",
    "REMOVED_PackageDeclaration",
    "REMOVED_ParameterizedType",
    "REMOVED_ParenthesizedExpression",
    "REMOVED_PatternInstanceofExpression",
    "REMOVED_PostfixExpression",
    "REMOVED_PrefixExpression",
    "REMOVED_QualifiedType",
    "REMOVED_RecordDeclaration",
    "REMOVED_SingleMemberAnnotation",
    "REMOVED_SuperFieldAccess",
    "REMOVED_SuperMethodInvocation",
    "REMOVED_SuperMethodReference",
    "REMOVED_SwitchExpression",
    "REMOVED_TagElement",
    "REMOVED_TextBlock",
    "REMOVED_TextElement",
    "REMOVED_ThisExpression",
    "REMOVED_TypeDeclarationStatement",
    "REMOVED_TypeLiteral",
    "REMOVED_TypeMethodReference",
    "REMOVED_TypeParameter",
    "REMOVED_UnionType",
    "REMOVED_VariableDeclarationExpression",
    "REMOVED_WildcardType

Includes all other AST nodes as well;

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published