{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T21:00:59Z","timestamp":1760043659831,"version":"3.41.0"},"reference-count":64,"publisher":"Association for Computing Machinery (ACM)","issue":"POPL","license":[{"start":{"date-parts":[[2019,12,20]],"date-time":"2019-12-20T00:00:00Z","timestamp":1576800000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000185","name":"Defense Advanced Research Projects Agency","doi-asserted-by":"publisher","award":["FA8650-15-C-7564"],"award-info":[{"award-number":["FA8650-15-C-7564"]}],"id":[{"id":"10.13039\/100000185","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2020,1]]},"abstract":"<jats:p>We present a new technique for automatically synthesizing replacement classes. The technique starts with an original class O and a potential replacement class R, then uses R to synthesize a new class that implements the same interface and provides the same functionality as O. Critically, our technique works with a synthe- sized inter-class equivalence predicate between the states of O and R. It uses this predicate to ensure that original and synthesized methods leave corresponding O and R objects in equivalent states. The predicate therefore enables the technique to synthesize individual replacement methods in isolation while still obtain- ing a replacement class that leaves the original and replacement objects in equivalent states after arbitrarily long method invocation sequences. We have implemented the technique as part of a tool, named Mask, and evaluated it using open-source Java classes. The results highlight the effectiveness of Mask in synthesizing replacement classes.<\/jats:p>","DOI":"10.1145\/3371120","type":"journal-article","created":{"date-parts":[[2019,12,20]],"date-time":"2019-12-20T19:45:25Z","timestamp":1576871125000},"page":"1-33","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":12,"title":["Synthesizing replacement classes"],"prefix":"10.1145","volume":"4","author":[{"given":"Malavika","family":"Samak","sequence":"first","affiliation":[{"name":"Massachusetts Institute of Technology, USA"}]},{"given":"Deokhwan","family":"Kim","sequence":"additional","affiliation":[{"name":"Massachusetts Institute of Technology, USA"}]},{"given":"Martin C.","family":"Rinard","sequence":"additional","affiliation":[{"name":"Massachusetts Institute of Technology, USA"}]}],"member":"320","published-online":{"date-parts":[[2019,12,20]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/2837614.2837628"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/503272.503275"},{"key":"e_1_2_2_3_1","unstructured":"Apache Commons 2019. Apache Commons: An Apache project focused on all aspects of reusable Java components. (2019). https:\/\/commons.apache.org\/  Apache Commons 2019. Apache Commons: An Apache project focused on all aspects of reusable Java components. (2019). https:\/\/commons.apache.org\/"},{"key":"e_1_2_2_4_1","unstructured":"API Deprecation 2018. How and When To Deprecate APIs. (2018). https:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/guides\/ javadoc\/deprecation\/deprecation.html  API Deprecation 2018. How and When To Deprecate APIs. (2018). https:\/\/docs.oracle.com\/javase\/7\/docs\/technotes\/guides\/ javadoc\/deprecation\/deprecation.html"},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2737924.2737952"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2676726.2676977"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/3192366.3192383"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462180"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1002\/smr.v18:2"},{"volume-title":"Minimum Satisfying Assignments for SMT","author":"Dillig Isil","key":"e_1_2_2_10_1","unstructured":"Isil Dillig , Thomas Dillig , Kenneth L. McMillan , and Alex Aiken . 2012. Minimum Satisfying Assignments for SMT . In Computer Aided Verification, P. Madhusudan and Sanjit A. Seshia (Eds.). Springer Berlin Heidelberg , Berlin, Heidelberg , 394\u2013409. Isil Dillig, Thomas Dillig, Kenneth L. McMillan, and Alex Aiken. 2012. Minimum Satisfying Assignments for SMT. In Computer Aided Verification, P. Madhusudan and Sanjit A. Seshia (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 394\u2013409."},{"volume-title":"Synthesis with Abstract Examples","author":"Drachsler-Cohen Dana","key":"e_1_2_2_11_1","unstructured":"Dana Drachsler-Cohen , Sharon Shoham , and Eran Yahav . 2017. Synthesis with Abstract Examples . In Computer Aided Verification, Rupak Majumdar and Viktor Kun\u010dak (Eds.). Springer International Publishing , Cham , 254\u2013278. Dana Drachsler-Cohen, Sharon Shoham, and Eran Yahav. 2017. Synthesis with Abstract Examples. In Computer Aided Verification, Rupak Majumdar and Viktor Kun\u010dak (Eds.). Springer International Publishing, Cham, 254\u2013278."},{"key":"e_1_2_2_12_1","unstructured":"Dropwizard 2019. Dropwizard. https:\/\/github.com\/dropwizard\/dropwizard  Dropwizard 2019. Dropwizard. https:\/\/github.com\/dropwizard\/dropwizard"},{"key":"e_1_2_2_13_1","unstructured":"Eclipse 2019. Eclipse: The Platform for Open Innovation and Collaboration. https:\/\/www.eclipse.org\/  Eclipse 2019. Eclipse: The Platform for Open Innovation and Collaboration. https:\/\/www.eclipse.org\/"},{"key":"e_1_2_2_14_1","volume-title":"Eclipse Collection: A comprehensive collections library for Java. https:\/\/github.com\/eclipse\/ eclipse-collections","author":"Inc. Eclipse Foundation.","year":"2019","unstructured":"Inc. Eclipse Foundation. 2019 . Eclipse Collection: A comprehensive collections library for Java. https:\/\/github.com\/eclipse\/ eclipse-collections Inc. Eclipse Foundation. 2019. Eclipse Collection: A comprehensive collections library for Java. https:\/\/github.com\/eclipse\/ eclipse-collections"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062351"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009851"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45251-6_29"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2025113.2025179"},{"key":"e_1_2_2_19_1","unstructured":"Groovy 2019. Groovy language: A multi-faceted language for the Java platform. http:\/\/groovy-lang.org\/  Groovy 2019. Groovy language: A multi-faceted language for the Java platform. http:\/\/groovy-lang.org\/"},{"key":"e_1_2_2_20_1","unstructured":"Guava Collections 2009. Why did Google build Guava collections. (2009). https:\/\/code.google.com\/archive\/p\/ google-collections\/wikis\/Faq.wiki  Guava Collections 2009. Why did Google build Guava collections. (2009). https:\/\/code.google.com\/archive\/p\/ google-collections\/wikis\/Faq.wiki"},{"key":"e_1_2_2_21_1","unstructured":"Guava v\/s Apache 2009. Google Guava vs Apache commons. (2009). https:\/\/stackoverflow.com\/questions\/1444437\/ google-guava-vs-apache-commons  Guava v\/s Apache 2009. Google Guava vs Apache commons. (2009). https:\/\/stackoverflow.com\/questions\/1444437\/ google-guava-vs-apache-commons"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/2884781.2884869"},{"key":"e_1_2_2_23_1","volume-title":"Oracle technology network for java developers, oracle technology network, oracle","author":"JDK","year":"2019","unstructured":"JDK 2019. Oracle technology network for java developers, oracle technology network, oracle 2019 . (2019). https:\/\/www. oracle.com\/technetwork\/java\/index.html JDK 2019. Oracle technology network for java developers, oracle technology network, oracle 2019. (2019). https:\/\/www. oracle.com\/technetwork\/java\/index.html"},{"key":"e_1_2_2_24_1","unstructured":"JDK Bug fixes 2019. List of bug fixes in JDK 8u221 release. (2019). https:\/\/www.oracle.com\/technetwork\/java\/javase\/2col\/ 8u221-bugfixes-5480117.html  JDK Bug fixes 2019. List of bug fixes in JDK 8u221 release. (2019). https:\/\/www.oracle.com\/technetwork\/java\/javase\/2col\/ 8u221-bugfixes-5480117.html"},{"key":"e_1_2_2_25_1","unstructured":"JDK Deprecation 2018. Deprecated JDK elements. (2018). https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/deprecated-list.html  JDK Deprecation 2018. Deprecated JDK elements. (2018). https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/deprecated-list.html"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2786805.2803189"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806799.1806833"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/1869459.1869518"},{"key":"e_1_2_2_29_1","doi-asserted-by":"publisher","DOI":"10.5555\/1765871.1765924"},{"key":"e_1_2_2_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/360248.360252"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1007\/11693024_11"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/1111037.1111050"},{"key":"e_1_2_2_33_1","unstructured":"Kubernetes 2019. Kubernetes Client: Java client for the kubernetes API. https:\/\/github.com\/kubernetes-client\/java  Kubernetes 2019. Kubernetes Client: Java client for the kubernetes API. https:\/\/github.com\/kubernetes-client\/java"},{"key":"e_1_2_2_34_1","volume-title":"SYMDIFF: A Language-Agnostic Semantic Diff Tool for Imperative Programs","author":"Lahiri Shuvendu K.","year":"2012","unstructured":"Shuvendu K. Lahiri , Chris Hawblitzel , Ming Kawaguchi , and Henrique Reb\u00ealo . 2012 . SYMDIFF: A Language-Agnostic Semantic Diff Tool for Imperative Programs . In Computer Aided Verification, P. Madhusudan and Sanjit A. Seshia (Eds.). Springer Berlin Heidelberg , Berlin, Heidelberg , 712\u2013717. Shuvendu K. Lahiri, Chris Hawblitzel, Ming Kawaguchi, and Henrique Reb\u00ealo. 2012. SYMDIFF: A Language-Agnostic Semantic Diff Tool for Imperative Programs. In Computer Aided Verification, P. Madhusudan and Sanjit A. Seshia (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 712\u2013717."},{"key":"e_1_2_2_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/1543135.1542485"},{"volume-title":"Automatic Inference of Class Invariants","author":"Logozzo Francesco","key":"e_1_2_2_36_1","unstructured":"Francesco Logozzo . 2004. Automatic Inference of Class Invariants . In Verification, Model Checking, and Abstract Interpretation, Bernhard Steffen and Giorgio Levi (Eds.). Springer Berlin Heidelberg , Berlin, Heidelberg , 211\u2013222. Francesco Logozzo. 2004. Automatic Inference of Class Invariants. In Verification, Model Checking, and Abstract Interpretation, Bernhard Steffen and Giorgio Levi (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 211\u2013222."},{"key":"e_1_2_2_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/1065010.1065018"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/566172.566213"},{"key":"e_1_2_2_39_1","unstructured":"Oracle v\/s Google 2019. Oracle America Inc. v. Google Inc. (2019). https:\/\/en.wikipedia.org\/wiki\/Oracle_America _Inc._ v._Google _Inc.  Oracle v\/s Google 2019. Oracle America Inc. v. Google Inc. (2019). https:\/\/en.wikipedia.org\/wiki\/Oracle_America _Inc._ v._Google _Inc."},{"key":"e_1_2_2_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/3180155.3180189"},{"key":"e_1_2_2_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908093"},{"key":"e_1_2_2_42_1","unstructured":"PostgreSQL-JDBC-9.3 2019. Email thread on changes in PostgreSQL. (2019). https:\/\/www.postgresql.org\/message-id\/CA %2BnXnG8b7wTkb9SM5dX-X9NrEBfHYk_-DCkyoFk_ssnKm2sS9Q@mail.gmail.com  PostgreSQL-JDBC-9.3 2019. Email thread on changes in PostgreSQL. (2019). https:\/\/www.postgresql.org\/message-id\/CA %2BnXnG8b7wTkb9SM5dX-X9NrEBfHYk_-DCkyoFk_ssnKm2sS9Q@mail.gmail.com"},{"key":"e_1_2_2_43_1","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2009.60"},{"key":"e_1_2_2_44_1","unstructured":"PubNub 2019. Pubnub: Java-based SDKs for Java \/ Android. https:\/\/github.com\/pubnub\/java  PubNub 2019. Pubnub: Java-based SDKs for Java \/ Android. https:\/\/github.com\/pubnub\/java"},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/1250734.1250749"},{"key":"e_1_2_2_46_1","unstructured":"Refaster 2019. Error Prone: A static analysis tool for Java that catches common programming mistakes at compiletime. (2019). https:\/\/errorprone.info\/  Refaster 2019. Error Prone: A static analysis tool for Java that catches common programming mistakes at compiletime. (2019). https:\/\/errorprone.info\/"},{"key":"e_1_2_2_47_1","unstructured":"ReWrite 2019. ReWrite - Distributed Java Source Refactoring. https:\/\/github.com\/Netflix-Skunkworks\/rewrite  ReWrite 2019. ReWrite - Distributed Java Source Refactoring. https:\/\/github.com\/Netflix-Skunkworks\/rewrite"},{"key":"e_1_2_2_48_1","unstructured":"RxJava 2019. RxJava:Reactive Extensions for the JVM. https:\/\/github.com\/ReactiveX\/RxJava  RxJava 2019. RxJava:Reactive Extensions for the JVM. https:\/\/github.com\/ReactiveX\/RxJava"},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/1889997.1890002"},{"key":"e_1_2_2_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/3132747.3132773"},{"key":"e_1_2_2_51_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-08867-9_6"},{"key":"e_1_2_2_53_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-10672-9_3"},{"key":"e_1_2_2_54_1","doi-asserted-by":"publisher","DOI":"10.1145\/1375581.1375599"},{"key":"e_1_2_2_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/1168857.1168907"},{"key":"e_1_2_2_56_1","unstructured":"Structurizr 2019. Structurizr: Structurizr for Java. https:\/\/github.com\/structurizr\/java  Structurizr 2019. Structurizr: Structurizr for Java. https:\/\/github.com\/structurizr\/java"},{"key":"e_1_2_2_57_1","doi-asserted-by":"publisher","DOI":"10.1145\/964001.964015"},{"key":"e_1_2_2_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/1040305.1040311"},{"key":"e_1_2_2_59_1","doi-asserted-by":"publisher","DOI":"10.1145\/3236782"},{"key":"e_1_2_2_60_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062365"},{"key":"e_1_2_2_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/3158144"},{"key":"e_1_2_2_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/3314221.3314588"},{"volume-title":"Modular Verification of Procedure Equivalence in the Presence of Memory Allocation","author":"Wood Tim","key":"e_1_2_2_63_1","unstructured":"Tim Wood , Sophia Drossopolou , Shuvendu K. Lahiri , and Susan Eisenbach . 2017. Modular Verification of Procedure Equivalence in the Presence of Memory Allocation . In Programming Languages and Systems, Hongseok Yang (Ed.). Springer Berlin Heidelberg , Berlin, Heidelberg , 937\u2013963. Tim Wood, Sophia Drossopolou, Shuvendu K. Lahiri, and Susan Eisenbach. 2017. Modular Verification of Procedure Equivalence in the Presence of Memory Allocation. In Programming Languages and Systems, Hongseok Yang (Ed.). Springer Berlin Heidelberg, Berlin, Heidelberg, 937\u2013963."},{"key":"e_1_2_2_64_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062386"},{"key":"e_1_2_2_65_1","doi-asserted-by":"publisher","DOI":"10.1145\/1328438.1328467"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3371120","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3371120","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3371120","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T19:05:43Z","timestamp":1750273543000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3371120"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,12,20]]},"references-count":64,"journal-issue":{"issue":"POPL","published-print":{"date-parts":[[2020,1]]}},"alternative-id":["10.1145\/3371120"],"URL":"https:\/\/doi.org\/10.1145\/3371120","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2019,12,20]]},"assertion":[{"value":"2019-12-20","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}