import org.checkerframework.checker.interning.qual.Interned; public class Expressions { 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; } } } 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); } }