Cross-Language Dependencies: An Empirical Study of Kotlin-Java (2405.04602v2)
Abstract: Background: Since Google introduced Kotlin as an official programming language for developing Android apps in 2017, Kotlin has gained widespread adoption in Android development. The inter-operability of Java and Kotlin's design nature allows them to coexist and interact with each other smoothly within a project. Aims: However, there is limited research on how Java and Kotlin interact with each other in real-world projects and what challenges are faced during these interactions. The answers to these questions are key to understanding these kinds of cross-language software systems. Methods: In this paper, we implemented a tool named DependEx-tractor, which can extract 11 kinds of Kotlin-Java dependencies, and conducted an empirical study of 23 Kotlin-Java real-world projects with 3,227 Java and 8,630 Kotlin source files. Results: Our findings revealed that Java and Kotlin frequently interact with each other in these cross-language projects, with access and call dependency types being the most dominant. Compared to files interacting with other files in the same language, Java/Kotlin source files, which participate in the cross-language interactions, undergo more commits. Additionally, among all Kotlin-Java problematic interactions, we identified seven common mistakes, along with their fixing strategies. Conclusions: The findings of this study can help developers understand and address the challenges in Kotlin-Java projects.
- [n. d.]. Depends. https://github.com/multilang-depends/depends/
- [n. d.]. DV8. https://archdia.com/
- [n. d.]. Kotlin-Java Interop Guide from Android. https://developer.android.com/kotlin/interop/
- [n. d.]. Structure101. https://structure101.com/
- [n. d.]. Understand. https://scitools.com/
- [n. d.]. YouTrack-kt-39635. https://youtrack.jetbrains.com/issue/KT-39635/UnsupportedOperationException-with-list-casted-to-MutableList#focus=Comments-27-4275157.0-0
- Effectiveness of Kotlin vs. Java in android app development tasks. Information and Software Technology 127 (2020), 106374.
- A comparative study: java vs kotlin programming in android application development. International Journal of Advanced Research in Computer Science 9, 3 (2018), 41–45.
- Coding in-depth semistructured interviews: Problems of unitization and intercoder reliability and agreement. Sociological Methods & Research 42, 3 (2013), 294–320.
- Investigating the impact of multiple dependency structures on software defects. In Proceedings of the 41st IEEE/ACM International Conference on Software Engineering (ICSE). IEEE, 584–595.
- Rosa Filgueira and Daniel Garijo. 2022. Inspect4py: A knowledge extraction framework for python code repositories. In Proceedings of the 19th International Conference on Mining Software Repositories (MSR). IEEE, 232–236.
- Are you still smelling it? A comparative study between Java and Kotlin language. In Proceedings of the 7th Brazilian Symposium on Software Components, Architectures, and Reuse (SBCARS). IEEE, 23–32.
- ENRE: a tool framework for extensible eNtity relation extraction. In Proceedings of the 41st IEEE/ACM International Conference on Software Engineering: Companion (ICSE-Companion). IEEE, 67–70.
- PyAnalyzer: An Effective and Practical Approach for Dependency Extraction from Python Code. In Proceedings of the 46th IEEE/ACM International Conference on Software Engineering (ICSE). ACM, 1–12.
- Pragmatic evidence of cross-language link detection: A systematic literature review. Journal of Systems and Software (2023), 111825.
- PolyCruise: A cross-language dynamic information flow analysis. In Proceedings of the 31st USENIX Security Symposium (USENIX Security). USENIX, 2513–2530.
- Understanding bugs in multi-language deep learning frameworks. In Proceedings of the 31st IEEE/ACM International Conference on Program Comprehension (ICPC). IEEE, 328–338.
- Understanding Resolution of Multi-Language Bugs: An Empirical Study on Apache Projects. In Proceedings of the 17th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM). IEEE, 1–11.
- Matias Martinez and Bruno Gois Mateus. 2021. Why did developers migrate android applications from java to kotlin? IEEE Transactions on Software Engineering 48, 11 (2021), 4521–4534.
- Bruno Gois Mateus and Matias Martinez. 2020. On the adoption, usage and evolution of Kotlin features in Android development. In Proceedings of the 14th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM). ACM, 1–12.
- On multi-language software development, cross-language links and accompanying tools: a survey of professional software developers. Journal of Software Engineering Research and Development 5 (2017), 1–33.
- Architecture Anti-patterns: Automatically Detectable Violations of Design Principles. IEEE Transactions on Software Engineering 47, 5 (2019), 1008–1028.
- Automatic extraction of code dependency in virtual reality software. In Proceedings of the 29th IEEE/ACM International Conference on Program Comprehension (ICPC). IEEE, 381–385.
- Performance Study of Kotlin and Java Programs with Bytecode Analysis. Journal of Information Processing 32 (2024), 380–395.
- A language-independent approach to the extraction of dependencies between source code entities. Information and Software Technology 56, 10 (2014), 1268–1288.
- Federico Tomassetti and Marco Torchiano. 2014. An empirical assessment of polyglot-ism in GitHub. In Proceedings of the 18th International Conference on Evaluation and Assessment in Software Engineering (EASE). ACM, 1–4.
- Detecting the Locations and Predicting the Costs of Compound Architectural Debts. IEEE Transactions on Software Engineering 48, 9 (2022), 3686–3715.