void (@NotNull PsiDoWhileStatement statement) { startElement(statement); PsiStatement body = statement.getBody(); myStartStatementStack.pushStatement(body == null ? statement : body, true); myEndStatementStack.pushStatement(statement, false); if (body != null) { body.accept(this); } PsiExpression condition = statement.getCondition(); if (condition != null) { condition.accept(this); } int offset = myCurrentFlow.getStartOffset(statement); Object loopCondition = myConstantEvaluationHelper.computeConstantExpression(statement.getCondition()); if (loopCondition instanceof Boolean) { if (((Boolean)loopCondition).booleanValue()) { myCurrentFlow.addInstruction(new GoToInstruction(offset)); } else { emitEmptyInstruction(); } } else { Instruction instruction = new ConditionalGoToInstruction(offset, statement.getCondition()); myCurrentFlow.addInstruction(instruction); } myStartStatementStack.popStatement(); myEndStatementStack.popStatement(); finishElement(statement); }