/* * Copyright (c) 2017-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package genrule.module2; import genrule.annotations.Nullable; import genrule.module1.Class1; import genrule.module1.SkipImplementationClass1; public class Class2 { @Nullable Object field; void localNPE2Bad() { Object obj = null; obj.toString(); } void interTargetNPEBad() { Object obj = Class1.returnsNull(); obj.toString(); } void interTargetAbstractNPEBad(Class1 class1) { Object obj = class1.abstractMayReturnNull(); obj.toString(); } void interTargetNativeNPEBad(Class1 class1) { Object obj = class1.nativeMayReturnNull(); obj.toString(); } void followMethodDeclarationOnlyBad(SkipImplementationClass1 obj1) { Object obj2 = obj1.annotatedNullable(); obj2.toString(); } void followMethodDeclarationOnlyOk(SkipImplementationClass1 obj1) { Object obj2 = obj1.notAnnotatedNullable(); obj2.toString(); } void dereferenceLocalNullableFieldBad() { field.toString(); } void dereferenceInterTargetField1Bad(Class1 class1) { class1.field1.toString(); } int dereferenceInterTargetField2Bad(Class1 class1) { return class1.field2.x; } void dereferenceUnannotatedMethodReturningNullBad(Class1 class1) { class1.unannotatedReturnNull().toString(); } static class Sub extends Class1.Sub { @Override public @Nullable Object subtypingInconsistency(Object object) { return null; } } }