PsiElement (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); }