Author: kadircet Date: Tue Feb 26 06:23:12 2019 New Revision: 354878 URL: http://llvm.org/viewvc/llvm-project?rev=354878&view=rev Log: [clang][Index] Visit UsingDecls and generate USRs for them
Summary: Add indexing of UsingDecl itself. Also enable generation of USRs for UsingDecls, using the qualified name of the decl. Reviewers: ilya-biryukov, akyrtzi Subscribers: arphaman, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D58340 Modified: cfe/trunk/lib/Index/IndexDecl.cpp cfe/trunk/lib/Index/IndexSymbol.cpp cfe/trunk/lib/Index/USRGeneration.cpp cfe/trunk/test/Index/usrs.cpp cfe/trunk/unittests/Index/IndexTests.cpp Modified: cfe/trunk/lib/Index/IndexDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/IndexDecl.cpp?rev=354878&r1=354877&r2=354878&view=diff ============================================================================== --- cfe/trunk/lib/Index/IndexDecl.cpp (original) +++ cfe/trunk/lib/Index/IndexDecl.cpp Tue Feb 26 06:23:12 2019 @@ -580,9 +580,10 @@ public: } bool VisitUsingDecl(const UsingDecl *D) { + IndexCtx.handleDecl(D); + const DeclContext *DC = D->getDeclContext()->getRedeclContext(); const NamedDecl *Parent = dyn_cast<NamedDecl>(DC); - IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent, D->getLexicalDeclContext()); for (const auto *I : D->shadows()) Modified: cfe/trunk/lib/Index/IndexSymbol.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/IndexSymbol.cpp?rev=354878&r1=354877&r2=354878&view=diff ============================================================================== --- cfe/trunk/lib/Index/IndexSymbol.cpp (original) +++ cfe/trunk/lib/Index/IndexSymbol.cpp Tue Feb 26 06:23:12 2019 @@ -316,6 +316,10 @@ SymbolInfo index::getSymbolInfo(const De Info.Lang = SymbolLanguage::CXX; Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; break; + case Decl::Using: + Info.Kind = SymbolKind::Using; + Info.Lang = SymbolLanguage::CXX; + break; case Decl::Binding: Info.Kind = SymbolKind::Variable; Info.Lang = SymbolLanguage::CXX; Modified: cfe/trunk/lib/Index/USRGeneration.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/USRGeneration.cpp?rev=354878&r1=354877&r2=354878&view=diff ============================================================================== --- cfe/trunk/lib/Index/USRGeneration.cpp (original) +++ cfe/trunk/lib/Index/USRGeneration.cpp Tue Feb 26 06:23:12 2019 @@ -111,7 +111,12 @@ public: } void VisitUsingDecl(const UsingDecl *D) { - IgnoreResults = true; + VisitDeclContext(D->getDeclContext()); + Out << "@UD@"; + + bool EmittedDeclName = !EmitDeclName(D); + assert(EmittedDeclName && "EmitDeclName can not fail for UsingDecls"); + (void)EmittedDeclName; } bool ShouldGenerateLocation(const NamedDecl *D); Modified: cfe/trunk/test/Index/usrs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/usrs.cpp?rev=354878&r1=354877&r2=354878&view=diff ============================================================================== --- cfe/trunk/test/Index/usrs.cpp (original) +++ cfe/trunk/test/Index/usrs.cpp Tue Feb 26 06:23:12 2019 @@ -158,7 +158,7 @@ __m128 vectorOverload(__m128 f); // CHECK: usrs.cpp c:@NA@foo_alias // CHECK-NOT: foo // CHECK: usrs.cpp c:@NA@foo_alias2 -// CHECK-NOT: ClsB +// CHECK: usrs.cpp c:@UD@ClsB Extent=[64:1 - 64:16] // CHECK: usrs.cpp c:@NA@foo_alias3 // CHECK: usrs.cpp c:@aN Extent=[68:1 - 73:2] // CHECK: usrs.cpp c:usrs.cpp@aN@S@RDar9371763_Foo Extent=[69:1 - 72:2] Modified: cfe/trunk/unittests/Index/IndexTests.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Index/IndexTests.cpp?rev=354878&r1=354877&r2=354878&view=diff ============================================================================== --- cfe/trunk/unittests/Index/IndexTests.cpp (original) +++ cfe/trunk/unittests/Index/IndexTests.cpp Tue Feb 26 06:23:12 2019 @@ -57,6 +57,7 @@ struct TestSymbol { std::string QName; Position WrittenPos; Position DeclPos; + SymbolInfo SymInfo; // FIXME: add more information. }; @@ -78,6 +79,7 @@ public: if (!ND) return true; TestSymbol S; + S.SymInfo = getSymbolInfo(D); S.QName = ND->getQualifiedNameAsString(); S.WrittenPos = Position::fromSourceLocation(Loc, AST->getSourceManager()); S.DeclPos = @@ -140,6 +142,7 @@ using testing::UnorderedElementsAre; MATCHER_P(QName, Name, "") { return arg.QName == Name; } MATCHER_P(WrittenAt, Pos, "") { return arg.WrittenPos == Pos; } MATCHER_P(DeclAt, Pos, "") { return arg.DeclPos == Pos; } +MATCHER_P(Kind, SymKind, "") { return arg.SymInfo.Kind == SymKind; } TEST(IndexTest, Simple) { auto Index = std::make_shared<Indexer>(); @@ -240,6 +243,20 @@ TEST(IndexTest, IndexTypeParmDecls) { Contains(QName("Foo::C")), Contains(QName("Foo::NoRef")))); } +TEST(IndexTest, UsingDecls) { + std::string Code = R"cpp( + void foo(int bar); + namespace std { + using ::foo; + } + )cpp"; + auto Index = std::make_shared<Indexer>(); + IndexingOptions Opts; + tooling::runToolOnCode(new IndexAction(Index, Opts), Code); + EXPECT_THAT(Index->Symbols, + Contains(AllOf(QName("std::foo"), Kind(SymbolKind::Using)))); +} + } // namespace } // namespace index } // namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits