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);