{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,18]],"date-time":"2025-11-18T12:13:25Z","timestamp":1763468005226,"version":"3.41.0"},"reference-count":53,"publisher":"Association for Computing Machinery (ACM)","issue":"2","license":[{"start":{"date-parts":[[2010,1,1]],"date-time":"2010-01-01T00:00:00Z","timestamp":1262304000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000143","name":"Division of Computing and Communication Foundations","doi-asserted-by":"publisher","award":["CCF-0427202 CCF-0545850O ISE-0813362"],"award-info":[{"award-number":["CCF-0427202 CCF-0545850O ISE-0813362"]}],"id":[{"id":"10.13039\/100000143","id-type":"DOI","asserted-by":"publisher"}]},{"DOI":"10.13039\/100000089","name":"Office of International Science and Engineering","doi-asserted-by":"publisher","award":["CCF-0427202 CCF-0545850O ISE-0813362"],"award-info":[{"award-number":["CCF-0427202 CCF-0545850O ISE-0813362"]}],"id":[{"id":"10.13039\/100000089","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Program. Lang. Syst."],"published-print":{"date-parts":[[2010,1]]},"abstract":"<jats:p>Pluggable types enable users to enforce multiple type systems in one programming language. We have developed a suite of tools, called the JavaCOP framework, that allows developers to create pluggable type systems for Java. JavaCOP provides a simple declarative language in which program constraints are defined over a program's abstract syntax tree. The JavaCOP compiler automatically enforces these constraints on programs during compilation. The JavaCOP framework also includes a dataflow analysis API in order to support type systems which depend on flow-sensitive information. Finally, JavaCOP includes a novel test framework which helps users gain confidence in the correctness of their pluggable type systems. We demonstrate the framework by discussing a number of pluggable type systems which have been implemented in JavaCOP in order to detect errors and enforce strong invariants in programs. These type systems range from general-purpose checkers, such as a type system for nonnull references, to domain-specific ones, such as a checker for conformance to a library's usage rules.<\/jats:p>","DOI":"10.1145\/1667048.1667049","type":"journal-article","created":{"date-parts":[[2010,8,24]],"date-time":"2010-08-24T13:16:40Z","timestamp":1282655800000},"page":"1-37","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":31,"title":["JavaCOP"],"prefix":"10.1145","volume":"32","author":[{"given":"Shane","family":"Markstrum","sequence":"first","affiliation":[{"name":"Bucknell University, Lewisburg, PA"}]},{"given":"Daniel","family":"Marino","sequence":"additional","affiliation":[{"name":"University of California, Los Angeles, Los Angeles, CA"}]},{"given":"Matthew","family":"Esquivel","sequence":"additional","affiliation":[{"name":"University of California, Los Angeles, Los Angeles, CA"}]},{"given":"Todd","family":"Millstein","sequence":"additional","affiliation":[{"name":"University of California, Los Angeles, Los Angeles, CA"}]},{"given":"Chris","family":"Andreae","sequence":"additional","affiliation":[{"name":"Victoria University of Wellington, Wellington, New Zealand"}]},{"given":"James","family":"Noble","sequence":"additional","affiliation":[{"name":"Victoria University of Wellington, Wellington, New Zealand"}]}],"member":"320","published-online":{"date-parts":[[2010,2,8]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/582419.582448"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1007\/11785477_7"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167479"},{"key":"e_1_2_1_4_1","unstructured":"Arnold K. Gosling J. and Holmes D. 2000. The Java Programming Language 3rd ed. Addison-Wesley Reading MA.   Arnold K. Gosling J. and Holmes D. 2000. The Java Programming Language 3rd ed. Addison-Wesley Reading MA."},{"key":"e_1_2_1_5_1","unstructured":"Bloch J. 2002. A metadata facility for the Java programming language. Tech. rep. JSR 175. http:\/\/www.jcp.org.  Bloch J. 2002. A metadata facility for the Java programming language. Tech. rep. JSR 175. http:\/\/www.jcp.org."},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/566172.566191"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.370"},{"key":"e_1_2_1_8_1","volume-title":"Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP'01)","volume":"2072","author":"Boyland J.","unstructured":"Boyland , J. , Noble , J. , and Retert , W . 2001. Capabilities for sharing: A generalisation of uniqueness and read-only . In Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP'01) . J. L. Knudsen, Ed. Lecture Notes in Computer Science , vol. 2072 . Springer, 2--27. Boyland, J., Noble, J., and Retert, W. 2001. Capabilities for sharing: A generalisation of uniqueness and read-only. In Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP'01). J. L. Knudsen, Ed. Lecture Notes in Computer Science, vol. 2072. Springer, 2--27."},{"key":"e_1_2_1_9_1","volume-title":"OOPSLA Workshop on Revival of Dynamic Languages. http:\/\/pico.vub.ac.be\/~wdmeuter\/RDL04\/papers\/Bracha.pdf.","author":"Bracha G.","year":"2004","unstructured":"Bracha , G. 2004 . Pluggable type systems . OOPSLA Workshop on Revival of Dynamic Languages. http:\/\/pico.vub.ac.be\/~wdmeuter\/RDL04\/papers\/Bracha.pdf. Bracha, G. 2004. Pluggable type systems. OOPSLA Workshop on Revival of Dynamic Languages. http:\/\/pico.vub.ac.be\/~wdmeuter\/RDL04\/papers\/Bracha.pdf."},{"volume-title":"Proceedings of the Adaptable and Extensible Component Systems Conference. http:\/\/asm.objectweb.org.","author":"Bruneton E.","key":"e_1_2_1_10_1","unstructured":"Bruneton , E. , Lenglet , R. , and Coupaye , T . 2002. ASM: A Java bytecode manipulation and analysis framework . In Proceedings of the Adaptable and Extensible Component Systems Conference. http:\/\/asm.objectweb.org. Bruneton, E., Lenglet, R., and Coupaye, T. 2002. ASM: A Java bytecode manipulation and analysis framework. In Proceedings of the Adaptable and Extensible Component Systems Conference. http:\/\/asm.objectweb.org."},{"key":"e_1_2_1_11_1","volume-title":"Proceedings of the 21st European Conference on Object-Oriented Programming (ECOOP'07)","volume":"4609","author":"Chalin P.","unstructured":"Chalin , P. and James , P. R . 2007. Non-Null references by default in Java: Alleviating the nullity annotation burden . In Proceedings of the 21st European Conference on Object-Oriented Programming (ECOOP'07) . E. Ernst, Ed. Lecture Notes in Computer Science , vol. 4609 . Springer, 227--247. Chalin, P. and James, P. R. 2007. Non-Null references by default in Java: Alleviating the nullity annotation burden. In Proceedings of the 21st European Conference on Object-Oriented Programming (ECOOP'07). E. Ernst, Ed. Lecture Notes in Computer Science, vol. 4609. Springer, 227--247."},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/1094811.1094852"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/1065010.1065022"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1007\/11693024_18"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167481"},{"key":"e_1_2_1_16_1","volume-title":"Proceedings of the Conference on Domain-Specific Languages. C. Ramming, Ed. USENIX Association, 229--243","author":"Crew R. F.","year":"1997","unstructured":"Crew , R. F. 1997 . ASTLOG: A language for examining abstract syntax trees . In Proceedings of the Conference on Domain-Specific Languages. C. Ramming, Ed. USENIX Association, 229--243 . Crew, R. F. 1997. ASTLOG: A language for examining abstract syntax trees. In Proceedings of the Conference on Domain-Specific Languages. C. Ramming, Ed. USENIX Association, 229--243."},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/1287624.1287651"},{"volume-title":"Proceedings of the USENIX C++ Conference. USENIX Association, 99--116","author":"Duby C. K.","key":"e_1_2_1_18_1","unstructured":"Duby , C. K. , Meyers , S. , and Reiss , S. P . 1992. CCEL: A metalanguage for C++ . In Proceedings of the USENIX C++ Conference. USENIX Association, 99--116 . Duby, C. K., Meyers, S., and Reiss, S. P. 1992. CCEL: A metalanguage for C++. In Proceedings of the USENIX C++ Conference. USENIX Association, 99--116."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-31984-9_18"},{"key":"e_1_2_1_20_1","first-page":"144","article-title":"Rewritable reference attributed grammars. In Proceedings of the 18th European Conference on Object-Oriented Programming (ECOOP'04). M. Odersky","volume":"3086","author":"Ekman T.","year":"2004","unstructured":"Ekman , T. and Hedin , G. 2004 . Rewritable reference attributed grammars. In Proceedings of the 18th European Conference on Object-Oriented Programming (ECOOP'04). M. Odersky , Ed. Lecture Notes in Computer Science , vol. 3086 , Spring er, 144 -- 169 . Ekman, T. and Hedin, G. 2004. Rewritable reference attributed grammars. In Proceedings of the 18th European Conference on Object-Oriented Programming (ECOOP'04). M. Odersky, Ed. Lecture Notes in Computer Science, vol. 3086, Springer, 144--169.","journal-title":"Ed. Lecture Notes in Computer Science"},{"key":"e_1_2_1_21_1","unstructured":"Ernst M. 2007. Java annotations on types. Tech. rep. JSR 308. http:\/\/www.jcp.org.  Ernst M. 2007. Java annotations on types. Tech. rep. JSR 308. http:\/\/www.jcp.org."},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949332"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-03013-0_9"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/349299.349328"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/301618.301665"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297027.1297059"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297027"},{"key":"e_1_2_1_28_1","volume-title":"Design Patterns: Elements of Reusable Object-Oriented Software","author":"Gamma E.","year":"1995","unstructured":"Gamma , E. , Helm , R. , Johnson , R. E. , and Vlissides , J . 1995 . Design Patterns: Elements of Reusable Object-Oriented Software . Addison-Wesley , Boston, MA . Gamma, E., Helm, R., Johnson, R. E., and Vlissides, J. 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Boston, MA."},{"key":"e_1_2_1_29_1","unstructured":"Gosling J. Joy B. Steele G. and Bracha G. 2000. The Java Language Specification 2nd ed. The Java Series. Addison-Wesley Boston MA.   Gosling J. Joy B. Steele G. and Bracha G. 2000. The Java Language Specification 2nd ed. The Java Series. Addison-Wesley Boston MA."},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297027.1297051"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1007\/11785477_2"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2006.60"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/1028664.1028717"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/503502.503505"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/643603.643622"},{"key":"e_1_2_1_36_1","unstructured":"JSR 302. 2006. JSR 302: Safety critical java technology. http:\/\/jcp.org\/en\/jsr\/detail?id=302.  JSR 302. 2006. JSR 302: Safety critical java technology. http:\/\/jcp.org\/en\/jsr\/detail?id=302."},{"key":"e_1_2_1_37_1","unstructured":"JUnit. 2000. JUnit homepage. http:\/\/junit.org.  JUnit. 2000. JUnit homepage. http:\/\/junit.org."},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2007.48"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/1462166.1462168"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/292540.292561"},{"key":"e_1_2_1_42_1","volume-title":"Proceedings of the 12th International Conference on Compiler Construction (CC'03)","volume":"2622","author":"Nystrom N.","unstructured":"Nystrom , N. , Clarkson , M. R. , and Myers , A. C . 2003. Polyglot: An extensible compiler framework for Java . In Proceedings of the 12th International Conference on Compiler Construction (CC'03) . G. Hedin, Ed. Lecture Notes in Computer Science , vol. 2622 . Springer, 138--152. Nystrom, N., Clarkson, M. R., and Myers, A. C. 2003. Polyglot: An extensible compiler framework for Java. In Proceedings of the 12th International Conference on Compiler Construction (CC'03). G. Hedin, Ed. Lecture Notes in Computer Science, vol. 2622. Springer, 138--152."},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167476"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/1390630.1390656"},{"volume-title":"Types and Programming Languages","author":"Pierce B. C.","key":"e_1_2_1_45_1","unstructured":"Pierce , B. C. 2002. Types and Programming Languages . MIT Press , Cambridge, MA . Pierce, B. C. 2002. Types and Programming Languages. MIT Press, Cambridge, MA."},{"key":"e_1_2_1_46_1","unstructured":"Polyglot. 2004. Polyglot extensible compiler framework. http:\/\/www.cs.cornell.edu\/Projects\/polyglot.  Polyglot. 2004. Polyglot extensible compiler framework. http:\/\/www.cs.cornell.edu\/Projects\/polyglot."},{"key":"e_1_2_1_47_1","unstructured":"Polyglot5. 2007. Polyglot for Java 5. http:\/\/www.cs.ucla.edu\/~milanst\/projects\/polyglot5.  Polyglot5. 2007. Polyglot for Java 5. http:\/\/www.cs.ucla.edu\/~milanst\/projects\/polyglot5."},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/1449764.1449803"},{"volume-title":"Proceedings of the 21st Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'06)","author":"Tarr P. L.","key":"e_1_2_1_49_1","unstructured":"Tarr , P. L. and Cook , W. R. , Eds . 2006 . Proceedings of the 21st Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'06) . ACM Press, New York. Tarr, P. L. and Cook, W. R., Eds. 2006. Proceedings of the 21st Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'06). ACM Press, New York."},{"key":"e_1_2_1_50_1","volume-title":"Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP'06)","volume":"4067","author":"Thomas D., Ed.","year":"2006","unstructured":"Thomas , D., Ed. 2006 . Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP'06) . Lecture Notes in Computer Science , vol. 4067 . Springer. Thomas, D., Ed. 2006. Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP'06). Lecture Notes in Computer Science, vol. 4067. Springer."},{"volume-title":"Proceedings of the Conference of the Centre for Advanced Studies on Collaborative Research (CASCON'99)","author":"Vall\u00e8e-Rai R.","key":"e_1_2_1_51_1","unstructured":"Vall\u00e8e-Rai , R. , Hendren , L. , Sundaresan , V. , Lam , P. , Gagnon , E. , and Co , P . 1999. Soot - A Java optimization framework . In Proceedings of the Conference of the Centre for Advanced Studies on Collaborative Research (CASCON'99) . S. A. MacKay and J. H. Johnson, Eds. IBM, 125--135. Vall\u00e8e-Rai, R., Hendren, L., Sundaresan, V., Lam, P., Gagnon, E., and Co, P. 1999. Soot - A Java optimization framework. In Proceedings of the Conference of the Centre for Advanced Studies on Collaborative Research (CASCON'99). S. A. MacKay and J. H. Johnson, Eds. IBM, 125--135."},{"key":"e_1_2_1_52_1","doi-asserted-by":"publisher","DOI":"10.1145\/320384.320392"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167477"},{"key":"e_1_2_1_54_1","unstructured":"WAL A. 2007. T.J. Watson libraries for analysis (WALA). http:\/\/wala.sf.net.  WAL A. 2007. T.J. Watson libraries for analysis (WALA). http:\/\/wala.sf.net."}],"container-title":["ACM Transactions on Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1667048.1667049","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1667048.1667049","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T12:41:30Z","timestamp":1750250490000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1667048.1667049"}},"subtitle":["Declarative pluggable types for java"],"short-title":[],"issued":{"date-parts":[[2010,1]]},"references-count":53,"journal-issue":{"issue":"2","published-print":{"date-parts":[[2010,1]]}},"alternative-id":["10.1145\/1667048.1667049"],"URL":"https:\/\/doi.org\/10.1145\/1667048.1667049","relation":{},"ISSN":["0164-0925","1558-4593"],"issn-type":[{"type":"print","value":"0164-0925"},{"type":"electronic","value":"1558-4593"}],"subject":[],"published":{"date-parts":[[2010,1]]},"assertion":[{"value":"2008-11-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2009-04-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2010-02-08","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}