@Override
  public boolean process(XmlTag tag) {
    if (myHistory.contains(tag)) {
      myIsCyclic = true;
      return false;
    }
    myHistory.add(tag);

    if (XsltSupport.isVariableOrParam(tag)) {
      processVarOrParam(tag);
    }
    else if (XsltSupport.isTemplate(tag, false)) {
      processTemplate(tag);
    }
    else if (XsltSupport.isIncludeOrImport(tag)) {
      if (XsltSupport.isImport(tag) && !followImport()) {
        return shouldContinue();
      }
      final PsiFile containingFile = tag.getContainingFile();
      assert containingFile != null;
      PsiFile file = containingFile.getOriginalFile();

      final PsiFile psiFile = ResolveUtil.resolveFile(tag.getAttribute("href", null), file);
      if (psiFile != null && XsltSupport.isXsltFile(psiFile)) {
        processExternalFile(psiFile, tag);
      }
    }
    else {
      processTag(tag);
    }
    return shouldContinue();
  }
@Override
  public boolean process(XmlTag tag)