void (@NotNull PsiExpression lOperand, @Nullable PsiExpression rOperand, @NotNull IElementType signTokenType) { if (rOperand != null) { myStartJumpRoles.push(BranchingInstruction.Role.END); myEndJumpRoles.push(BranchingInstruction.Role.END); PsiElement then = signTokenType == JavaTokenType.OROR ? myStartStatementStack.peekElement() : rOperand; boolean thenAtStart = signTokenType != JavaTokenType.OROR || myStartStatementStack.peekAtStart(); myStartStatementStack.pushStatement(then, thenAtStart); PsiElement elseS = signTokenType == JavaTokenType.ANDAND ? myEndStatementStack.peekElement() : rOperand; boolean elseAtStart = signTokenType != JavaTokenType.ANDAND || myEndStatementStack.peekAtStart(); myEndStatementStack.pushStatement(elseS, elseAtStart); } lOperand.accept(this); if (rOperand != null) { myStartStatementStack.popStatement(); myEndStatementStack.popStatement(); myStartJumpRoles.pop(); myEndJumpRoles.pop(); } }