private VariableNullability updateVariableNullability( ImmutableSubstitution<ImmutableTerm> nonNestedSubstitution, VariableNullability childNullability) { // TODO: find a better name ImmutableMap<Variable, Variable> nullabilityBindings = nonNestedSubstitution.getImmutableMap().entrySet().stream() .flatMap(e -> evaluateTermNullability(e.getValue(), childNullability, e.getKey()) .map(Stream::of) .orElseGet(Stream::empty)) .collect(ImmutableCollectors.toMap()); return childNullability.appendNewVariables(nullabilityBindings); }