blob: 35c260f1cd6df3df13de32f200b248a19c47d732 [file] [log] [blame]
import org.checkerframework.checker.interning.qual.Interned;
public class ExpressionsInterning {
class A {
B b;
}
class B {
C c;
D d() {
return new D();
}
Boolean bBoolean() {
return true;
}
}
class C {}
class D {}
public Boolean fieldThenMethod(A a) {
Boolean temp = a.b.bBoolean();
return temp;
}
class Foo {
public @Interned Foo returnThis(@Interned Foo this, @Interned Foo other) {
if (other == this) {
return this;
} else {
return null;
}
}
}
// :: warning: (cast.unsafe.constructor.invocation)
public @Interned Foo THEONE = new @Interned Foo();
public boolean isItTheOne(Foo f) {
return THEONE.equals(f);
}
// A warning when interned objects are compared via .equals helps me in determining whether it is
// a good idea to convert a given class or reference to @Interned -- I can see whether there are
// places that it is compared with .equals, which I might need to examine.
public boolean dontUseEqualsMethod(@Interned Foo f1, @Interned Foo f2) {
// :: warning: (unnecessary.equals)
return f1.equals(f2);
}
}