void (@NotNull PsiPrefixExpression expression) { startElement(expression); PsiExpression operand = PsiUtil.skipParenthesizedExprDown(expression.getOperand()); if (operand != null) { IElementType operationSign = expression.getOperationTokenType(); if (operationSign == JavaTokenType.EXCL) { // negation inverts jump targets PsiElement topStartStatement = myStartStatementStack.peekElement(); boolean topAtStart = myStartStatementStack.peekAtStart(); myStartStatementStack.pushStatement(myEndStatementStack.peekElement(), myEndStatementStack.peekAtStart()); myEndStatementStack.pushStatement(topStartStatement, topAtStart); } operand.accept(this); if (operationSign == JavaTokenType.EXCL) { // negation inverts jump targets myStartStatementStack.popStatement(); myEndStatementStack.popStatement(); } if (operand instanceof PsiReferenceExpression && (operationSign == JavaTokenType.PLUSPLUS || operationSign == JavaTokenType.MINUSMINUS)) { PsiVariable variable = getUsedVariable((PsiReferenceExpression)operand); if (variable != null) { generateWriteInstruction(variable); } } } finishElement(expression); }