/*
   * operation? prefixExpression
   */
  private void parsePrefixExpression() {
    //        System.out.println("pre at "  + myBuilder.getTokenText());

    if (at(AT)) {
      if (!parseLocalDeclaration()) {
        PsiBuilder.Marker expression = mark();
        myJetParsing.parseAnnotations(DEFAULT);
        parsePrefixExpression();
        expression.done(ANNOTATED_EXPRESSION);
      }
    } else {
      myBuilder.disableJoiningComplexTokens();
      if (isAtLabelDefinitionOrMissingIdentifier()) {
        myBuilder.restoreJoiningComplexTokensState();
        parseLabeledExpression();
      } else if (atSet(Precedence.PREFIX.getOperations())) {
        PsiBuilder.Marker expression = mark();

        parseOperationReference();

        myBuilder.restoreJoiningComplexTokensState();

        parsePrefixExpression();
        expression.done(PREFIX_EXPRESSION);
      } else {
        myBuilder.restoreJoiningComplexTokensState();
        parsePostfixExpression();
      }
    }
  }
  /*
   * annotatedLambda
   *  : ("@" annotationEntry)* labelDefinition? functionLiteral
   */
  private boolean parseAnnotatedLambda(boolean preferBlock) {
    PsiBuilder.Marker annotated = mark();

    boolean wereAnnotations = myJetParsing.parseAnnotations(DEFAULT);
    PsiBuilder.Marker labeled = mark();

    boolean wasLabel = isAtLabelDefinitionOrMissingIdentifier();
    if (wasLabel) {
      parseLabelDefinition();
    }

    if (!at(LBRACE)) {
      annotated.rollbackTo();
      return false;
    }

    parseFunctionLiteral(preferBlock);

    doneOrDrop(labeled, LABELED_EXPRESSION, wasLabel);
    doneOrDrop(annotated, ANNOTATED_EXPRESSION, wereAnnotations);

    return true;
  }