import checkers.javari.quals.*;
/*
* @skip-test - return value of readonly constructors is readonly
*/
class Constructors {
@Mutable String mString;
@ReadOnly String roString;
public @PolyRead Constructors (@PolyRead String s) {}
public @ReadOnly Constructors (@ReadOnly String s, int x) {}
public Constructors (String s, String x) {}
void test() {
Constructors mc;
@ReadOnly Constructors roc;
roc = new Constructors(roString); // ok
roc = new Constructors(mString); // ok
roc = new Constructors(null); // ok
//:: (type.incompatible)
mc = new Constructors(roString); // cannot assign
mc = new Constructors(mString); // ok
mc = new Constructors(null); // ok
roc = new Constructors(roString, 0); // ok
roc = new Constructors(mString, 0); // ok
roc = new Constructors(null, 0); // ok
//:: (type.incompatible)
mc = new Constructors(roString, 0); // cannot assign
//:: (type.incompatible)
mc = new Constructors(mString, 0); // cannot assign
//:: (type.incompatible)
mc = new Constructors(null, 0); // cannot assign
new Constructors(mString, mString); // ok
//:: (type.incompatible)
new Constructors(roString, mString); // illegal parameter
//:: (type.incompatible)
new Constructors(mString, roString); // illegal parameter
//:: (type.incompatible)
new Constructors(roString, roString); // illegal parameters
}
////// Adding test for constructor receivers
public @Mutable Constructors(@Mutable Constructors o, String i) { }
public void testConstructorWithReceiver() {
@ReadOnly Constructors ro = null;
@Mutable Constructors m = null;
@Mutable Constructors c1 = new @Mutable Constructors(m, "");
@Mutable Constructors c2 = new Constructors(m, "");
//:: (type.incompatible)
@Mutable Constructors c3 = new @ReadOnly Constructors(m, ""); // invalid
//:: (type.incompatible)
new @ReadOnly Constructors(ro, ""); // illegal parameter
}
}