boolean (final @NotNull BinaryOperationParser parser) { final PsiBuilder.Marker tempMarker = parser.mark(); PsiBuilder.Marker lastMarker = tempMarker; boolean result = parsePrefixOperation(parser); boolean tempMarkerDeleted = false; while (parser.getPostfixOperators().contains(parser.getTokenType()) && !parser.getWhitespaceTokenSet().contains(parser.rawLookup(-1)) && !parser.isNewLine()) { final PsiBuilder.Marker operationMarker = lastMarker.precede(); if (!tempMarkerDeleted) { tempMarker.drop(); tempMarkerDeleted = true; } lastMarker = operationMarker; parser.advance(); parser.done(operationMarker, parser.getPostfixExpressionElementType()); result = true; } if (!tempMarkerDeleted) { tempMarker.drop(); } return result; }