From eea52d35f8ec910df2ed60c8bea1cb4d4ab17bfa Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Wed, 16 Mar 2022 18:14:14 +0000 Subject: [PATCH] Issue 48583. Inherit evaluationResult in DefaultSuperFormalParameterElementImpl. Bug: https://github.com/dart-lang/sdk/issues/48583 Change-Id: I6217adb5d1e96d2fbb40e4033b9ed62025cd60ac Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/237622 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- .../lib/src/dart/element/element.dart | 14 ++++++++++ ..._constructor_param_type_mismatch_test.dart | 28 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index 11e0af25b1c..05beef22442 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -1617,6 +1617,20 @@ class DefaultSuperFormalParameterElementImpl return null; } + @override + EvaluationResultImpl? get evaluationResult { + if (constantInitializer != null) { + return super.evaluationResult; + } + + var superConstructorParameter = this.superConstructorParameter; + if (superConstructorParameter is ParameterElementImpl) { + return superConstructorParameter.evaluationResult; + } + + return null; + } + DartObject? get _superConstructorParameterDefaultValue { var superDefault = superConstructorParameter?.computeConstantValue(); var superDefaultType = superDefault?.type; diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart index af72941603a..67cdfa083ad 100644 --- a/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart +++ b/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart @@ -315,6 +315,34 @@ var v = const A('foo'); ]); } + test_superFormalParameter_explicit() async { + await assertNoErrorsInCode(r''' +class A { + const A({int a = 0}); +} + +class B extends A { + static const f = B(); + + const B({super.a = 2}); +} +'''); + } + + test_superFormalParameter_inherited() async { + await assertNoErrorsInCode(r''' +class A { + const A({int a = 0}); +} + +class B extends A { + static const f = B(); + + const B({super.a}); +} +'''); + } + test_unknown_conditionalExpression_unknownCondition() async { await assertNoErrorsInCode(r''' const bool kIsWeb = identical(0, 0.0);