@Override
  public void visitElement(@NotNull PsiElement element) {
    final IElementType elementType = element.getNode().getElementType();
    if (elementType != XPathTokenTypes.STAR && XPath2TokenTypes.KEYWORDS.contains(elementType)) {
      if (element.getPrevSibling() == null) return;
      final PsiElement leaf = PsiTreeUtil.prevLeaf(element);
      PsiElement number;
      if (leaf != null && (number = leaf.getParent()) instanceof XPathNumber && ((XPathNumber)number).getXPathVersion() == XPathVersion.V2) {
        AnnotationBuilder builder =
          myHolder.newAnnotation(HighlightSeverity.ERROR,
                                 XPathBundle.message("annotator.error.number.literal.must.be.followed.by.whitespace.in.xpath"));

        final XPathBinaryExpression expression = PsiTreeUtil.getParentOfType(number, XPathBinaryExpression.class, true);
        if (expression != null) {
          final XPathExpression lOperand = expression.getLOperand();
          if (number == lOperand) {
            final XPathExpression rOperand = expression.getROperand();
            if (rOperand != null) {
              final String display = number.getText() + " " + expression.getOperationSign();
              final String replacement = display + " " + rOperand.getText();

              assert PsiEquivalenceUtil.areElementsEquivalent(expression, XPathChangeUtil.createExpression(expression, replacement));
              builder = builder.withFix(new ExpressionReplacementFix(replacement, display, expression));
            }
          }
          else if (number == expression.getROperand()) {
            final XPathExpression next = PsiTreeUtil.getParentOfType(PsiTreeUtil.nextLeaf(expression), XPathExpression.class, true);
            if (next instanceof XPathBinaryExpression left) {
              final XPathExpression rOperand = left.getROperand();
              if (rOperand != null && lOperand != null) {
                final String display = number.getText() + " " + left.getOperationSign();
                final String replacement =
                  lOperand.getText() + " " + expression.getOperationSign() + " " + display + " " + rOperand.getText();

                assert PsiEquivalenceUtil.areElementsEquivalent(next, XPathChangeUtil.createExpression(next, replacement));
                builder = builder.withFix(new ExpressionReplacementFix(replacement, display, next));
              }
            }
          }
        }
        builder.create();
      }
    }

    super.visitElement(element);
  }
@Override
  public void visitElement(@NotNull PsiElement element)