@@ -34,10 +34,18 @@ ConstructorBuilder constructorNamed(
3434
3535/// Various types of modifiers for methods.
3636class MethodModifier implements ValidMethodMember {
37- static const MethodModifier asAsync = const MethodModifier ._('async' , false );
38- static const MethodModifier asAsyncStar =
39- const MethodModifier ._('async' , true );
40- static const MethodModifier asSyncStar = const MethodModifier ._('sync' , true );
37+ static const MethodModifier asAsync = const MethodModifier ._(
38+ 'async' ,
39+ false ,
40+ );
41+ static const MethodModifier asAsyncStar = const MethodModifier ._(
42+ 'async' ,
43+ true ,
44+ );
45+ static const MethodModifier asSyncStar = const MethodModifier ._(
46+ 'sync' ,
47+ true ,
48+ );
4149
4250 final String _keyword;
4351
@@ -237,6 +245,7 @@ abstract class MethodBuilder
237245 /// Creates a new [MethodBuilder] .
238246 factory MethodBuilder (
239247 String name, {
248+ bool asAbstract: false ,
240249 MethodModifier modifier,
241250 ExpressionBuilder returns,
242251 TypeBuilder returnType,
@@ -248,12 +257,14 @@ abstract class MethodBuilder
248257 returnType,
249258 null ,
250259 modifier,
260+ asAbstract,
251261 );
252262 } else {
253263 return new _MethodBuilderImpl (
254264 name,
255265 modifier: modifier,
256266 returns: returnType,
267+ asAbstract: asAbstract,
257268 );
258269 }
259270 }
@@ -263,6 +274,7 @@ abstract class MethodBuilder
263274 MethodModifier modifier,
264275 ExpressionBuilder returns,
265276 TypeBuilder returnType,
277+ bool asAbstract: false ,
266278 }) {
267279 if (returns != null ) {
268280 return new _LambdaMethodBuilder (
@@ -271,12 +283,14 @@ abstract class MethodBuilder
271283 returnType,
272284 null ,
273285 modifier,
286+ asAbstract,
274287 );
275288 } else {
276289 return new _MethodBuilderImpl (
277290 null ,
278291 modifier: modifier,
279292 returns: returnType,
293+ asAbstract: asAbstract,
280294 );
281295 }
282296 }
@@ -287,13 +301,15 @@ abstract class MethodBuilder
287301 MethodModifier modifier,
288302 TypeBuilder returnType,
289303 ExpressionBuilder returns,
304+ bool asAbstract: false ,
290305 }) {
291306 if (returns == null ) {
292307 return new _MethodBuilderImpl (
293308 name,
294309 modifier: modifier,
295310 returns: returnType,
296311 property: Keyword .GET ,
312+ asAbstract: asAbstract,
297313 );
298314 } else {
299315 return new _LambdaMethodBuilder (
@@ -302,33 +318,45 @@ abstract class MethodBuilder
302318 returnType,
303319 Keyword .GET ,
304320 modifier,
321+ asAbstract,
305322 );
306323 }
307324 }
308325
309326 /// Creates a new [MethodBuilder] that returns `void` .
310- factory MethodBuilder .returnVoid (String name, {ExpressionBuilder returns}) {
327+ factory MethodBuilder .returnVoid (
328+ String name, {
329+ ExpressionBuilder returns,
330+ bool asAbstract: false ,
331+ }) {
311332 if (returns == null ) {
312- return new _MethodBuilderImpl (name, returns: lib$core.$void);
333+ return new _MethodBuilderImpl (
334+ name,
335+ returns: lib$core.$void,
336+ asAbstract: asAbstract,
337+ );
313338 }
314339 return new _LambdaMethodBuilder (
315340 name,
316341 returns,
317342 lib$core.$void,
318343 null ,
319344 null ,
345+ asAbstract,
320346 );
321347 }
322348
323349 /// Creates a setter.
324350 factory MethodBuilder .setter (
325351 String name, {
326352 ExpressionBuilder returns,
353+ bool asAbstract: false ,
327354 }) {
328355 if (returns == null ) {
329356 return new _MethodBuilderImpl (
330357 name,
331358 property: Keyword .SET ,
359+ asAbstract: asAbstract,
332360 );
333361 } else {
334362 return new _LambdaMethodBuilder (
@@ -337,6 +365,7 @@ abstract class MethodBuilder
337365 null ,
338366 Keyword .SET ,
339367 null ,
368+ asAbstract,
340369 );
341370 }
342371 }
@@ -376,13 +405,15 @@ class _LambdaMethodBuilder extends Object
376405 final String _name;
377406 final TypeBuilder _returnType;
378407 final Keyword _property;
408+ final bool _asAbstract;
379409
380410 _LambdaMethodBuilder (
381411 this ._name,
382412 this ._expression,
383413 this ._returnType,
384414 this ._property,
385415 this ._modifier,
416+ this ._asAbstract,
386417 );
387418
388419 @override
@@ -430,7 +461,9 @@ class _LambdaMethodBuilder extends Object
430461 _returnType? .buildType (scope),
431462 _property != null ? new KeywordToken (_property, 0 ) : null ,
432463 _name != null ? stringIdentifier (_name) : null ,
433- _buildExpression (scope, isStatement: true ),
464+ _asAbstract
465+ ? astFactory.emptyFunctionBody ($semicolon)
466+ : _buildExpression (scope, isStatement: true ),
434467 );
435468 }
436469
@@ -447,12 +480,14 @@ class _LambdaMethodBuilder extends Object
447480 stringIdentifier (_name),
448481 null ,
449482 _property != Keyword .GET ? buildParameterList (scope) : null ,
450- astFactory.expressionFunctionBody (
451- _modifier? .keyword (),
452- null ,
453- _expression.buildExpression (scope),
454- $semicolon,
455- ),
483+ _asAbstract
484+ ? astFactory.emptyFunctionBody ($semicolon)
485+ : astFactory.expressionFunctionBody (
486+ _modifier? .keyword (),
487+ null ,
488+ _expression.buildExpression (scope),
489+ $semicolon,
490+ ),
456491 );
457492 }
458493
@@ -472,12 +507,14 @@ class _MethodBuilderImpl extends Object
472507 final String _name;
473508 final TypeBuilder _returnType;
474509 final Keyword _property;
510+ final bool asAbstract;
475511
476512 _MethodBuilderImpl (
477513 this ._name, {
478514 MethodModifier modifier,
479515 TypeBuilder returns,
480516 Keyword property,
517+ this .asAbstract: false ,
481518 })
482519 : _modifier = modifier,
483520 _returnType = returns,
@@ -496,11 +533,13 @@ class _MethodBuilderImpl extends Object
496533 return astFactory.functionExpression (
497534 null ,
498535 _property != Keyword .GET ? buildParameterList (scope) : null ,
499- astFactory.blockFunctionBody (
500- _modifier? .keyword (),
501- _modifier? .isStar == true ? $star : null ,
502- buildBlock (scope),
503- ),
536+ asAbstract
537+ ? astFactory.emptyFunctionBody ($semicolon)
538+ : astFactory.blockFunctionBody (
539+ _modifier? .keyword (),
540+ _modifier? .isStar == true ? $star : null ,
541+ buildBlock (scope),
542+ ),
504543 );
505544 }
506545
@@ -530,11 +569,13 @@ class _MethodBuilderImpl extends Object
530569 identifier (scope, _name),
531570 null ,
532571 _property != Keyword .GET ? buildParameterList (scope) : null ,
533- astFactory.blockFunctionBody (
534- _modifier? .keyword (),
535- _modifier? .isStar == true ? $star : null ,
536- buildBlock (scope),
537- ),
572+ asAbstract
573+ ? astFactory.emptyFunctionBody ($semicolon)
574+ : astFactory.blockFunctionBody (
575+ _modifier? .keyword (),
576+ _modifier? .isStar == true ? $star : null ,
577+ buildBlock (scope),
578+ ),
538579 );
539580 }
540581
0 commit comments