| commit | 2d2390469460acaba2fa368dd3c9f141dedef50c | [log] [tgz] |
|---|---|---|
| author | Konstantin Shcheglov <scheglov@google.com> | Fri Jan 03 08:35:48 2025 -0800 |
| committer | Commit Queue <dart-scoped@luci-project-accounts.iam.gserviceaccount.com> | Fri Jan 03 08:35:48 2025 -0800 |
| tree | d49417c277641dbc3a9eaa6e1eec471a5ee0860b | |
| parent | 88f8f3ecda93b77dc5a0fa1afff296ce20387cfb [diff] |
Issue 57018. Fix for inlining a getter when it is the target of a prefixed identifier. Bug: https://github.com/dart-lang/sdk/issues/57018 Change-Id: I5a421d21e12b6b830796383a5dcb97dd01f3dac1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402800 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart index 2f14237..662caeb 100644 --- a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart +++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
@@ -761,14 +761,16 @@ Expression usage = _node; Expression? target; var cascade = false; - if (nodeParent is PrefixedIdentifier) { - var propertyAccess = nodeParent; - usage = propertyAccess; - target = propertyAccess.prefix; + if (nodeParent case PrefixedIdentifier prefixedIdentifier) { + if (prefixedIdentifier.prefix == _node) { + usage = prefixedIdentifier.prefix; + } else { + usage = prefixedIdentifier; + target = prefixedIdentifier.prefix; + } cascade = false; } - if (nodeParent is PropertyAccess) { - var propertyAccess = nodeParent; + if (nodeParent case PropertyAccess propertyAccess) { usage = propertyAccess; target = propertyAccess.realTarget; cascade = propertyAccess.isCascaded;
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/inline_method_test.dart index c10af04..4c37a5c 100644 --- a/pkg/analysis_server/test/services/refactoring/legacy/inline_method_test.dart +++ b/pkg/analysis_server/test/services/refactoring/legacy/inline_method_test.dart
@@ -1112,6 +1112,23 @@ '''); } + Future<void> test_getter_topLevel_prefixedIdentifier_target() async { + await indexTestUnit(r''' +void f() { + test.isEven; +} + +int get test => [0].first; +'''); + _createRefactoring('test =>'); + // validate change + return _assertSuccessfulRefactoring(r''' +void f() { + [0].first.isEven; +} +'''); + } + Future<void> test_initialMode_all() async { await indexTestUnit(r''' test(a, b) {