Search in sources :

Example 1 with PMap

use of org.sonar.java.collections.PMap in project sonar-java by SonarSource.

the class ProgramState method cleanupConstraints.

public ProgramState cleanupConstraints(Collection<SymbolicValue> protectedSymbolicValues) {
    class CleanAction implements BiConsumer<SymbolicValue, ConstraintsByDomain> {

        boolean newProgramState = false;

        PMap<SymbolicValue, ConstraintsByDomain> newConstraints = constraints;

        PMap<SymbolicValue, Integer> newReferences = references;

        @Override
        public void accept(SymbolicValue symbolicValue, ConstraintsByDomain constraintPMap) {
            constraintPMap.forEach((domain, constraint) -> {
                if (!protectedSymbolicValues.contains(symbolicValue) && !isReachable(symbolicValue, newReferences) && isDisposable(symbolicValue, constraint) && !inStack(stack, symbolicValue)) {
                    newProgramState = true;
                    ConstraintsByDomain removed = newConstraints.get(symbolicValue).remove(domain);
                    if (removed.isEmpty()) {
                        newConstraints = newConstraints.remove(symbolicValue);
                    } else {
                        newConstraints = newConstraints.put(symbolicValue, removed);
                    }
                    newReferences = newReferences.remove(symbolicValue);
                }
            });
        }
    }
    CleanAction cleanAction = new CleanAction();
    constraints.forEach(cleanAction);
    return cleanAction.newProgramState ? new ProgramState(values, cleanAction.newReferences, cleanAction.newConstraints, visitedPoints, stack, exitSymbolicValue) : this;
}
Also used : ConstraintsByDomain(org.sonar.java.se.constraint.ConstraintsByDomain) PMap(org.sonar.java.collections.PMap) SymbolicValue(org.sonar.java.se.symbolicvalues.SymbolicValue) BinarySymbolicValue(org.sonar.java.se.symbolicvalues.BinarySymbolicValue) RelationalSymbolicValue(org.sonar.java.se.symbolicvalues.RelationalSymbolicValue) BiConsumer(java.util.function.BiConsumer)

Aggregations

BiConsumer (java.util.function.BiConsumer)1 PMap (org.sonar.java.collections.PMap)1 ConstraintsByDomain (org.sonar.java.se.constraint.ConstraintsByDomain)1 BinarySymbolicValue (org.sonar.java.se.symbolicvalues.BinarySymbolicValue)1 RelationalSymbolicValue (org.sonar.java.se.symbolicvalues.RelationalSymbolicValue)1 SymbolicValue (org.sonar.java.se.symbolicvalues.SymbolicValue)1