diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f8d8be4..211bba48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and `// dart format on` comments. Note: This only works using the new tall style and requires passing the `--enable-experiment=tall-style` experiment flag (#361). +* Preserve type parameters on old-style function-typed formals that also use + `this.` or `super.` (#1321). * Remove temporary work around for analyzer 6.2.0 from dart_style 2.3.6. * Require `package:analyzer` `>=6.5.0 <7.0.0`. diff --git a/lib/src/short/source_visitor.dart b/lib/src/short/source_visitor.dart index d5a84f84..b9deb505 100644 --- a/lib/src/short/source_visitor.dart +++ b/lib/src/short/source_visitor.dart @@ -1339,6 +1339,7 @@ class SourceVisitor extends ThrowingAstVisitor { token(node.thisKeyword); token(node.period); token(node.name); + visit(node.typeParameters); visit(node.parameters); token(node.question); _endFormalParameter(node); @@ -2801,6 +2802,7 @@ class SourceVisitor extends ThrowingAstVisitor { token(node.superKeyword); token(node.period); token(node.name); + visit(node.typeParameters); visit(node.parameters); token(node.question); _endFormalParameter(node); diff --git a/test/short/regression/1300/1321.unit b/test/short/regression/1300/1321.unit new file mode 100644 index 00000000..20d64539 --- /dev/null +++ b/test/short/regression/1300/1321.unit @@ -0,0 +1,38 @@ +>>> `super.` parameter. +class A { + A(int foo(int a)); +} +class B extends A { + B.sub1(int super.bar1(int a1),); + B.sub2(int super.bar2(int a2),); +} +main() {} +<<< +class A { + A(int foo(int a)); +} + +class B extends A { + B.sub1( + int super.bar1(int a1), + ); + B.sub2( + int super.bar2(int a2), + ); +} + +main() {} +>>> `this.` parameter. +class A { + A.sub1(int this.bar1(int a1),); + A.sub2(int this.bar2(int a2),); +} +<<< +class A { + A.sub1( + int this.bar1(int a1), + ); + A.sub2( + int this.bar2(int a2), + ); +} \ No newline at end of file diff --git a/test/tall/regression/1300/1321.unit b/test/tall/regression/1300/1321.unit new file mode 100644 index 00000000..5c81f226 --- /dev/null +++ b/test/tall/regression/1300/1321.unit @@ -0,0 +1,30 @@ +>>> `super.` parameter. +class A { + A(int foo(int a)); +} +class B extends A { + B.sub1(int super.bar1(int a1),); + B.sub2(int super.bar2(int a2),); +} +main() {} +<<< +class A { + A(int foo(int a)); +} + +class B extends A { + B.sub1(int super.bar1(int a1)); + B.sub2(int super.bar2(int a2)); +} + +main() {} +>>> `this.` parameter. +class A { + A.sub1(int this.bar1(int a1),); + A.sub2(int this.bar2(int a2),); +} +<<< +class A { + A.sub1(int this.bar1(int a1)); + A.sub2(int this.bar2(int a2)); +} \ No newline at end of file