Skip to content

Commit

Permalink
Resolve default values of nested parameters of function typed formal …
Browse files Browse the repository at this point in the history
…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]>
  • Loading branch information
scheglov authored and [email protected] committed Dec 14, 2020
1 parent d2e5d47 commit 34939ac
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 13 deletions.
5 changes: 5 additions & 0 deletions pkg/analyzer/lib/src/summary2/default_value_resolver.dart
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ class DefaultValueResolver {
}

void _parameter(ParameterElementImpl parameter) {
// If a function typed parameter, process nested parameters.
for (var localParameter in parameter.parameters) {
_parameter(localParameter);
}

var node = _defaultParameter(parameter);
if (node == null) return;

Expand Down
58 changes: 46 additions & 12 deletions pkg/analyzer/test/src/summary/element_text.dart
Original file line number Diff line number Diff line change
Expand Up @@ -301,16 +301,17 @@ class _ElementWriter {
var initializers = (e as ConstructorElementImpl).constantInitializers;
if (withFullyResolvedAst) {
buffer.writeln(';');
if (initializers != null && initializers.isNotEmpty) {
_withIndent(() {
_withIndent(() {
if (initializers != null && initializers.isNotEmpty) {
_writelnWithIndent('constantInitializers');
_withIndent(() {
for (var initializer in initializers) {
_writeResolvedNode(initializer);
}
});
});
}
}
_writeParameterElementDefaultValues(e.parameters);
});
} else {
if (initializers != null) {
writeList(' : ', '', initializers, ', ', writeNode);
Expand Down Expand Up @@ -407,6 +408,12 @@ class _ElementWriter {
writeBodyModifiers(e);

buffer.writeln(' {}');

if (withFullyResolvedAst) {
_withIndent(() {
_writeParameterElementDefaultValues(e.parameters);
});
}
}

void writeIf(bool flag, String str) {
Expand Down Expand Up @@ -530,6 +537,7 @@ class _ElementWriter {
_withIndent(() {
_writeResolvedTypeParameters(e.typeParameters);
_writeResolvedMetadata(e.metadata);
_writeParameterElementDefaultValues(e.parameters);
});
}
}
Expand Down Expand Up @@ -828,15 +836,17 @@ class _ElementWriter {
writeName(e);
writeCodeRange(e);

if (e.parameters.isNotEmpty) {
buffer.write('/*');
writeList('(', ')', e.parameters, ', ', writeParameterElement);
buffer.write('*/');
}
if (!withFullyResolvedAst) {
if (e.parameters.isNotEmpty) {
buffer.write('/*');
writeList('(', ')', e.parameters, ', ', writeParameterElement);
buffer.write('*/');
}

if (defaultValue != null) {
buffer.write(defaultValueSeparator);
writeNode(defaultValue);
if (defaultValue != null) {
buffer.write(defaultValueSeparator);
writeNode(defaultValue);
}
}

buffer.write(closeString);
Expand Down Expand Up @@ -1194,6 +1204,30 @@ class _ElementWriter {
buffer.writeln(line);
}

void _writeParameterElementDefaultValues(
List<ParameterElement> parameters, {
String enclosingNames = '',
}) {
for (var parameter in parameters) {
if (parameter is DefaultParameterElementImpl) {
var defaultValue = parameter.constantInitializer;
if (defaultValue != null) {
_writelnWithIndent(enclosingNames + parameter.name);
_withIndent(() {
_writeResolvedNode(defaultValue);
});
}
}
var subParameters = parameter.parameters;
_withIndent(() {
_writeParameterElementDefaultValues(
subParameters,
enclosingNames: enclosingNames + parameter.name + '::',
);
});
}
}

void _writeResolvedMetadata(List<ElementAnnotation> metadata) {
if (metadata.isNotEmpty) {
_writelnWithIndent('metadata');
Expand Down
30 changes: 29 additions & 1 deletion pkg/analyzer/test/src/summary/resynthesize_common.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4832,7 +4832,7 @@ class A {
r'''
class A {
final int _f;
const A([int f = 0]);
const A([int f]);
constantInitializers
ConstructorFieldInitializer
equals: =
Expand All @@ -4844,6 +4844,10 @@ class A {
staticElement: self::@class::A::@field::_f
staticType: null
token: _f
f
IntegerLiteral
literal: 0
staticType: int
}
''',
withFullyResolvedAst: true);
Expand Down Expand Up @@ -5600,6 +5604,30 @@ class B {
''');
}

test_defaultValue_inFunctionTypedFormalParameter() async {
var library = await checkLibrary('''
void f( g({a: 0 is int}) ) {}
''');
checkElementText(
library,
r'''
void f(dynamic Function({dynamic a}) g) {}
g::a
IsExpression
expression: IntegerLiteral
literal: 0
staticType: int
staticType: bool
type: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::int
staticType: null
token: int
type: int
''',
withFullyResolvedAst: true);
}

test_defaultValue_refersToExtension_method_inside() async {
var library = await checkLibrary('''
class A {}
Expand Down

0 comments on commit 34939ac

Please sign in to comment.