@@ -20,11 +20,11 @@ import '../source/builder_factory.dart';
2020import '../source/constructor_declaration.dart' ;
2121import '../source/source_factory_builder.dart' ;
2222import '../source/source_field_builder.dart' ;
23- import '../source/source_function_builder.dart' ;
2423import '../source/source_library_builder.dart' ;
2524import 'builder.dart' ;
2625import 'constructor_builder.dart' ;
2726import 'declaration_builders.dart' ;
27+ import 'member_builder.dart' ;
2828import 'omitted_type_builder.dart' ;
2929import 'type_builder.dart' ;
3030import 'variable_builder.dart' ;
@@ -53,8 +53,6 @@ class FormalParameterBuilder extends BuilderImpl
5353 implements VariableBuilder , ParameterBuilder , InferredTypeListener {
5454 static const String noNameSentinel = 'no name sentinel' ;
5555
56- SourceFunctionBuilder ? _parent;
57-
5856 @override
5957 final int fileOffset;
6058
@@ -107,15 +105,8 @@ class FormalParameterBuilder extends BuilderImpl
107105 }
108106
109107 @override
110- SourceFunctionBuilder get parent {
111- assert (_parent != null , "Parent has not been set for $this ." );
112- return _parent! ;
113- }
114-
115- void set parent (SourceFunctionBuilder value) {
116- assert (_parent == null , "Parent has already been set for $this ." );
117- _parent = value;
118- }
108+ // Coverage-ignore(suite): Not run.
109+ Builder ? get parent => null ;
119110
120111 @override
121112 bool get isRequiredPositional => kind.isRequiredPositional;
@@ -200,7 +191,6 @@ class FormalParameterBuilder extends BuilderImpl
200191 fileUri: fileUri,
201192 isExtensionThis: isExtensionThis,
202193 hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer)
203- .._parent = _parent
204194 ..variable = variable;
205195 }
206196
@@ -215,7 +205,6 @@ class FormalParameterBuilder extends BuilderImpl
215205 fileUri: fileUri,
216206 isExtensionThis: isExtensionThis,
217207 hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer)
218- ..parent = parent
219208 ..variable = variable;
220209 } else if (isSuperInitializingFormal) {
221210 return new FormalParameterBuilder (
@@ -227,7 +216,6 @@ class FormalParameterBuilder extends BuilderImpl
227216 fileUri: fileUri,
228217 isExtensionThis: isExtensionThis,
229218 hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer)
230- ..parent = parent
231219 ..variable = variable;
232220 } else {
233221 return this ;
@@ -249,7 +237,8 @@ class FormalParameterBuilder extends BuilderImpl
249237 }
250238 }
251239
252- bool get needsDefaultValuesBuiltAsOutlineExpressions {
240+ static bool needsDefaultValuesBuiltAsOutlineExpressions (
241+ MemberBuilder memberBuilder) {
253242 // For modular compilation we need to include default values for optional
254243 // and named parameters in several cases:
255244 // * for const constructors to enable constant evaluation,
@@ -259,25 +248,27 @@ class FormalParameterBuilder extends BuilderImpl
259248 // in mixin applications, and
260249 // * for factories, to uphold the invariant that optional parameters always
261250 // have default values, even during modular compilation.
262- if (parent is ConstructorBuilder ) {
251+ if (memberBuilder is ConstructorBuilder ) {
263252 return true ;
264- } else if (parent is SourceFactoryBuilder ) {
265- return parent .isFactory;
253+ } else if (memberBuilder is SourceFactoryBuilder ) {
254+ return memberBuilder .isFactory;
266255 } else {
267- return parent .isClassInstanceMember;
256+ return memberBuilder .isClassInstanceMember;
268257 }
269258 }
270259
271260 /// Builds the default value from this [initializerToken] if this is a
272261 /// formal parameter on a const constructor or instance method.
273- void buildOutlineExpressions (SourceLibraryBuilder libraryBuilder) {
274- if (needsDefaultValuesBuiltAsOutlineExpressions) {
262+ void buildOutlineExpressions (SourceLibraryBuilder libraryBuilder,
263+ DeclarationBuilder ? declarationBuilder,
264+ {required bool buildDefaultValue}) {
265+ if (buildDefaultValue) {
275266 if (initializerToken != null ) {
276- final DeclarationBuilder declarationBuilder =
277- parent. declarationBuilder! ;
278- LookupScope scope = declarationBuilder .scope;
279- BodyBuilderContext bodyBuilderContext =
280- new ParameterBodyBuilderContext ( this );
267+ LookupScope scope =
268+ declarationBuilder? .scope ?? // Coverage-ignore(suite): Not run.
269+ libraryBuilder .scope;
270+ BodyBuilderContext bodyBuilderContext = new ParameterBodyBuilderContext (
271+ libraryBuilder, declarationBuilder, this );
281272 BodyBuilder bodyBuilder = libraryBuilder.loader
282273 .createBodyBuilderForOutlineExpression (
283274 libraryBuilder, bodyBuilderContext, scope, fileUri);
0 commit comments