DfType (@NotNull DfaValue value) { if (value instanceof DfaBinOpValue binOpValue) { return getBinOpRange(binOpValue); } if (value instanceof DfaVariableValue variableValue) { DfType type = getRecordedType(variableValue); return type != null ? type : variableValue.getInherentType(); } if (value instanceof DfaWrappedValue wrappedValue) { DfType wrappedValueType = getDfType(wrappedValue.getWrappedValue()); return wrappedValue.getSpecialField().asDfType(value.getDfType(), wrappedValueType); } return value.getDfType(); }