void (final @NotNull PyWhileStatement node) { final Instruction instruction = myBuilder.startNode(node); final var mainPartResults = visitPyConditionalPart(node.getWhilePart(), node); final var branchingPoints = mainPartResults.getSecond(); // Loop edges if (myBuilder.prevInstruction != null) { myBuilder.addEdge(myBuilder.prevInstruction, instruction); } myBuilder.checkPending(instruction); final var isStaticallyTrue = mainPartResults.getThird() == Boolean.TRUE; final var elsePart = node.getElsePart(); if (elsePart == null) { if (!isStaticallyTrue) { for (Pair<PsiElement, Instruction> pair : branchingPoints) { myBuilder.addPendingEdge(node, pair.getSecond()); } } } else { final var elsePartInstruction = new ConditionalInstructionImpl(myBuilder, elsePart, mainPartResults.getFirst(), false); myBuilder.prevInstruction = null; myBuilder.addNode(elsePartInstruction); addTypeGuardAssertions(mainPartResults.getFirst(), false); if (!isStaticallyTrue) { for (Pair<PsiElement, Instruction> pair : branchingPoints) { myBuilder.addEdge(pair.getSecond(), elsePartInstruction); } } elsePart.accept(this); myBuilder.addPendingEdge(node, myBuilder.prevInstruction); } myBuilder.flowAbrupted(); }