diff --git a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart index f12e3ada0a0..5dcc5a0ed0d 100644 --- a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart +++ b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart @@ -78,6 +78,24 @@ void f() {} expect(symbolsResponse2.error, isNull); } + Future test_class_unnamed() async { + const content = ''' +class { + void foo() {} +} +'''; + var code = TestCode.parse(content); + newFile(mainFilePath, code.code); + + failTestOnErrorDiagnostic = false; + await provideConfig(initialize, { + 'includeDependenciesInWorkspaceSymbols': false, + }); + + var symbols = await getWorkspaceSymbols('foo'); + expect(symbols, isEmpty); + } + Future test_constructor_primary_named_noBody() async { const content = ''' /*[0*/class /*[1*/UniqueClassName.namedUnique(int a)/*1]*/;/*0]*/ @@ -292,6 +310,24 @@ class UniqueClassName { expect(await getWorkspaceSymbols('LocalClass12345'), isNotEmpty); } + Future test_enum_unnamed() async { + const content = ''' +enum { + v +} +'''; + var code = TestCode.parse(content); + newFile(mainFilePath, code.code); + + failTestOnErrorDiagnostic = false; + await provideConfig(initialize, { + 'includeDependenciesInWorkspaceSymbols': false, + }); + + var symbols = await getWorkspaceSymbols('v'); + expect(symbols, isEmpty); + } + Future test_extensions() async { const content = ''' extension StringExtensions on String {} @@ -348,6 +384,22 @@ extension type E(int it) { expect(namedExtensions.containerName, 'E'); } + Future test_extensionType_unnamed() async { + const content = ''' +extension type (int it) {} +'''; + var code = TestCode.parse(content); + newFile(mainFilePath, code.code); + + failTestOnErrorDiagnostic = false; + await provideConfig(initialize, { + 'includeDependenciesInWorkspaceSymbols': false, + }); + + var symbols = await getWorkspaceSymbols('it'); + expect(symbols, isEmpty); + } + Future test_fullMatch() async { const content = ''' [!String topLevel = ''!]; @@ -425,6 +477,24 @@ class MyClass { ); } + Future test_mixin_unnamed() async { + const content = ''' +mixin { + void foo() {} +} +'''; + var code = TestCode.parse(content); + newFile(mainFilePath, code.code); + + failTestOnErrorDiagnostic = false; + await provideConfig(initialize, { + 'includeDependenciesInWorkspaceSymbols': false, + }); + + var symbols = await getWorkspaceSymbols('foo'); + expect(symbols, isEmpty); + } + /// Ensure that multiple projects/drivers do not result in duplicate results /// for things referenced in both projects. Future test_overlappingDrivers() async { diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart index f51e3b47a06..10bf4d76cc2 100644 --- a/pkg/analyzer/lib/src/dart/analysis/search.dart +++ b/pkg/analyzer/lib/src/dart/analysis/search.dart @@ -1315,12 +1315,14 @@ class _FindLibraryDeclarations { void _addClasses(List elements) { for (var i = 0; i < elements.length; i++) { var element = elements[i]; - _addDeclaration(element, element.name!); - _addGetters(element.getters); - _addConstructors(element.constructors); - _addFields(element.fields); - _addMethods(element.methods); - _addSetters(element.setters); + if (element.name case var name?) { + _addDeclaration(element, name); + _addGetters(element.getters); + _addConstructors(element.constructors); + _addFields(element.fields); + _addMethods(element.methods); + _addSetters(element.setters); + } } } diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart index 31209d86394..ceaba1e70da 100644 --- a/pkg/analyzer/test/src/dart/analysis/search_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart @@ -325,6 +325,29 @@ testFile ); } + test_declarations_class_unnamed() async { + await resolveTestCode(''' +class { + void foo() {} +} +'''); + var results = WorkspaceSymbols(); + await FindDeclarations( + [driver], + results, + 'foo', + null, + ownedFiles: analysisContextCollection.ownedFiles, + performance: performance, + ).compute(); + assertDeclarationsText( + results, + {testFile: 'testFile'}, + r''' +''', + ); + } + test_declarations_discover() async { var aaaPackageRootPath = '$packagesRootPath/aaa'; var bbbPackageRootPath = '$packagesRootPath/bbb'; @@ -417,6 +440,29 @@ testFile ); } + test_declarations_enum_unnamed() async { + await resolveTestCode(''' +enum { + foo +} +'''); + var results = WorkspaceSymbols(); + await FindDeclarations( + [driver], + results, + 'foo', + null, + ownedFiles: analysisContextCollection.ownedFiles, + performance: performance, + ).compute(); + assertDeclarationsText( + results, + {testFile: 'testFile'}, + r''' +''', + ); + } + test_declarations_extension() async { await resolveTestCode(''' extension E on int { @@ -509,6 +555,27 @@ testFile ); } + test_declarations_extensionType_unnamed() async { + await resolveTestCode(''' +extension type (int foo) {} +'''); + var results = WorkspaceSymbols(); + await FindDeclarations( + [driver], + results, + 'foo', + null, + ownedFiles: analysisContextCollection.ownedFiles, + performance: performance, + ).compute(); + assertDeclarationsText( + results, + {testFile: 'testFile'}, + r''' +''', + ); + } + test_declarations_fuzzyMatch() async { await resolveTestCode(''' class A {} @@ -603,6 +670,29 @@ testFile ); } + test_declarations_mixin_unnamed() async { + await resolveTestCode(''' +mixin { + void foo() {} +} +'''); + var results = WorkspaceSymbols(); + await FindDeclarations( + [driver], + results, + 'foo', + null, + ownedFiles: analysisContextCollection.ownedFiles, + performance: performance, + ).compute(); + assertDeclarationsText( + results, + {testFile: 'testFile'}, + r''' +''', + ); + } + test_declarations_onlyForFile() async { newFile('$testPackageLibPath/a.dart', 'class A {}'); var b = newFile('$testPackageLibPath/b.dart', 'class B {}');