// fix the "B" part of names like A::B::C if B is our target
void TypeRenameTransform::processQualifierLoc(NestedNameSpecifierLoc NNSL,
                                              bool forceRewriteMacro)
{
  while (NNSL) {
    auto NNS = NNSL.getNestedNameSpecifier();
    auto NNSK = NNS->getKind();
    if (NNSK == NestedNameSpecifier::TypeSpec ||
        NNSK == NestedNameSpecifier::TypeSpecWithTemplate) {
      processTypeLoc(NNSL.getTypeLoc(), forceRewriteMacro);
    } 
    else if (NNSK == NestedNameSpecifier::Namespace) {
      std::string newName;
      if (nameMatches(NNS->getAsNamespace(), newName, true)) {
        renameLocation(NNSL.getLocalBeginLoc(), newName);
      }      
      processTypeLoc(NNSL.getTypeLoc(), forceRewriteMacro);
    }
    else if (NNSK == NestedNameSpecifier::NamespaceAlias) {
      std::string newName;
      if (nameMatches(NNS->getAsNamespaceAlias(), newName, true)) {
        renameLocation(NNSL.getLocalBeginLoc(), newName);
      }      
      processTypeLoc(NNSL.getTypeLoc(), forceRewriteMacro);
    }
    // else {
    //   auto srcrange = NNSL.getSourceRange();
    //   llvm::errs() << indent()
    //                << "==> ??? (" << ii << ") "
    //                << " range=[" << range(srcrange)
    //                << "\n";
    //   break;
    // }

    NNSL = NNSL.getPrefix();
  }
}