Data used in the study: https://drive.google.com/file/d/13ZXKbN9z2a_xINJ-CilnuKZ34ZqPDsGu/view?usp=sharing
- Download the
.zipfile. It is not necessary to decompress the file. - Open the URL
chrome://extensions/. - Note that this extension version will only work on the specified commits and on Chromium-based browsers (Edge, Chrome, Brave, Opera, and others).
- Enable Developer mode in the top right corner of the extensions page.
- Drag and drop the downloaded
.zipfile onto the page. - 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.
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
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"
}
]
}
}
]
| 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 | ||
- KunMinX-Jetpack-MVVM-Best-Practice (https://github.com/KunMinX/Jetpack-MVVM-Best-Practice.git)
- square-retrofit (https://github.com/square/retrofit.git)
- NationalSecurityAgency-ghidra (https://github.com/NationalSecurityAgency/ghidra.git)
- PhilJay-MPAndroidChart (https://github.com/PhilJay/MPAndroidChart.git)
- jeecgboot-jeecg-boot (https://github.com/jeecgboot/jeecg-boot.git)
- skylot-jadx (https://github.com/skylot/jadx.git)
- airbnb-lottie-android (https://github.com/airbnb/lottie-android.git)
- bumptech-glide (https://github.com/bumptech/glide.git)
- alibaba-arthas (https://github.com/alibaba/arthas.git)
- Blankj-AndroidUtilCode (https://github.com/Blankj/AndroidUtilCode.git)
- zxing-zxing (https://github.com/zxing/zxing.git)
- xkcoding-spring-boot-demo (https://github.com/xkcoding/spring-boot-demo.git)
- apolloconfig-apollo (https://github.com/apolloconfig/apollo.git)
- alibaba-easyexcel (https://github.com/alibaba/easyexcel.git)
- alibaba-canal (https://github.com/alibaba/canal.git)
- alibaba-spring-cloud-alibaba (https://github.com/alibaba/spring-cloud-alibaba.git)
- JakeWharton-butterknife (https://github.com/JakeWharton/butterknife.git)
- alibaba-fastjson (https://github.com/alibaba/fastjson.git)
- xuxueli-xxl-job (https://github.com/xuxueli/xxl-job.git)
- greenrobot-EventBus (https://github.com/greenrobot/EventBus.git)
- scwang90-SmartRefreshLayout (https://github.com/scwang90/SmartRefreshLayout.git)
- seata-seata (https://github.com/seata/seata.git)
- Netflix-Hystrix (https://github.com/Netflix/Hystrix.git)
- termux-termux-app (https://github.com/termux/termux-app.git)
- google-gson (https://github.com/google/gson.git)
- elunez-eladmin (https://github.com/elunez/eladmin.git)
- didi-DoKit (https://github.com/didi/DoKit.git)
- apache-rocketmq (https://github.com/apache/rocketmq.git)
- CarGuo-GSYVideoPlayer (https://github.com/CarGuo/GSYVideoPlayer.git)
- mybatis-mybatis-3 (https://github.com/mybatis/mybatis-3.git)
- brettwooldridge-HikariCP (https://github.com/brettwooldridge/HikariCP.git)
- facebook-fresco (https://github.com/facebook/fresco.git)
- Tencent-tinker (https://github.com/Tencent/tinker.git)
- YunaiV-ruoyi-vue-pro (https://github.com/YunaiV/ruoyi-vue-pro.git)
- shuzheng-zheng (https://github.com/shuzheng/zheng.git)
- iBotPeaches-Apktool (https://github.com/iBotPeaches/Apktool.git)
- openzipkin-zipkin (https://github.com/openzipkin/zipkin.git)
- LMAX-Exchange-disruptor (https://github.com/LMAX-Exchange/disruptor.git)
- Tencent-APIJSON (https://github.com/Tencent/APIJSON.git)
- williamfiset-Algorithms (https://github.com/williamfiset/Algorithms.git)
- justauth-JustAuth (https://github.com/justauth/JustAuth.git)
- Tencent-QMUI_Android (https://github.com/Tencent/QMUI_Android.git)
- heibaiying-BigData-Notes (https://github.com/heibaiying/BigData-Notes.git)
- Konloch-bytecode-viewer (https://github.com/Konloch/bytecode-viewer.git)
- ben-manes-caffeine (https://github.com/ben-manes/caffeine.git)
- Grasscutters-Grasscutter (https://github.com/Grasscutters/Grasscutter.git)
- deeplearning4j-deeplearning4j (https://github.com/deeplearning4j/deeplearning4j.git)
- GoogleContainerTools-jib (https://github.com/GoogleContainerTools/jib.git)
- Netflix-zuul (https://github.com/Netflix/zuul.git)
- dromara-Sa-Token (https://github.com/dromara/Sa-Token.git)
- LuckSiege-PictureSelector (https://github.com/LuckSiege/PictureSelector.git)
- YunaiV-yudao-cloud (https://github.com/YunaiV/yudao-cloud.git)
- macrozheng-mall-learning (https://github.com/macrozheng/mall-learning.git)
- projectlombok-lombok (https://github.com/projectlombok/lombok.git)
- google-guice (https://github.com/google/guice.git)
- kunal-kushwaha-DSA-Bootcamp-Java (https://github.com/kunal-kushwaha/DSA-Bootcamp-Java.git)
- Netflix-eureka (https://github.com/Netflix/eureka.git)
- codecentric-spring-boot-admin (https://github.com/codecentric/spring-boot-admin.git)
- pagehelper-Mybatis-PageHelper (https://github.com/pagehelper/Mybatis-PageHelper.git)
- apache-zookeeper (https://github.com/apache/zookeeper.git)
- redis-jedis (https://github.com/redis/jedis.git)
- barry-ran-QtScrcpy (https://github.com/barry-ran/QtScrcpy.git)
- pxb1988-dex2jar (https://github.com/pxb1988/dex2jar.git)
- gyoogle-tech-interview-for-developer (https://github.com/gyoogle/tech-interview-for-developer.git)
- code4craft-webmagic (https://github.com/code4craft/webmagic.git)
- mission-peace-interview (https://github.com/mission-peace/interview.git)
- android-async-http-android-async-http (https://github.com/android-async-http/android-async-http.git)
- LSPosed-LSPosed (https://github.com/LSPosed/LSPosed.git)
- square-javapoet (https://github.com/square/javapoet.git)
- JessYanCoding-MVPArms (https://github.com/JessYanCoding/MVPArms.git)
- jhy-jsoup (https://github.com/jhy/jsoup.git)
- google-auto (https://github.com/google/auto.git)
- clojure-clojure (https://github.com/clojure/clojure.git)
- TooTallNate-Java-WebSocket (https://github.com/TooTallNate/Java-WebSocket.git)
- Netflix-conductor (https://github.com/Netflix/conductor.git)
- Activiti-Activiti (https://github.com/Activiti/Activiti.git)
- asLody-VirtualApp (https://github.com/asLody/VirtualApp.git)
- Justson-AgentWeb (https://github.com/Justson/AgentWeb.git)
- OpenFeign-feign (https://github.com/OpenFeign/feign.git)
- resilience4j-resilience4j (https://github.com/resilience4j/resilience4j.git)
- junit-team-junit4 (https://github.com/junit-team/junit4.git)
- signalapp-Signal-Server (https://github.com/signalapp/Signal-Server.git)
- plantuml-plantuml (https://github.com/plantuml/plantuml.git)
- zhoutaoo-SpringCloud (https://github.com/zhoutaoo/SpringCloud.git)
- hs-web-hsweb-framework (https://github.com/hs-web/hsweb-framework.git)
- react-native-image-picker-react-native-image-picker (https://github.com/react-native-image-picker/react-native-image-picker.git)
- json-path-JsonPath (https://github.com/json-path/JsonPath.git)
- apache-shardingsphere-elasticjob (https://github.com/apache/shardingsphere-elasticjob.git)
- java-native-access-jna (https://github.com/java-native-access/jna.git)
- apache-shenyu (https://github.com/apache/shenyu.git)
- dropwizard-metrics (https://github.com/dropwizard/metrics.git)
- zfile-dev-zfile (https://github.com/zfile-dev/zfile.git)
- google-android-classyshark (https://github.com/google/android-classyshark.git)
- wildfirechat-im-server (https://github.com/wildfirechat/im-server.git)
- swagger-api-swagger-core (https://github.com/swagger-api/swagger-core.git)
- flyway-flyway (https://github.com/flyway/flyway.git)
- abel533-Mapper (https://github.com/abel533/Mapper.git)
- karatelabs-karate (https://github.com/karatelabs/karate.git)
- li-xiaojun-XPopup (https://github.com/li-xiaojun/XPopup.git)
- Tencent-Shadow (https://github.com/Tencent/Shadow.git)
- naman14-Timber (https://github.com/naman14/Timber.git)
- NanoHttpd-nanohttpd (https://github.com/NanoHttpd/nanohttpd.git)
- zo0r-react-native-push-notification (https://github.com/zo0r/react-native-push-notification.git)
- alibaba-transmittable-thread-local (https://github.com/alibaba/transmittable-thread-local.git)
- apache-storm (https://github.com/apache/storm.git)
- rest-assured-rest-assured (https://github.com/rest-assured/rest-assured.git)
- mrniko-netty-socketio (https://github.com/mrniko/netty-socketio.git)
- ArthurHub-Android-Image-Cropper (https://github.com/ArthurHub/Android-Image-Cropper.git)
- mapstruct-mapstruct (https://github.com/mapstruct/mapstruct.git)
- didi-KnowStreaming (https://github.com/didi/KnowStreaming.git)
- sshahine-JFoenix (https://github.com/sshahine/JFoenix.git)
- AsyncHttpClient-async-http-client (https://github.com/AsyncHttpClient/async-http-client.git)
- provectus-kafka-ui (https://github.com/provectus/kafka-ui.git)
- joelittlejohn-jsonschema2pojo (https://github.com/joelittlejohn/jsonschema2pojo.git)
- gzu-liyujiang-AndroidPicker (https://github.com/gzu-liyujiang/AndroidPicker.git)
- lightbend-config (https://github.com/lightbend/config.git)
- prolificinteractive-material-calendarview (https://github.com/prolificinteractive/material-calendarview.git)
- weibocom-motan (https://github.com/weibocom/motan.git)
- springfox-springfox (https://github.com/springfox/springfox.git)
- graphql-java-graphql-java (https://github.com/graphql-java/graphql-java.git)
- apache-seatunnel (https://github.com/apache/seatunnel.git)
- lets-blade-blade (https://github.com/lets-blade/blade.git)
- haifengl-smile (https://github.com/haifengl/smile.git)
- cabaletta-baritone (https://github.com/cabaletta/baritone.git)
- microg-GmsCore (https://github.com/microg/GmsCore.git)
- quartz-scheduler-quartz (https://github.com/quartz-scheduler/quartz.git)
- wiremock-wiremock (https://github.com/wiremock/wiremock.git)
- amitshekhariitbhu-Fast-Android-Networking (https://github.com/amitshekhariitbhu/Fast-Android-Networking.git)
- Vedenin-useful-java-links (https://github.com/Vedenin/useful-java-links.git)
- btraceio-btrace (https://github.com/btraceio/btrace.git)
- PowerJob-PowerJob (https://github.com/PowerJob/PowerJob.git)
- scribejava-scribejava (https://github.com/scribejava/scribejava.git)
- AriaLyy-Aria (https://github.com/AriaLyy/Aria.git)
- TommyLemon-Android-ZBLibrary (https://github.com/TommyLemon/Android-ZBLibrary.git)
- vavr-io-vavr (https://github.com/vavr-io/vavr.git)
- huanghongxun-HMCL (https://github.com/huanghongxun/HMCL.git)
- Genymobile-gnirehtet (https://github.com/Genymobile/gnirehtet.git)
- mybatis-generator (https://github.com/mybatis/generator.git)
- lettuce-io-lettuce-core (https://github.com/lettuce-io/lettuce-core.git)
- google-google-java-format (https://github.com/google/google-java-format.git)
- razerdp-BasePopup (https://github.com/razerdp/BasePopup.git)
- JodaOrg-joda-time (https://github.com/JodaOrg/joda-time.git)
- OpenTSDB-opentsdb (https://github.com/OpenTSDB/opentsdb.git)
- claritylab-lucida (https://github.com/claritylab/lucida.git)
- spring-projects-spring-data-examples (https://github.com/spring-projects/spring-data-examples.git)
- youlookwhat-CloudReader (https://github.com/youlookwhat/CloudReader.git)
- WeiYe-Jing-datax-web (https://github.com/WeiYe-Jing/datax-web.git)
- pig-mesh-pig (https://github.com/pig-mesh/pig.git)
- spring-cloud-spring-cloud-netflix (https://github.com/spring-cloud/spring-cloud-netflix.git)
- sofastack-sofa-boot (https://github.com/sofastack/sofa-boot.git)
- jankotek-mapdb (https://github.com/jankotek/mapdb.git)
- StarRocks-starrocks (https://github.com/StarRocks/starrocks.git)
- coobird-thumbnailator (https://github.com/coobird/thumbnailator.git)
- web3j-web3j (https://github.com/web3j/web3j.git)
- natario1-CameraView (https://github.com/natario1/CameraView.git)
- cglib-cglib (https://github.com/cglib/cglib.git)
- Doikki-DKVideoPlayer (https://github.com/Doikki/DKVideoPlayer.git)
- obsidiandynamics-kafdrop (https://github.com/obsidiandynamics/kafdrop.git)
- Javen205-IJPay (https://github.com/Javen205/IJPay.git)
- brianfrankcooper-YCSB (https://github.com/brianfrankcooper/YCSB.git)
- firebase-FirebaseUI-Android (https://github.com/firebase/FirebaseUI-Android.git)
- citerus-dddsample-core (https://github.com/citerus/dddsample-core.git)
- j-easy-easy-rules (https://github.com/j-easy/easy-rules.git)
- Netflix-ribbon (https://github.com/Netflix/ribbon.git)
- JSQLParser-JSqlParser (https://github.com/JSQLParser/JSqlParser.git)
- CellularPrivacy-Android-IMSI-Catcher-Detector (https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector.git)
- xuexiangjys-XUI (https://github.com/xuexiangjys/XUI.git)
- spring-projects-spring-authorization-server (https://github.com/spring-projects/spring-authorization-server.git)
- opengoofy-hippo4j (https://github.com/opengoofy/hippo4j.git)
- stleary-JSON-java (https://github.com/stleary/JSON-java.git)
- line-armeria (https://github.com/line/armeria.git)
- azkaban-azkaban (https://github.com/azkaban/azkaban.git)
- LWJGL-lwjgl3 (https://github.com/LWJGL/lwjgl3.git)
- chewiebug-GCViewer (https://github.com/chewiebug/GCViewer.git)
- codingapi-tx-lcn (https://github.com/codingapi/tx-lcn.git)
- dreamhead-moco (https://github.com/dreamhead/moco.git)
- DiUS-java-faker (https://github.com/DiUS/java-faker.git)
- bytedeco-javacpp (https://github.com/bytedeco/javacpp.git)
- zlt2000-microservices-platform (https://github.com/zlt2000/microservices-platform.git)
- jetlinks-jetlinks-community (https://github.com/jetlinks/jetlinks-community.git)
- apache-shiro (https://github.com/apache/shiro.git)
- Freeyourgadget-Gadgetbridge (https://github.com/Freeyourgadget/Gadgetbridge.git)
- spring-cloud-spring-cloud-gateway (https://github.com/spring-cloud/spring-cloud-gateway.git)
- ververica-flink-cdc-connectors (https://github.com/ververica/flink-cdc-connectors.git)
- powermock-powermock (https://github.com/powermock/powermock.git)
- eirslett-frontend-maven-plugin (https://github.com/eirslett/frontend-maven-plugin.git)
- killbill-killbill (https://github.com/killbill/killbill.git)
- dromara-hmily (https://github.com/dromara/hmily.git)
- GeyserMC-Geyser (https://github.com/GeyserMC/Geyser.git)
- oshi-oshi (https://github.com/oshi/oshi.git)
- alibaba-jetcache (https://github.com/alibaba/jetcache.git)
- mybatis-spring-boot-starter (https://github.com/mybatis/spring-boot-starter.git)
- jboss-javassist-javassist (https://github.com/jboss-javassist/javassist.git)
- apache-nifi (https://github.com/apache/nifi.git)
- rubenlagus-TelegramBots (https://github.com/rubenlagus/TelegramBots.git)
- discord-jda-JDA (https://github.com/discord-jda/JDA.git)
- rovo89-XposedInstaller (https://github.com/rovo89/XposedInstaller.git)
- osmandapp-OsmAnd (https://github.com/osmandapp/OsmAnd.git)
- zq2599-blog_demos (https://github.com/zq2599/blog_demos.git)
- sofastack-sofa-rpc (https://github.com/sofastack/sofa-rpc.git)
- nayuki-QR-Code-generator (https://github.com/nayuki/QR-Code-generator.git)
- killme2008-aviatorscript (https://github.com/killme2008/aviatorscript.git)
- zendesk-maxwell (https://github.com/zendesk/maxwell.git)
- jacoco-jacoco (https://github.com/jacoco/jacoco.git)
- apache-incubator-heron (https://github.com/apache/incubator-heron.git)
- ikarus23-MifareClassicTool (https://github.com/ikarus23/MifareClassicTool.git)
- davideas-FlexibleAdapter (https://github.com/davideas/FlexibleAdapter.git)
- lilishop-lilishop (https://github.com/lilishop/lilishop.git)
- DrKLO-Telegram (https://github.com/DrKLO/Telegram)
- bytedeco-javacv (https://github.com/bytedeco/javacv)
- CaffeineMC-sodium-fabric (https://github.com/CaffeineMC/sodium-fabric)
- alibaba-Sentinel (https://github.com/alibaba/Sentinel)
- dromara-lamp-cloud (https://github.com/dromara/lamp-cloud)
| 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%) |
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;