@@ -362,10 +362,9 @@ TEST_F(SymbolFilePDBTests, TestSimpleClassTypes) {
362362 SymbolFilePDB *symfile =
363363 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
364364 llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
365- llvm::DenseSet<SymbolFile *> searched_files;
366- TypeMap results;
367- symfile->FindTypes (ConstString (" Class" ), CompilerDeclContext (), 0 ,
368- searched_files, results);
365+ TypeResults query_results;
366+ symfile->FindTypes (TypeQuery (" Class" ), query_results);
367+ TypeMap &results = query_results.GetTypeMap ();
369368 EXPECT_EQ (1u , results.GetSize ());
370369 lldb::TypeSP udt_type = results.GetTypeAtIndex (0 );
371370 EXPECT_EQ (ConstString (" Class" ), udt_type->GetName ());
@@ -383,7 +382,6 @@ TEST_F(SymbolFilePDBTests, TestNestedClassTypes) {
383382 SymbolFilePDB *symfile =
384383 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
385384 llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
386- llvm::DenseSet<SymbolFile *> searched_files;
387385 TypeMap results;
388386
389387 auto clang_ast_ctx_or_err =
@@ -394,8 +392,10 @@ TEST_F(SymbolFilePDBTests, TestNestedClassTypes) {
394392 llvm::dyn_cast_or_null<TypeSystemClang>(clang_ast_ctx_or_err->get ());
395393 EXPECT_NE (nullptr , clang_ast_ctx);
396394
397- symfile->FindTypes (ConstString (" Class" ), CompilerDeclContext (), 0 ,
398- searched_files, results);
395+ TypeResults query_results;
396+ symfile->FindTypes (TypeQuery (" Class" ), query_results);
397+ TypeMap &results = query_results.GetTypeMap ();
398+
399399 EXPECT_EQ (1u , results.GetSize ());
400400
401401 auto Class = results.GetTypeAtIndex (0 );
@@ -413,10 +413,11 @@ TEST_F(SymbolFilePDBTests, TestNestedClassTypes) {
413413 // compiler type for both, but `FindTypes` may return more than one type
414414 // (with the same compiler type) because the symbols have different IDs.
415415
416- TypeMap more_results;
417416 auto ClassCompilerDeclCtx = CompilerDeclContext (clang_ast_ctx, ClassDeclCtx);
418- symfile->FindTypes (ConstString (" NestedClass" ), ClassCompilerDeclCtx, 0 ,
419- searched_files, more_results);
417+ TypeResults query_results;
418+ symfile->FindTypes (TypeQuery (ClassCompilerDeclCtx, " NestedClass" ),
419+ query_results);
420+ TypeMap &more_results = query_results.GetTypeMap ();
420421 EXPECT_LE (1u , more_results.GetSize ());
421422
422423 lldb::TypeSP udt_type = more_results.GetTypeAtIndex (0 );
@@ -437,9 +438,6 @@ TEST_F(SymbolFilePDBTests, TestClassInNamespace) {
437438 SymbolFilePDB *symfile =
438439 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
439440 llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
440- llvm::DenseSet<SymbolFile *> searched_files;
441- TypeMap results;
442-
443441 auto clang_ast_ctx_or_err =
444442 symfile->GetTypeSystemForLanguage (lldb::eLanguageTypeC_plus_plus);
445443 ASSERT_THAT_EXPECTED (clang_ast_ctx_or_err, llvm::Succeeded ());
@@ -456,12 +454,14 @@ TEST_F(SymbolFilePDBTests, TestClassInNamespace) {
456454 symfile->ParseDeclsForContext (CompilerDeclContext (
457455 clang_ast_ctx, static_cast <clang::DeclContext *>(tu)));
458456
459- auto ns_namespace =
457+ auto ns_namespace_decl_ctx =
460458 symfile->FindNamespace (ConstString (" NS" ), CompilerDeclContext (), true );
461- EXPECT_TRUE (ns_namespace .IsValid ());
459+ EXPECT_TRUE (ns_namespace_decl_ctx .IsValid ());
462460
463- symfile->FindTypes (ConstString (" NSClass" ), ns_namespace, 0 , searched_files,
464- results);
461+ TypeResults query_results;
462+ symfile->FindTypes (TypeQuery (ns_namespace_decl_ctx, " NSClass" ),
463+ query_results);
464+ TypeMap &results = query_results.GetTypeMap ();
465465 EXPECT_EQ (1u , results.GetSize ());
466466
467467 lldb::TypeSP udt_type = results.GetTypeAtIndex (0 );
@@ -482,12 +482,12 @@ TEST_F(SymbolFilePDBTests, TestEnumTypes) {
482482 SymbolFilePDB *symfile =
483483 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
484484 llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
485- llvm::DenseSet<SymbolFile *> searched_files;
486485 const char *EnumsToCheck[] = {" Enum" , " ShortEnum" };
487486 for (auto Enum : EnumsToCheck) {
488- TypeMap results;
489- symfile->FindTypes (ConstString (Enum), CompilerDeclContext (), 0 ,
490- searched_files, results);
487+
488+ TypeResults query_results;
489+ symfile->FindTypes (TypeQuery (Enum), query_results);
490+ TypeMap &results = query_results.GetTypeMap ();
491491 EXPECT_EQ (1u , results.GetSize ());
492492 lldb::TypeSP enum_type = results.GetTypeAtIndex (0 );
493493 EXPECT_EQ (ConstString (Enum), enum_type->GetName ());
@@ -527,16 +527,15 @@ TEST_F(SymbolFilePDBTests, TestTypedefs) {
527527 SymbolFilePDB *symfile =
528528 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
529529 llvm::pdb::IPDBSession &session = symfile->GetPDBSession ();
530- llvm::DenseSet<SymbolFile *> searched_files;
531530 TypeMap results;
532531
533532 const char *TypedefsToCheck[] = {" ClassTypedef" , " NSClassTypedef" ,
534533 " FuncPointerTypedef" ,
535534 " VariadicFuncPointerTypedef" };
536535 for (auto Typedef : TypedefsToCheck) {
537- TypeMap results ;
538- symfile->FindTypes (ConstString (Typedef), CompilerDeclContext (), 0 ,
539- searched_files, results );
536+ TypeResults query_results ;
537+ symfile->FindTypes (TypeQuery (Typedef), query_results);
538+ TypeMap &results = query_results. GetTypeMap ( );
540539 EXPECT_EQ (1u , results.GetSize ());
541540 lldb::TypeSP typedef_type = results.GetTypeAtIndex (0 );
542541 EXPECT_EQ (ConstString (Typedef), typedef_type->GetName ());
@@ -578,22 +577,24 @@ TEST_F(SymbolFilePDBTests, TestMaxMatches) {
578577
579578 SymbolFilePDB *symfile =
580579 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
581- llvm::DenseSet<SymbolFile *> searched_files;
582- TypeMap results;
583- const ConstString name (" ClassTypedef" );
584- symfile->FindTypes (name, CompilerDeclContext (), 0 , searched_files, results);
585- // Try to limit ourselves from 1 to 10 results, otherwise we could
586- // be doing this thousands of times. The idea is just to make sure
587- // that for a variety of values, the number of limited results
588- // always comes out to the number we are expecting.
589- uint32_t num_results = results.GetSize ();
590- uint32_t iterations = std::min (num_results, 10u );
591- for (uint32_t i = 1 ; i <= iterations; ++i) {
592- TypeMap more_results;
593- symfile->FindTypes (name, CompilerDeclContext (), i, searched_files,
594- more_results);
595- uint32_t num_limited_results = more_results.GetSize ();
596- EXPECT_EQ (i, num_limited_results);
580+
581+ // Make a type query object we can use for all types and for one type
582+ TypeQuery query (" ClassTypedef" );
583+ {
584+ // Find all types that match
585+ TypeResults query_results;
586+ symfile->FindTypes (query, query_results);
587+ TypeMap &results = query_results.GetTypeMap ();
588+ EXPECT_GT (results.GetSize (), 1u );
589+ }
590+
591+ {
592+ // Find a single type that matches
593+ query.SetFindOne (true );
594+ TypeResults query_results;
595+ symfile->FindTypes (query, query_results);
596+ TypeMap &results = query_results.GetTypeMap ();
597+ EXPECT_EQ (results.GetSize (), 1u );
597598 }
598599}
599600
@@ -604,10 +605,10 @@ TEST_F(SymbolFilePDBTests, TestNullName) {
604605
605606 SymbolFilePDB *symfile =
606607 static_cast <SymbolFilePDB *>(module ->GetSymbolFile ());
607- llvm::DenseSet<SymbolFile *> searched_files;
608- TypeMap results ;
609- symfile->FindTypes (ConstString (), CompilerDeclContext (), 0 , searched_files,
610- results );
608+
609+ TypeResults query_results ;
610+ symfile->FindTypes (TypeQuery ( llvm::StringRef ()), query_results);
611+ TypeMap &results = query_results. GetTypeMap ( );
611612 EXPECT_EQ (0u , results.GetSize ());
612613}
613614
0 commit comments