@Override
  public void advance() {
    final IElementType tokenType = myDelegate.getTokenType();

    if (tokenType == XmlTokenType.XML_COMMENT_CHARACTERS) {
      scanWordsInToken(UsageSearchContext.IN_COMMENTS, false, false);
      advanceTodoItemCountsInToken();
    } else if (tokenType == XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN ||
        tokenType == XmlTokenType.XML_NAME ||
        tokenType == XmlTokenType.XML_TAG_NAME ||
        tokenType == XmlTokenType.XML_DATA_CHARACTERS
      ) {
      scanWordsInToken(UsageSearchContext.IN_PLAIN_TEXT | UsageSearchContext.IN_FOREIGN_LANGUAGES, tokenType ==
                                                                                                   XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN,
                       false);
    } else if (tokenType.getLanguage() != XMLLanguage.INSTANCE &&
      tokenType.getLanguage() != Language.ANY         
    ) {
      boolean inComments = CacheUtil.isInComments(tokenType);
      scanWordsInToken((inComments)?UsageSearchContext.IN_COMMENTS:UsageSearchContext.IN_PLAIN_TEXT | UsageSearchContext.IN_FOREIGN_LANGUAGES, true,
                       false);
      
      if (inComments) advanceTodoItemCountsInToken();
    }
    else if (!XmlFilterLexer.NO_WORDS_TOKEN_SET.contains(tokenType)) {
      scanWordsInToken(UsageSearchContext.IN_PLAIN_TEXT, false, false);
    }

    myDelegate.advance();
  }
@Override
  public void advance()