You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.1 KiB

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package codetoanalyze.java.nullsafe;
import javax.annotation.Nullable;
/**
* The rule: if a nullable field is non-conditionally initialized in all constructors, it is
* overannotated.
*/
public class FieldOverAnnotated {
@Nullable String initializedInAllConstructorsIsBAD;
// if there are branches, but the field is initilized in all branches,
// it is still overannotated.
@Nullable String initilizedInAllConstructorsAndAllBranchesIsBAD;
@Nullable String initiliazedInSomeConstructorsIsOK;
@Nullable String conditionallyInitializedIsOK;
@Nullable String notInitializedIsOK;
// False positive: we set it is @Nullable so this is NOT overannotated but the issue is recorded.
@Nullable String FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK;
FieldOverAnnotated(int a) {
initializedInAllConstructorsIsBAD = "";
FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK = "";
if (a == 0) {
// We initialize it in the other constructor, but here
// we initialize it only conditionally, hence @Nullable annotation is justified.
conditionallyInitializedIsOK = "";
}
// check that initialization from both branches still counts as overannotated
if (a == 1) {
initilizedInAllConstructorsAndAllBranchesIsBAD = "";
} else {
initilizedInAllConstructorsAndAllBranchesIsBAD = "";
}
initiliazedInSomeConstructorsIsOK = "";
}
FieldOverAnnotated(int a, int b) {
initializedInAllConstructorsIsBAD = "";
FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK = "";
initilizedInAllConstructorsAndAllBranchesIsBAD = "";
conditionallyInitializedIsOK = "";
}
public void setToNull() {
// False positive: we set it is @Nullable so this is NOT overannotated but
// the issue is recorded.
FP_initializedInAllConstructorsButSetToNullInAPublicMethodShouldBeOK = null;
}
}