All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.checkerframework.common.value.ValueChecker Maven / Gradle / Ivy

Go to download

The Checker Framework enhances Java's type system to make it more powerful and useful. This lets software developers detect and prevent errors in their Java programs. The Checker Framework includes compiler plug-ins ("checkers") that find bugs or verify their absence. It also permits you to write your own compiler plug-ins.

There is a newer version: 3.44.0
Show newest version
package org.checkerframework.common.value;

import java.util.LinkedHashSet;
import org.checkerframework.common.basetype.BaseTypeChecker;
import org.checkerframework.common.basetype.BaseTypeVisitor;
import org.checkerframework.common.value.util.Range;
import org.checkerframework.framework.source.SupportedOptions;

/**
 * The Constant Value Checker is a constant propagation analysis: for each variable, it determines
 * whether that variable's value can be known at compile time.
 *
 * 

The Constant Value Checker has no dependencies, but it does trust {@code * org.checkerframework.checker.index.qual.Positive} annotations from the Index Checker. This means * that if the Value Checker is run on code containing {@code Positive} annotations, then the Index * Checker also needs to be run to guarantee soundness. * * @checker_framework.manual #constant-value-checker Constant Value Checker */ @SupportedOptions({ ValueChecker.REPORT_EVAL_WARNS, ValueChecker.IGNORE_RANGE_OVERFLOW, ValueChecker.NON_NULL_STRINGS_CONCATENATION }) public class ValueChecker extends BaseTypeChecker { /** * Command-line option to warn the user if a @StaticallyExecutable method can't load and run at * compile time. */ public static final String REPORT_EVAL_WARNS = "reportEvalWarns"; /** Command-line option to ignore the possibility of overflow for range annotations. */ public static final String IGNORE_RANGE_OVERFLOW = "ignoreRangeOverflow"; /** Command-line option that assumes most expressions in String concatenations can be null. */ public static final String NON_NULL_STRINGS_CONCATENATION = "nonNullStringsConcatenation"; @Override protected BaseTypeVisitor createSourceVisitor() { return new ValueVisitor(this); } @Override protected LinkedHashSet> getImmediateSubcheckerClasses() { // Don't call super otherwise MethodVal will be added as a subChecker // which creates a circular dependency. return new LinkedHashSet<>(); } @Override public boolean shouldResolveReflection() { // Because this checker is a subchecker of MethodVal, // reflection can't be resolved. return false; } @Override public void typeProcessingOver() { // Reset ignore overflow. Range.ignoreOverflow = false; super.typeProcessingOver(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy