public class Container {
/*@ private normal_behavior
@ assignable \nothing;
@*/
private /*@ helper @*/ Container() {}
/*@ public normal_behavior
@ assignable \nothing;
@*/
public static /*@ pure @*/ Container allocate() {
Container c = new Container();
return c;
}
public static class ContainerUser {
public /*@ non_null @*/ Container c;
/*@ private normal_behavior
@ assignable c;
@*/
private /*@ helper @*/ ContainerUser() { c = new Container(); }
/*@ public normal_behavior
@ assignable \nothing;
@*/
public static ContainerUser allocate() {
ContainerUser user = new ContainerUser();
user.c = Container.allocate();
return user;
}
}
}