// @skip-test // Test case for issue #554: https://github.com/typetools/checker-framework/issues/554 import org.checkerframework.checker.nullness.qual.*; class MonotonicNonNullConstructorTest1 { static class Data { @MonotonicNonNull Object field; } Data data; Object object; @RequiresNonNull("#1.field") MonotonicNonNullConstructorTest1(final Data data) { this.data = data; this.object = data.field; } } class MonotonicNonNullConstructorTest2 { static class Data { @MonotonicNonNull Object field; } Data data; Object object; @RequiresNonNull("#1.field") MonotonicNonNullConstructorTest2(final Data data) { // reverse the assignments this.object = data.field; this.data = data; } } class MonotonicNonNullConstructorTest3 { static class Data { @MonotonicNonNull Object field; } Data data; Object object; @RequiresNonNull("#1.field") MonotonicNonNullConstructorTest3(final Data dataParam) { // use a parameter name that does not shadow the field this.data = dataParam; this.object = dataParam.field; } } class MonotonicNonNullConstructorTest4 { static class Data { @MonotonicNonNull Object field; } Data data; Object object; @RequiresNonNull("#1.field") MonotonicNonNullConstructorTest4(final Data dataParam) { // use a parameter name that does not shadow the field // and reverse the assignments this.object = dataParam.field; this.data = dataParam; } }