From 940d7effbdab047afd0122b5d9bab6fdbbf48dd7 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Sat, 8 Aug 2020 01:22:53 +0000 Subject: [PATCH] Fix for crash in AddMissingEnumCaseClauses. R=brianwilkerson@google.com, pquitslund@google.com Change-Id: I0dc8c3158eb4b46247e415ff36c33991598bce9c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/157861 Reviewed-by: Phil Quitslund Reviewed-by: Brian Wilkerson --- .../dart/add_missing_enum_case_clauses.dart | 4 +++ .../add_missing_enum_case_clauses_test.dart | 28 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart index 77d58d7849e..d4426a0e717 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart @@ -16,7 +16,11 @@ class AddMissingEnumCaseClauses extends CorrectionProducer { @override Future compute(ChangeBuilder builder) async { + if (node is! SwitchStatement) { + return; + } var statement = node as SwitchStatement; + String enumName; var enumConstantNames = []; var expressionType = statement.expression.staticType; diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart index 41407c019b2..09f61edd534 100644 --- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart +++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:analysis_server/src/services/correction/fix.dart'; +import 'package:analyzer/error/error.dart'; import 'package:analyzer/src/error/codes.dart'; import 'package:analyzer_plugin/utilities/fixes/fixes.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -20,17 +21,21 @@ class AddMissingEnumCaseClausesTest extends FixProcessorTest { @override FixKind get kind => DartFixKind.ADD_MISSING_ENUM_CASE_CLAUSES; - Future assertHasFixWithFilter(String expected) async { - var noError = true; - await assertHasFix(expected, errorFilter: (error) { - if (noError && + bool Function(AnalysisError) get _filter { + var hasError = false; + return (error) { + if (!hasError && error.errorCode == StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH) { - noError = false; + hasError = true; return true; } return false; - }); + }; + } + + Future assertHasFixWithFilter(String expected) async { + await assertHasFix(expected, errorFilter: _filter); } Future test_empty() async { @@ -59,6 +64,17 @@ void f(E e) { '''); } + Future test_incomplete_switchStatement() async { + await resolveTestUnit(r''' +enum E {a, b, c} + +void f(E e) { + switch(e +} +'''); + await assertNoFix(errorFilter: _filter); + } + Future test_nonEmpty() async { await resolveTestUnit(''' enum E {a, b, c}