checker.src.org.checkerframework.checker.nullness.NullnessStore Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of checker Show documentation
Show all versions of checker Show documentation
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.
package org.checkerframework.checker.nullness;
import org.checkerframework.checker.initialization.InitializationStore;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.checker.nullness.qual.PolyNull;
import org.checkerframework.dataflow.cfg.CFGVisualizer;
import org.checkerframework.framework.flow.CFAbstractAnalysis;
import org.checkerframework.framework.flow.CFAbstractStore;
/**
* Behaves like {@link InitializationStore}, but additionally tracks whether
* {@link PolyNull} is known to be {@link Nullable}.
*
* @author Stefan Heule
*/
public class NullnessStore extends
InitializationStore {
protected boolean isPolyNullNull;
public NullnessStore(
CFAbstractAnalysis analysis,
boolean sequentialSemantics) {
super(analysis, sequentialSemantics);
isPolyNullNull = false;
}
public NullnessStore(NullnessStore s) {
super(s);
isPolyNullNull = s.isPolyNullNull;
}
@Override
public NullnessStore leastUpperBound(NullnessStore other) {
NullnessStore lub = super.leastUpperBound(other);
if (isPolyNullNull == other.isPolyNullNull) {
lub.isPolyNullNull = isPolyNullNull;
} else {
lub.isPolyNullNull = false;
}
return lub;
}
@Override
protected boolean supersetOf(CFAbstractStore o) {
if (!(o instanceof InitializationStore)) {
return false;
}
NullnessStore other = (NullnessStore) o;
if (other.isPolyNullNull != isPolyNullNull) {
return false;
}
return super.supersetOf(other);
}
@Override
protected void internalVisualize(CFGVisualizer viz) {
super.internalVisualize(viz);
viz.visualizeStoreKeyVal("isPolyNonNull", isPolyNullNull);
}
public boolean isPolyNullNull() {
return isPolyNullNull;
}
public void setPolyNullNull(boolean isPolyNullNull) {
this.isPolyNullNull = isPolyNullNull;
}
}