public static PsiElement createElement(ASTNode node) {
      IElementType type = node.getElementType();
      if (type == AND_EXPRESSION) {
        return new JsonPathAndExpressionImpl(node);
      }
      else if (type == ARRAY_VALUE) {
        return new JsonPathArrayValueImpl(node);
      }
      else if (type == BINARY_CONDITIONAL_OPERATOR) {
        return new JsonPathBinaryConditionalOperatorImpl(node);
      }
      else if (type == BOOLEAN_LITERAL) {
        return new JsonPathBooleanLiteralImpl(node);
      }
      else if (type == CONDITIONAL_EXPRESSION) {
        return new JsonPathConditionalExpressionImpl(node);
      }
      else if (type == DIVIDE_EXPRESSION) {
        return new JsonPathDivideExpressionImpl(node);
      }
      else if (type == EVAL_SEGMENT) {
        return new JsonPathEvalSegmentImpl(node);
      }
      else if (type == EXPRESSION_SEGMENT) {
        return new JsonPathExpressionSegmentImpl(node);
      }
      else if (type == FILTER_EXPRESSION) {
        return new JsonPathFilterExpressionImpl(node);
      }
      else if (type == FUNCTION_ARGS_LIST) {
        return new JsonPathFunctionArgsListImpl(node);
      }
      else if (type == FUNCTION_CALL) {
        return new JsonPathFunctionCallImpl(node);
      }
      else if (type == ID) {
        return new JsonPathIdImpl(node);
      }
      else if (type == ID_SEGMENT) {
        return new JsonPathIdSegmentImpl(node);
      }
      else if (type == INDEXES_LIST) {
        return new JsonPathIndexesListImpl(node);
      }
      else if (type == INDEX_EXPRESSION) {
        return new JsonPathIndexExpressionImpl(node);
      }
      else if (type == MINUS_EXPRESSION) {
        return new JsonPathMinusExpressionImpl(node);
      }
      else if (type == MULTIPLY_EXPRESSION) {
        return new JsonPathMultiplyExpressionImpl(node);
      }
      else if (type == NULL_LITERAL) {
        return new JsonPathNullLiteralImpl(node);
      }
      else if (type == NUMBER_LITERAL) {
        return new JsonPathNumberLiteralImpl(node);
      }
      else if (type == OBJECT_PROPERTY) {
        return new JsonPathObjectPropertyImpl(node);
      }
      else if (type == OBJECT_VALUE) {
        return new JsonPathObjectValueImpl(node);
      }
      else if (type == OR_EXPRESSION) {
        return new JsonPathOrExpressionImpl(node);
      }
      else if (type == PARENTHESIZED_EXPRESSION) {
        return new JsonPathParenthesizedExpressionImpl(node);
      }
      else if (type == PATH_EXPRESSION) {
        return new JsonPathPathExpressionImpl(node);
      }
      else if (type == PLUS_EXPRESSION) {
        return new JsonPathPlusExpressionImpl(node);
      }
      else if (type == QUOTED_PATHS_LIST) {
        return new JsonPathQuotedPathsListImpl(node);
      }
      else if (type == REGEX_EXPRESSION) {
        return new JsonPathRegexExpressionImpl(node);
      }
      else if (type == REGEX_LITERAL) {
        return new JsonPathRegexLiteralImpl(node);
      }
      else if (type == ROOT_SEGMENT) {
        return new JsonPathRootSegmentImpl(node);
      }
      else if (type == SLICE_EXPRESSION) {
        return new JsonPathSliceExpressionImpl(node);
      }
      else if (type == STRING_LITERAL) {
        return new JsonPathStringLiteralImpl(node);
      }
      else if (type == UNARY_MINUS_EXPRESSION) {
        return new JsonPathUnaryMinusExpressionImpl(node);
      }
      else if (type == UNARY_NOT_EXPRESSION) {
        return new JsonPathUnaryNotExpressionImpl(node);
      }
      else if (type == WILDCARD_SEGMENT) {
        return new JsonPathWildcardSegmentImpl(node);
      }
      throw new AssertionError("Unknown element type: " + type);
    }
public static PsiElement createElement(ASTNode node)