From 31922b8c57518810db978caf602868b72aae1554 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Wed, 22 Sep 2021 17:53:10 +0000 Subject: [PATCH] Fix an invalid null check in InlineMethodRefactoring. Saw it failing in the crash log. Change-Id: I6cf715aeb6f41e405af58a00b69b8742fd7c5ed0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/214182 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- .../src/services/refactoring/inline_method.dart | 16 +++++++++------- .../services/refactoring/inline_method_test.dart | 11 +++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart index f3e4b67ec3c..1f66fe647e4 100644 --- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart +++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart @@ -147,13 +147,15 @@ Set _getNamesConflictingAt(AstNode node) { // local variables and functions { var localsRange = _getLocalsConflictingRange(node); - var enclosingExecutable = getEnclosingExecutableNode(node)!; - var visibleRangeMap = VisibleRangesComputer.forNode(enclosingExecutable); - visibleRangeMap.forEach((element, elementRange) { - if (elementRange.intersects(localsRange)) { - result.add(element.displayName); - } - }); + var enclosingExecutable = getEnclosingExecutableNode(node); + if (enclosingExecutable != null) { + var visibleRangeMap = VisibleRangesComputer.forNode(enclosingExecutable); + visibleRangeMap.forEach((element, elementRange) { + if (elementRange.intersects(localsRange)) { + result.add(element.displayName); + } + }); + } } // fields { diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart index 4a0f5519869..35d678c81d0 100644 --- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart +++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart @@ -1739,6 +1739,17 @@ void f(bool p, bool p2, bool p3) { '''); } + Future test_target_topLevelVariable() async { + await indexTestUnit(r''' +int get test => 42; +var a = test; +'''); + _createRefactoring('test =>'); + return _assertSuccessfulRefactoring(r''' +var a = 42; +'''); + } + Future _assertConditionsError(String message) async { var status = await refactoring.checkAllConditions(); assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,