From 668754285b438f499e8d91f85bbf1cdfa0b14ef1 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Fri, 24 Jan 2025 09:54:59 -0800 Subject: [PATCH] Elements. Fixes after https://dart-review.googlesource.com/c/sdk/+/405660 Bug: https://buganizer.corp.google.com/issues/392069763 Change-Id: Iecbfc55433890c4e5e606dc9b1f2bc005b9b6684 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405800 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- .../dart/element/inheritance_manager3.dart | 2 +- .../resolver/extension_member_resolver.dart | 13 ++-- .../resolution/extension_method_test.dart | 67 +++++++++++++++++++ 3 files changed, 75 insertions(+), 7 deletions(-) diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart index 9335bdb3d1a..ce5321d8ae9 100644 --- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart +++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart @@ -1397,7 +1397,7 @@ class Name { } if (name.startsWith('_')) { - var libraryUri = element.firstFragment.libraryFragment!.source.uri; + var libraryUri = element.library2!.uri; return Name(libraryUri, name); } else { return Name(null, name); diff --git a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart index 7f5393ad1d9..84b9a53b4bf 100644 --- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart +++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart @@ -91,12 +91,13 @@ class ExtensionMemberResolver { /// returns [ExtensionResolutionError.ambiguous]. ExtensionResolutionResult findExtension( TypeImpl type, SyntacticEntity nameEntity, Name name) { - var aaa = _resolver.libraryFragment.accessibleExtensions2; - var bbb = aaa.havingMemberWithBaseName(name).toList(); - var extensions = bbb.applicableTo( - targetLibrary: _resolver.definingLibrary, - targetType: type, - ); + var extensions = _resolver.libraryFragment.accessibleExtensions2 + .havingMemberWithBaseName(name) + .toList() + .applicableTo( + targetLibrary: _resolver.definingLibrary, + targetType: type, + ); if (extensions.isEmpty) { return ExtensionResolutionError.none; diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart index 3ebaaaa3d90..bc166ffa214 100644 --- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart @@ -1653,6 +1653,73 @@ MethodInvocation '''); } + test_instance_method_fromInstance_privateName() async { + await assertNoErrorsInCode(''' +extension E on int { + void _foo() {} +} + +void f() { + 0._foo(); +} +'''); + var invocation = findNode.methodInvocation('_foo();'); + assertResolvedNodeText(invocation, r''' +MethodInvocation + target: IntegerLiteral + literal: 0 + staticType: int + operator: . + methodName: SimpleIdentifier + token: _foo + staticElement: ::@extension::E::@method::_foo + element: ::@extension::E::@method::_foo#element + staticType: void Function() + argumentList: ArgumentList + leftParenthesis: ( + rightParenthesis: ) + staticInvokeType: void Function() + staticType: void +'''); + } + + test_instance_method_fromInstance_privateName_inPart() async { + newFile('$testPackageLibPath/a.dart', r''' +part of 'test.dart'; + +extension E on int { + void _foo() {} +} +'''); + + await assertNoErrorsInCode(''' +part 'a.dart'; + +void f() { + 0._foo(); +} +'''); + + var invocation = findNode.methodInvocation('_foo();'); + assertResolvedNodeText(invocation, r''' +MethodInvocation + target: IntegerLiteral + literal: 0 + staticType: int + operator: . + methodName: SimpleIdentifier + token: _foo + staticElement: ::@fragment::package:test/a.dart::@extension::E::@method::_foo + element: ::@fragment::package:test/a.dart::@extension::E::@method::_foo#element + staticType: void Function() + argumentList: ArgumentList + leftParenthesis: ( + rightParenthesis: ) + staticInvokeType: void Function() + staticType: void +'''); + } + test_instance_method_specificSubtypeMatchLocal() async { await assertNoErrorsInCode(''' class A {}