boolean (@NotNull DfaVariableValue var, @NotNull DfType originalType, @NotNull DfType newType) { recordVariableType(var, newType); for (Map.Entry<DerivedVariableDescriptor, DfType> entry : newType.getDerivedValues().entrySet()) { if (!meetDfType(entry.getKey().createValue(getFactory(), var), entry.getValue())) { return false; } } if (!updateDependentVariables(var, newType)) return false; if (!correctRelatedValues(var, newType)) return false; if (newType instanceof DfConstantType && !propagateConstant(var, (DfConstantType<?>)newType)) return false; return true; }