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)16e5dd7070Spatrick SymbolOccurrence::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