| /* 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; |
| } |
| } |