Immutable Objects for a Java-like Language
We extend a Java-like language with immutability specifications and a
static type system for verifying immutability. A class modifier
immutable specifies that all class instances are immutable
objects. Ownership types specify the depth of object states and enforce
encapsulation of representation objects. The type system guarantees that
the state of immutable objects does not visibly mutate during a program
run. Provided immutability-annotated classes and methods are final,
this is true even if immutable classes are composed with untrusted classes
that follow Java's type system, but not our immutability type system.