blob: 5871c88402773acdc27d269edbb68f0e055e1e59 [file] [log] [blame]
package org.checkerframework.framework.util.typeinference.constraint;
import java.util.Set;
/**
* AFReducer implementations reduce AFConstraints into one or more "simpler" AFConstraints until
* these constraints are irreducible.
*
* @see
* org.checkerframework.framework.util.typeinference.constraint.AFConstraint#isIrreducible(java.util.Set)
* <p>There is one AFReducer for each type of AFConstraint.
*/
public interface AFReducer {
/**
* Determines if the input constraint should be handled by this reducer. If so: Reduces the
* constraint into one or more new constraints. Any new constraint that can still be reduced is
* placed in newConstraints. New irreducible constraints are placed in finish. Return true Return
* false (indicating that some other reducer needs to handle this constraint) If false is
* returned, the reducer should NOT place any constraints in newConstraints or finished
*
* @param constraint the constraint to reduce
* @param newConstraints the new constraints that may still need to be reduced
* @return true if the input constraint was handled by this reducer, false otherwise
*/
public boolean reduce(AFConstraint constraint, Set<AFConstraint> newConstraints);
}