1e5dd7070Spatrick //===--- SymbolOccurrences.cpp - Clang refactoring library ----------------===// 2e5dd7070Spatrick // 3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information. 5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e5dd7070Spatrick // 7e5dd7070Spatrick //===----------------------------------------------------------------------===// 8e5dd7070Spatrick 9e5dd7070Spatrick #include "clang/Tooling/Refactoring/Rename/SymbolOccurrences.h" 10e5dd7070Spatrick #include "clang/Tooling/Refactoring/Rename/SymbolName.h" 11e5dd7070Spatrick #include "llvm/ADT/STLExtras.h" 12e5dd7070Spatrick 13e5dd7070Spatrick using namespace clang; 14e5dd7070Spatrick using namespace tooling; 15e5dd7070Spatrick SymbolOccurrence(const SymbolName & Name,OccurrenceKind Kind,ArrayRef<SourceLocation> Locations)16e5dd7070SpatrickSymbolOccurrence::SymbolOccurrence(const SymbolName &Name, OccurrenceKind Kind, 17e5dd7070Spatrick ArrayRef<SourceLocation> Locations) 18e5dd7070Spatrick : Kind(Kind) { 19e5dd7070Spatrick ArrayRef<std::string> NamePieces = Name.getNamePieces(); 20e5dd7070Spatrick assert(Locations.size() == NamePieces.size() && 21e5dd7070Spatrick "mismatching number of locations and lengths"); 22e5dd7070Spatrick assert(!Locations.empty() && "no locations"); 23e5dd7070Spatrick if (Locations.size() == 1) { 24*a9ac8606Spatrick new (&SingleRange) SourceRange( 25e5dd7070Spatrick Locations[0], Locations[0].getLocWithOffset(NamePieces[0].size())); 26e5dd7070Spatrick return; 27e5dd7070Spatrick } 28e5dd7070Spatrick MultipleRanges = std::make_unique<SourceRange[]>(Locations.size()); 29*a9ac8606Spatrick NumRanges = Locations.size(); 30e5dd7070Spatrick for (const auto &Loc : llvm::enumerate(Locations)) { 31e5dd7070Spatrick MultipleRanges[Loc.index()] = SourceRange( 32e5dd7070Spatrick Loc.value(), 33e5dd7070Spatrick Loc.value().getLocWithOffset(NamePieces[Loc.index()].size())); 34e5dd7070Spatrick } 35e5dd7070Spatrick } 36