typetools / checker-framework

Pluggable type-checking for Java
http://checkerframework.org/
Other
1.02k stars 353 forks source link

@NotOnlyInitialized ignored in inline initialization scenarios #813

Open mcsaucy opened 8 years ago

mcsaucy commented 8 years ago

@NotOnlyInitialized seems to fall short in cases of inline initialization.

import org.checkerframework.checker.initialization.qual.NotOnlyInitialized;
import org.checkerframework.checker.initialization.qual.UnderInitialization;

class A {
  static interface I {}

  static class B {
    B(@UnderInitialization I stuff) { }
  }

  static class Fails implements I {
    @NotOnlyInitialized B bar = new B(this);
    // a.java:15: error: [assignment.type.incompatible] incompatible types in assignment.
    //     @NotOnlyInitialized B bar = new B(this);
    //                                 ^
    //   found   : @UnderInitialization(A.B.class) @NonNull B
    //   required: @Initialized @NonNull B
  }
  static class works implements I {
    @NotOnlyInitialized B bar;
    {
      bar = new B(this); // works
    }
  }
}
smillst commented 8 years ago

Thanks for reporting this issue. I've added a test case in checker/tests/initialization/fbc/Issue813.java