1 //===--- SymbolOccurrences.cpp - Clang refactoring library ----------------===//
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
7 //===----------------------------------------------------------------------===//
9 #include "clang/Tooling/Refactoring/Rename/SymbolOccurrences.h"
10 #include "clang/Tooling/Refactoring/Rename/SymbolName.h"
11 #include "llvm/ADT/STLExtras.h"
13 using namespace clang
;
14 using namespace tooling
;
16 SymbolOccurrence::SymbolOccurrence(const SymbolName
&Name
, OccurrenceKind Kind
,
17 ArrayRef
<SourceLocation
> Locations
)
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 new (&SingleRange
) SourceRange(
25 Locations
[0], Locations
[0].getLocWithOffset(NamePieces
[0].size()));
28 MultipleRanges
= std::make_unique
<SourceRange
[]>(Locations
.size());
29 NumRanges
= Locations
.size();
30 for (const auto &Loc
: llvm::enumerate(Locations
)) {
31 MultipleRanges
[Loc
.index()] = SourceRange(
33 Loc
.value().getLocWithOffset(NamePieces
[Loc
.index()].size()));