import org.checkerframework.checker.interning.qual.*; public class MethodInvocation { @Interned MethodInvocation interned; MethodInvocation nonInterned; void nonInternedMethod() { nonInternedMethod(); //:: error: (method.invocation.invalid) internedMethod(); // should emit error this.nonInternedMethod(); //:: error: (method.invocation.invalid) this.internedMethod(); // should emit error interned.nonInternedMethod(); interned.internedMethod(); nonInterned.nonInternedMethod(); //:: error: (method.invocation.invalid) nonInterned.internedMethod(); // should emit error } void internedMethod(@Interned MethodInvocation this) { nonInternedMethod(); internedMethod(); this.nonInternedMethod(); this.internedMethod(); interned.nonInternedMethod(); interned.internedMethod(); nonInterned.nonInternedMethod(); //:: error: (method.invocation.invalid) nonInterned.internedMethod(); // should emit error } // Now, test method parameters void internedCharacterParameter(@Interned Character a) {} // See https://github.com/typetools/checker-framework/issues/84 void internedCharacterParametersClient() { // TODO: autoboxing from char to Character //:: error: (argument.type.incompatible) internedCharacterParameter('\u00E4'); // lowercase a with umlaut // TODO: autoboxing from char to Character //:: error: (argument.type.incompatible) internedCharacterParameter('a'); //:: error: (argument.type.incompatible) internedCharacterParameter(new Character('a')); //:: error: (argument.type.incompatible) internedCharacterParameter(Character.valueOf('a')); } }