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