Automated assistance for program restructuring
ACM Transactions on Software Engineering and Methodology (TOSEM)
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Compositional pointer and escape analysis for Java programs
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Effective Java programming language guide
Effective Java programming language guide
A schema for interprocedural modification side-effect analysis with pointer aliasing
ACM Transactions on Programming Languages and Systems (TOPLAS)
An efficient way to find the side effects of procedure calls and the aliases of variables
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Immutability specification and its applications
JGI '02 Proceedings of the 2002 joint ACM-ISCOPE conference on Java Grande
An Empirical Investigation of the Influence of a Type of Side Effects on Program Comprehension
IEEE Transactions on Software Engineering
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Precise Identification of Side-Effect-Free Methods in Java
ICSM '04 Proceedings of the 20th IEEE International Conference on Software Maintenance
Java Concurrency in Practice
Javari: adding reference immutability to Java
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Object and reference immutability using Java generics
Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
The Clojure programming language
DLS '08 Proceedings of the 2008 symposium on Dynamic languages
Proceedings of the 2006 conference on Pattern languages of programs
Refactoring sequential Java code for concurrency via concurrent libraries
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Relooper: refactoring for loop parallelism in Java
Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications
Purity and side effect analysis for java programs
VMCAI'05 Proceedings of the 6th international conference on Verification, Model Checking, and Abstract Interpretation
Refactoring Java programs for flexible locking
Proceedings of the 33rd International Conference on Software Engineering
A language-independent parallel refactoring framework
Proceedings of the Fifth Workshop on Refactoring Tools
Use, disuse, and misuse of automated refactorings
Proceedings of the 34th International Conference on Software Engineering
A compositional paradigm of automating refactorings
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Refactoring Flash Embedding Methods
International Journal of Systems and Service-Oriented Engineering
Invited talk on refactoring: from concurrency to mobility
Proceedings of the 2013 ACM workshop on Mobile development lifecycle
Hi-index | 0.00 |
It is common for object-oriented programs to have both mutable and immutable classes. Immutable classes simplify programing because the programmer does not have to reason about side-effects. Sometimes programmers write immutable classes from scratch, other times they transform mutable into immutable classes. To transform a mutable class, programmers must find all methods that mutate its transitive state and all objects that can enter or escape the state of the class. The analyses are non-trivial and the rewriting is tedious. Fortunately, this can be automated. We present an algorithm and a tool, Immutator, that enables the programmer to safely transform a mutable class into an immutable class. Two case studies and one controlled experiment show that Immutator is useful. It (i) reduces the burden of making classes immutable, (ii) is fast enough to be used interactively, and (iii) is much safer than manual transformations.