package edu.umd.cs.findbugs.ba.npe; import java.util.HashSet; import java.util.Set; import edu.umd.cs.findbugs.ba.Location; /** * Collected information about a single value number observed at one or more * locations to be both definitely-null and unconditionally dereferenced. */ public class NullValueUnconditionalDeref { private boolean alwaysOnExceptionPath; private boolean alwaysFieldValue; private boolean alwaysMethodReturnValue; private boolean alwaysReadlineValue; private Set<Location> derefLocationSet; private Set<IsNullValue> values = new HashSet<IsNullValue>(); public NullValueUnconditionalDeref() { this.alwaysOnExceptionPath = true; this.alwaysMethodReturnValue = true; this.alwaysFieldValue = true; this.alwaysReadlineValue = true; this.derefLocationSet = new HashSet<Location>(); } /** * @param isNullValue * @param unconditionalDerefLocationSet */ public void add(IsNullValue isNullValue, Set<Location> unconditionalDerefLocationSet) { if (!isNullValue.isException()) { alwaysOnExceptionPath = false; } if (!isNullValue.isFieldValue()) alwaysFieldValue = false; if (!isNullValue.isReturnValue()) { alwaysMethodReturnValue = false; } if (!isNullValue.isReadlineValue()) { alwaysReadlineValue = false; } values.add(isNullValue); derefLocationSet.addAll(unconditionalDerefLocationSet); } /** * @return Returns the derefLocationSet. */ public Set<Location> getDerefLocationSet() { return derefLocationSet; } /** * @return Returns the alwaysOnExceptionPath. */ public boolean isAlwaysOnExceptionPath() { return alwaysOnExceptionPath; } /** * @return Returns the alwaysMethodReturnValue. */ public boolean isMethodReturnValue() { return alwaysMethodReturnValue; } /** * @return Returns the alwaysMethodReturnValue. */ public boolean isReadlineValue() { return alwaysReadlineValue; } /** * @return Returns the alwaysFieldValue. */ public boolean isFieldValue() { return alwaysFieldValue; } }