DfaRelation (@NotNull DfaValue dfaLeft, @NotNull RelationType relationType, @NotNull DfaValue dfaRight) { if (dfaLeft instanceof DfaVariableValue || dfaLeft instanceof DfaWrappedValue || dfaLeft instanceof DfaBinOpValue || dfaRight instanceof DfaVariableValue || dfaRight instanceof DfaWrappedValue || dfaRight instanceof DfaBinOpValue) { if (!(dfaLeft instanceof DfaVariableValue || dfaLeft instanceof DfaWrappedValue || dfaLeft instanceof DfaBinOpValue) || (dfaRight instanceof DfaBinOpValue && !(dfaLeft instanceof DfaBinOpValue))) { RelationType flipped = relationType.getFlipped(); return flipped == null ? null : new DfaRelation(dfaRight, dfaLeft, flipped); } } return new DfaRelation(dfaLeft, dfaRight, relationType); }