@NotNull
    public static PsiElement createElement(@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);
    }
@NotNull
    public static PsiElement createElement(@NotNull ASTNode node)