{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:14:15Z","timestamp":1750306455802,"version":"3.41.0"},"reference-count":28,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2015,12,2]],"date-time":"2015-12-02T00:00:00Z","timestamp":1449014400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/501100000038","name":"Natural Sciences and Engineering Research Council of Canada","doi-asserted-by":"crossref","id":[{"id":"10.13039\/501100000038","id-type":"DOI","asserted-by":"crossref"}]},{"name":"Ontario Ministry of Research and Innovation"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Softw. Eng. Methodol."],"published-print":{"date-parts":[[2015,12,2]]},"abstract":"<jats:p>Call graphs have many applications in software engineering. For example, they serve as the basis for code navigation features in integrated development environments and are at the foundation of static analyses performed in verification tools. While many call graph construction algorithms have been presented in the literature, we are not aware of any that handle Scala features such as traits and abstract type members. Applying existing algorithms to the JVM bytecodes generated by the Scala compiler produces very imprecise results because type information is lost during compilation. We adapt existing type-based call graph construction algorithms to Scala and present a formalization based on Featherweight Scala. An experimental evaluation shows that our most precise algorithm generates call graphs with 1.1--3.7 times fewer nodes and 1.5--17.3 times fewer edges than a bytecode-based RTA analysis.<\/jats:p>","DOI":"10.1145\/2824234","type":"journal-article","created":{"date-parts":[[2015,12,4]],"date-time":"2015-12-04T13:43:07Z","timestamp":1449236587000},"page":"1-43","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":5,"title":["Type-Based Call Graph Construction Algorithms for Scala"],"prefix":"10.1145","volume":"25","author":[{"given":"Karim","family":"Ali","sequence":"first","affiliation":[{"name":"Technische Universit\u00e4t Darmstadt, Darmstadt, Germany"}]},{"given":"Marianna","family":"Rapoport","sequence":"additional","affiliation":[{"name":"University of Waterloo, Ontario, Canada"}]},{"given":"Ond\u0159ej","family":"Lhot\u00e1k","sequence":"additional","affiliation":[{"name":"University of Waterloo, Ontario, Canada"}]},{"given":"Julian","family":"Dolby","sequence":"additional","affiliation":[{"name":"IBM T.J. Watson Research Center"}]},{"given":"Frank","family":"Tip","sequence":"additional","affiliation":[{"name":"Samsung Research America"}]}],"member":"320","published-online":{"date-parts":[[2015,12,2]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-58485-4_34"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-31057-7_30"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-39038-8_16"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-44202-9_3"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/236337.236371"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/1640089.1640108"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1007\/11821069_1"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.5555\/646153.679523"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/268946.268965"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/1565824.1565829"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/506315.506316"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/182409.182495"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378855"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.5555\/145055.145092"},{"key":"e_1_2_1_17_1","unstructured":"IBM. 2013. T.J. Watson Libraries for analysis WALA. http:\/\/wala.sourceforge.net\/. (Last accessed April 2013).  IBM. 2013. T.J. Watson Libraries for analysis WALA. http:\/\/wala.sourceforge.net\/. (Last accessed April 2013)."},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/1882291.1882355"},{"volume-title":"Proceedings of the International Conference on Compiler Construction (CC). 153--169","author":"Lhot\u00e1k Ond\u0159ej","key":"e_1_2_1_19_1","unstructured":"Ond\u0159ej Lhot\u00e1k and Laurie J. Hendren . 2003. Scaling Java points-to analysis using SPARK . In Proceedings of the International Conference on Compiler Construction (CC). 153--169 . Ond\u0159ej Lhot\u00e1k and Laurie J. Hendren. 2003. Scaling Java points-to analysis using SPARK. In Proceedings of the International Conference on Compiler Construction (CC). 153--169."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1007\/11688839_5"},{"key":"e_1_2_1_22_1","volume-title":"Programming in Scala","author":"Odersky Martin","unstructured":"Martin Odersky , Lex Spoon , and Bill Venners . 2012. Programming in Scala ( 2 nd ed.). Artima Press . Martin Odersky, Lex Spoon, and Bill Venners. 2012. Programming in Scala (2nd ed.). Artima Press.","edition":"2"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.1979.234183"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/2248418.2248421"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/2048066.2048118"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-31057-7_20"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/161494.161517"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/353171.353189"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/353171.353190"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/586088.586090"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.5555\/647476.727758"}],"container-title":["ACM Transactions on Software Engineering and Methodology"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2824234","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2824234","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T05:43:21Z","timestamp":1750225401000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2824234"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2015,12,2]]},"references-count":28,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2015,12,2]]}},"alternative-id":["10.1145\/2824234"],"URL":"https:\/\/doi.org\/10.1145\/2824234","relation":{},"ISSN":["1049-331X","1557-7392"],"issn-type":[{"type":"print","value":"1049-331X"},{"type":"electronic","value":"1557-7392"}],"subject":[],"published":{"date-parts":[[2015,12,2]]},"assertion":[{"value":"2015-03-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2015-09-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2015-12-02","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}