PsiElement (@NotNull ASTNode node) { final IElementType type = node.getElementType(); if (type == QUERY) { return new JqlQueryImpl(node); } else if (type == OR_CLAUSE) { return new JqlOrClauseImpl(node); } else if (type == AND_CLAUSE) { return new JqlAndClauseImpl(node); } else if (type == NOT_CLAUSE) { return new JqlNotClauseImpl(node); } else if (type == SUB_CLAUSE) { return new JqlSubClauseImpl(node); } else if (type == SIMPLE_CLAUSE) { return new JqlSimpleClauseImpl(node); } else if (type == WAS_CLAUSE) { return new JqlWasClauseImpl(node); } else if (type == CHANGED_CLAUSE) { return new JqlChangedClauseImpl(node); } else if (type == LIST) { return new JqlListImpl(node); } else if (type == ORDER_BY) { return new JqlOrderByImpl(node); } else if (type == IDENTIFIER) { return new JqlIdentifierImpl(node); } else if (type == LITERAL) { return new JqlLiteralImpl(node); } else if (type == FUNCTION_CALL) { return new JqlFunctionCallImpl(node); } else if (type == ARGUMENT_LIST) { return new JqlArgumentListImpl(node); } else if (type == SORT_KEY) { return new JqlSortKeyImpl(node); } else if (type == EMPTY) { return new JqlEmptyValueImpl(node); } else if (type == HISTORY_PREDICATE) { return new JqlHistoryPredicateImpl(node); } return new ASTWrapperPsiElement(node); }