Skip to content

Commit 34939ac

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Resolve default values of nested parameters of function typed formal parameters.
FAILURE: /((=#is!?}= [NoSuchMethodError: The getter 'nullabilitySuffix' was called on null. Receiver: null Tried calling: nullabilitySuffix, #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5) flutter#1 SubtypeHelper.isSubtypeOf (package:analyzer/src/dart/element/subtype.dart:50:29) flutter#2 TypeSystemImpl.isSubtypeOf2 (package:analyzer/src/dart/element/type_system.dart:1131:27) flutter#3 DartObjectImpl.hasType (package:analyzer/src/dart/constant/value.dart:487:41) flutter#4 DartObjectComputer.typeTest (package:analyzer/src/dart/constant/evaluation.dart:2159:44) #5 ConstantVisitor.visitIsExpression (package:analyzer/src/dart/constant/evaluation.dart:1230:34) flutter#6 IsExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:6463:49) flutter#7 ConstantVisitor.visitConditionalExpression (package:analyzer/src/dart/constant/evaluation.dart:1104:48) flutter#8 ConditionalExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:2265:15) flutter#9 ConstantEvaluationEngine.computeConstantValue (package:analyzer/src/dart/constant/evaluation.dart:159:16) flutter#10 _ConstantWalker.evaluate (package:analyzer/src/dart/constant/compute.dart:57:32) flutter#11 DependencyWalker.walk.strongConnect (package:analyzer/src/summary/link.dart:100:13) flutter#12 DependencyWalker.walk (package:analyzer/src/summary/link.dart:119:18) flutter#13 computeConstants (package:analyzer/src/dart/constant/compute.dart:26:14) flutter#14 LibraryAnalyzer._computeConstants (package:analyzer/src/dart/analysis/library_analyzer.dart:259:5) flutter#15 LibraryAnalyzer.analyzeSync (package:analyzer/src/dart/analysis/library_analyzer.dart:145:5) flutter#16 LibraryAnalyzer.analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:107:12) flutter#17 AnalysisDriver._computeResolvedLibrary2.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1414:65) flutter#18 PerformanceLog.run (package:analyzer/src/dart/analysis/performance_logger.dart:32:15) flutter#19 AnalysisDriver._computeResolvedLibrary2 (package:analyzer/src/dart/analysis/driver.dart:1400:20) flutter#20 AnalysisDriver._computeResolvedLibrary.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1393:15) #21 _rootRun (dart:async/zone.dart:1186:13) #22 _CustomZone.run (dart:async/zone.dart:1090:19) #23 _runZoned (dart:async/zone.dart:1626:10) #24 runZoned (dart:async/zone.dart:1546:10) #25 NullSafetyUnderstandingFlag.enableNullSafetyTypes (package:analyzer/dart/element/null_safety_understanding_flag.dart:42:12) #26 AnalysisDriver._computeResolvedLibrary (package:analyzer/src/dart/analysis/driver.dart:1392:40) #27 AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:962:22) #28 AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2013:24) Change-Id: I1d5482390a7d76cccbfbdf1dd871f9473ce2826a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175944 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent d2e5d47 commit 34939ac

File tree

3 files changed

+80
-13
lines changed

3 files changed

+80
-13
lines changed

pkg/analyzer/lib/src/summary2/default_value_resolver.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ class DefaultValueResolver {
9898
}
9999

100100
void _parameter(ParameterElementImpl parameter) {
101+
// If a function typed parameter, process nested parameters.
102+
for (var localParameter in parameter.parameters) {
103+
_parameter(localParameter);
104+
}
105+
101106
var node = _defaultParameter(parameter);
102107
if (node == null) return;
103108

pkg/analyzer/test/src/summary/element_text.dart

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -301,16 +301,17 @@ class _ElementWriter {
301301
var initializers = (e as ConstructorElementImpl).constantInitializers;
302302
if (withFullyResolvedAst) {
303303
buffer.writeln(';');
304-
if (initializers != null && initializers.isNotEmpty) {
305-
_withIndent(() {
304+
_withIndent(() {
305+
if (initializers != null && initializers.isNotEmpty) {
306306
_writelnWithIndent('constantInitializers');
307307
_withIndent(() {
308308
for (var initializer in initializers) {
309309
_writeResolvedNode(initializer);
310310
}
311311
});
312-
});
313-
}
312+
}
313+
_writeParameterElementDefaultValues(e.parameters);
314+
});
314315
} else {
315316
if (initializers != null) {
316317
writeList(' : ', '', initializers, ', ', writeNode);
@@ -407,6 +408,12 @@ class _ElementWriter {
407408
writeBodyModifiers(e);
408409

409410
buffer.writeln(' {}');
411+
412+
if (withFullyResolvedAst) {
413+
_withIndent(() {
414+
_writeParameterElementDefaultValues(e.parameters);
415+
});
416+
}
410417
}
411418

412419
void writeIf(bool flag, String str) {
@@ -530,6 +537,7 @@ class _ElementWriter {
530537
_withIndent(() {
531538
_writeResolvedTypeParameters(e.typeParameters);
532539
_writeResolvedMetadata(e.metadata);
540+
_writeParameterElementDefaultValues(e.parameters);
533541
});
534542
}
535543
}
@@ -828,15 +836,17 @@ class _ElementWriter {
828836
writeName(e);
829837
writeCodeRange(e);
830838

831-
if (e.parameters.isNotEmpty) {
832-
buffer.write('/*');
833-
writeList('(', ')', e.parameters, ', ', writeParameterElement);
834-
buffer.write('*/');
835-
}
839+
if (!withFullyResolvedAst) {
840+
if (e.parameters.isNotEmpty) {
841+
buffer.write('/*');
842+
writeList('(', ')', e.parameters, ', ', writeParameterElement);
843+
buffer.write('*/');
844+
}
836845

837-
if (defaultValue != null) {
838-
buffer.write(defaultValueSeparator);
839-
writeNode(defaultValue);
846+
if (defaultValue != null) {
847+
buffer.write(defaultValueSeparator);
848+
writeNode(defaultValue);
849+
}
840850
}
841851

842852
buffer.write(closeString);
@@ -1194,6 +1204,30 @@ class _ElementWriter {
11941204
buffer.writeln(line);
11951205
}
11961206

1207+
void _writeParameterElementDefaultValues(
1208+
List<ParameterElement> parameters, {
1209+
String enclosingNames = '',
1210+
}) {
1211+
for (var parameter in parameters) {
1212+
if (parameter is DefaultParameterElementImpl) {
1213+
var defaultValue = parameter.constantInitializer;
1214+
if (defaultValue != null) {
1215+
_writelnWithIndent(enclosingNames + parameter.name);
1216+
_withIndent(() {
1217+
_writeResolvedNode(defaultValue);
1218+
});
1219+
}
1220+
}
1221+
var subParameters = parameter.parameters;
1222+
_withIndent(() {
1223+
_writeParameterElementDefaultValues(
1224+
subParameters,
1225+
enclosingNames: enclosingNames + parameter.name + '::',
1226+
);
1227+
});
1228+
}
1229+
}
1230+
11971231
void _writeResolvedMetadata(List<ElementAnnotation> metadata) {
11981232
if (metadata.isNotEmpty) {
11991233
_writelnWithIndent('metadata');

pkg/analyzer/test/src/summary/resynthesize_common.dart

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4832,7 +4832,7 @@ class A {
48324832
r'''
48334833
class A {
48344834
final int _f;
4835-
const A([int f = 0]);
4835+
const A([int f]);
48364836
constantInitializers
48374837
ConstructorFieldInitializer
48384838
equals: =
@@ -4844,6 +4844,10 @@ class A {
48444844
staticElement: self::@class::A::@field::_f
48454845
staticType: null
48464846
token: _f
4847+
f
4848+
IntegerLiteral
4849+
literal: 0
4850+
staticType: int
48474851
}
48484852
''',
48494853
withFullyResolvedAst: true);
@@ -5600,6 +5604,30 @@ class B {
56005604
''');
56015605
}
56025606

5607+
test_defaultValue_inFunctionTypedFormalParameter() async {
5608+
var library = await checkLibrary('''
5609+
void f( g({a: 0 is int}) ) {}
5610+
''');
5611+
checkElementText(
5612+
library,
5613+
r'''
5614+
void f(dynamic Function({dynamic a}) g) {}
5615+
g::a
5616+
IsExpression
5617+
expression: IntegerLiteral
5618+
literal: 0
5619+
staticType: int
5620+
staticType: bool
5621+
type: TypeName
5622+
name: SimpleIdentifier
5623+
staticElement: dart:core::@class::int
5624+
staticType: null
5625+
token: int
5626+
type: int
5627+
''',
5628+
withFullyResolvedAst: true);
5629+
}
5630+
56035631
test_defaultValue_refersToExtension_method_inside() async {
56045632
var library = await checkLibrary('''
56055633
class A {}

0 commit comments

Comments
 (0)