/* This example causes an error when computing the GLB of two types
 * because the GLB is empty. */

class FieldInstruction {}

class GETFIELD extends FieldInstruction {}

class PUTFIELD extends FieldInstruction {}

public class InstanceOf {
  public void emptyGLB(FieldInstruction f) {
    if (f instanceof GETFIELD || f instanceof PUTFIELD) {
      if (f instanceof PUTFIELD) {
        // During org.checkerframework.dataflow analysis, we can believe that f is both a
        // GETFIELD and a PUTFIELD, which yields an empty GLB.  Once
        // org.checkerframework.dataflow converges, it will know that f is a PUTFIELD.
        return;
      }
      return;
    }
  }

  public boolean assignInstanceOf(Object obj) {
    // We fixed a bug where the type in an instanceof expression
    // like Class<?> was stored as the abstract value result of
    // the expression.
    boolean is_class = obj instanceof Class<?>;
    return is_class;
  }
}
