blob: d35fcdcb19259f8135d571de80d0df571f482797 [file] [log] [blame]
package org.checkerframework.checker.initialization;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.VariableTree;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedSet;
import org.checkerframework.common.basetype.BaseTypeChecker;
/**
* Tracks whether a value is initialized (all its fields are set), and checks that values are
* initialized before being used. Implements the freedom-before-commitment scheme for
* initialization, augmented by type frames.
*
* @checker_framework.manual #initialization-checker Initialization Checker
*/
public abstract class InitializationChecker extends BaseTypeChecker {
/** Create a new InitializationChecker. */
protected InitializationChecker() {}
@Override
public SortedSet<String> getSuppressWarningsPrefixes() {
SortedSet<String> result = super.getSuppressWarningsPrefixes();
// "fbc" is for backward compatibility only.
// Notes:
// * "fbc" suppresses *all* warnings, not just those related to initialization. See
// https://checkerframework.org/manual/#initialization-checking-suppressing-warnings .
// * "initialization" is not a checkername/prefix.
result.add("fbc");
return result;
}
/** Returns a list of all fields of the given class. */
public static List<VariableTree> getAllFields(ClassTree clazz) {
List<VariableTree> fields = new ArrayList<>();
for (Tree t : clazz.getMembers()) {
if (t.getKind() == Tree.Kind.VARIABLE) {
VariableTree vt = (VariableTree) t;
fields.add(vt);
}
}
return fields;
}
}