Skip to content

Commit d4061c1

Browse files
authored
Refactor gen_defaults to support multiple generated code blocks in the same file independently. (#107278)
1 parent 7db73c0 commit d4061c1

33 files changed

+467
-288
lines changed

dev/tools/gen_defaults/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ dart dev/tools/gen_defaults/bin/gen_defaults.dart
1515
There is a template file for every component that needs defaults from
1616
the token database. These templates are implemented as subclasses of
1717
`TokenTemplate`. This base class provides some utilities and a structure
18-
for adding a new chunk of generated code to the bottom of a given file.
18+
for adding a new block of generated code to the bottom of a given file.
1919

2020
Templates need to override the `generate` method to provide the generated
21-
code chunk as a string. The tokens are represented as a `Map<String, dynamic>`
21+
code block as a string. The tokens are represented as a `Map<String, dynamic>`
2222
that is loaded from `data/material-tokens.json`. Templates can look up
2323
whatever properties are needed in this structure to provide the properties
2424
needed for the component.

dev/tools/gen_defaults/bin/gen_defaults.dart

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -99,20 +99,20 @@ Future<void> main(List<String> args) async {
9999
tokens['colorsLight'] = _readTokenFile('color_light.json');
100100
tokens['colorsDark'] = _readTokenFile('color_dark.json');
101101

102-
AppBarTemplate('$materialLib/app_bar.dart', tokens).updateFile();
103-
ButtonTemplate('md.comp.elevated-button', '$materialLib/elevated_button.dart', tokens).updateFile();
104-
ButtonTemplate('md.comp.outlined-button', '$materialLib/outlined_button.dart', tokens).updateFile();
105-
ButtonTemplate('md.comp.text-button', '$materialLib/text_button.dart', tokens).updateFile();
106-
CardTemplate('$materialLib/card.dart', tokens).updateFile();
107-
ChipActionTemplate('$materialLib/chip_action.dart', tokens).updateFile();
108-
ChipFilterTemplate('$materialLib/chip_filter.dart', tokens).updateFile();
109-
ChipFilterTemplate('$materialLib/chip_choice.dart', tokens).updateFile();
110-
ChipInputTemplate('$materialLib/chip_input.dart', tokens).updateFile();
111-
DialogTemplate('$materialLib/dialog.dart', tokens).updateFile();
112-
FABTemplate('$materialLib/floating_action_button.dart', tokens).updateFile();
113-
IconButtonTemplate('$materialLib/icon_button.dart', tokens).updateFile();
114-
NavigationBarTemplate('$materialLib/navigation_bar.dart', tokens).updateFile();
115-
NavigationRailTemplate('$materialLib/navigation_rail.dart', tokens).updateFile();
116-
SurfaceTintTemplate('$materialLib/elevation_overlay.dart', tokens).updateFile();
117-
TypographyTemplate('$materialLib/typography.dart', tokens).updateFile();
102+
AppBarTemplate('AppBar', '$materialLib/app_bar.dart', tokens).updateFile();
103+
ButtonTemplate('md.comp.elevated-button', 'ElevatedButton', '$materialLib/elevated_button.dart', tokens).updateFile();
104+
ButtonTemplate('md.comp.outlined-button', 'OutlinedButton', '$materialLib/outlined_button.dart', tokens).updateFile();
105+
ButtonTemplate('md.comp.text-button', 'TextButton', '$materialLib/text_button.dart', tokens).updateFile();
106+
CardTemplate('Card', '$materialLib/card.dart', tokens).updateFile();
107+
ChipActionTemplate('ActionChip', '$materialLib/chip_action.dart', tokens).updateFile();
108+
ChipFilterTemplate('FilterChip', '$materialLib/chip_filter.dart', tokens).updateFile();
109+
ChipFilterTemplate('FilterChip', '$materialLib/chip_choice.dart', tokens).updateFile();
110+
ChipInputTemplate('InputChip', '$materialLib/chip_input.dart', tokens).updateFile();
111+
DialogTemplate('Dialog', '$materialLib/dialog.dart', tokens).updateFile();
112+
FABTemplate('FAB', '$materialLib/floating_action_button.dart', tokens).updateFile();
113+
IconButtonTemplate('IconButton', '$materialLib/icon_button.dart', tokens).updateFile();
114+
NavigationBarTemplate('NavigationBar', '$materialLib/navigation_bar.dart', tokens).updateFile();
115+
NavigationRailTemplate('NavigationRail', '$materialLib/navigation_rail.dart', tokens).updateFile();
116+
SurfaceTintTemplate('SurfaceTint', '$materialLib/elevation_overlay.dart', tokens).updateFile();
117+
TypographyTemplate('Typography', '$materialLib/typography.dart', tokens).updateFile();
118118
}

dev/tools/gen_defaults/lib/app_bar_template.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@
55
import 'template.dart';
66

77
class AppBarTemplate extends TokenTemplate {
8-
const AppBarTemplate(super.fileName, super.tokens)
8+
const AppBarTemplate(super.blockName, super.fileName, super.tokens)
99
: super(
1010
colorSchemePrefix: '_colors.',
1111
textThemePrefix: '_textTheme.',
1212
);
1313

1414
@override
1515
String generate() => '''
16-
// Generated version ${tokens["version"]}
17-
class _TokenDefaultsM3 extends AppBarTheme {
18-
_TokenDefaultsM3(this.context)
16+
class _${blockName}DefaultsM3 extends AppBarTheme {
17+
_${blockName}DefaultsM3(this.context)
1918
: super(
2019
elevation: ${elevation('md.comp.top-app-bar.small.container')},
2120
scrolledUnderElevation: ${elevation('md.comp.top-app-bar.small.on-scroll.container')},

dev/tools/gen_defaults/lib/button_template.dart

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
import 'template.dart';
66

77
class ButtonTemplate extends TokenTemplate {
8-
const ButtonTemplate(this.tokenGroup, String fileName, Map<String, dynamic> tokens)
9-
: super(fileName, tokens,
10-
colorSchemePrefix: '_colors.',
11-
);
8+
const ButtonTemplate(this.tokenGroup, super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
});
1211

1312
final String tokenGroup;
1413

@@ -55,9 +54,8 @@ class ButtonTemplate extends TokenTemplate {
5554

5655
@override
5756
String generate() => '''
58-
// Generated version ${tokens["version"]}
59-
class _TokenDefaultsM3 extends ButtonStyle {
60-
_TokenDefaultsM3(this.context)
57+
class _${blockName}DefaultsM3 extends ButtonStyle {
58+
_${blockName}DefaultsM3(this.context)
6159
: super(
6260
animationDuration: kThemeChangeDuration,
6361
enableFeedback: true,

dev/tools/gen_defaults/lib/card_template.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
import 'template.dart';
66

77
class CardTemplate extends TokenTemplate {
8-
const CardTemplate(super.fileName, super.tokens);
8+
const CardTemplate(super.blockName, super.fileName, super.tokens);
99

1010
@override
1111
String generate() => '''
1212
// Generated version ${tokens["version"]}
13-
class _TokenDefaultsM3 extends CardTheme {
14-
const _TokenDefaultsM3(this.context)
13+
class _${blockName}DefaultsM3 extends CardTheme {
14+
const _${blockName}DefaultsM3(this.context)
1515
: super(
1616
clipBehavior: Clip.none,
1717
elevation: ${elevation("md.comp.elevated-card.container")},

dev/tools/gen_defaults/lib/chip_action_template.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@ import 'template.dart';
66

77
class ChipActionTemplate extends TokenTemplate {
88

9-
const ChipActionTemplate(super.fileName, super.tokens);
9+
const ChipActionTemplate(super.blockName, super.fileName, super.tokens);
1010

1111
static const String tokenGroup = 'md.comp.assist-chip';
1212
static const String variant = '.flat';
1313

1414
@override
1515
String generate() => '''
16-
// Generated version ${tokens["version"]}
17-
class _TokenDefaultsM3 extends ChipThemeData {
18-
const _TokenDefaultsM3(this.context, this.isEnabled)
16+
class _${blockName}DefaultsM3 extends ChipThemeData {
17+
const _${blockName}DefaultsM3(this.context, this.isEnabled)
1918
: super(
2019
elevation: ${elevation("$tokenGroup$variant.container")},
2120
shape: ${shape("$tokenGroup.container")},

dev/tools/gen_defaults/lib/chip_filter_template.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
import 'template.dart';
66

77
class ChipFilterTemplate extends TokenTemplate {
8-
const ChipFilterTemplate(super.fileName, super.tokens);
8+
const ChipFilterTemplate(super.blockName, super.fileName, super.tokens);
99

1010
static const String tokenGroup = 'md.comp.filter-chip';
1111
static const String variant = '.flat';
1212

1313
@override
1414
String generate() => '''
15-
// Generated version ${tokens["version"]}
16-
class _TokenDefaultsM3 extends ChipThemeData {
17-
const _TokenDefaultsM3(this.context, this.isEnabled, this.isSelected)
15+
class _${blockName}DefaultsM3 extends ChipThemeData {
16+
const _${blockName}DefaultsM3(this.context, this.isEnabled, this.isSelected)
1817
: super(
1918
elevation: ${elevation("$tokenGroup$variant.container")},
2019
shape: ${shape("$tokenGroup.container")},

dev/tools/gen_defaults/lib/chip_input_template.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
import 'template.dart';
66

77
class ChipInputTemplate extends TokenTemplate {
8-
const ChipInputTemplate(super.fileName, super.tokens);
8+
const ChipInputTemplate(super.blockName, super.fileName, super.tokens);
99

1010
static const String tokenGroup = 'md.comp.input-chip';
1111
static const String variant = '';
1212

1313
@override
1414
String generate() => '''
15-
// Generated version ${tokens["version"]}
16-
class _TokenDefaultsM3 extends ChipThemeData {
17-
const _TokenDefaultsM3(this.context, this.isEnabled)
15+
class _${blockName}DefaultsM3 extends ChipThemeData {
16+
const _${blockName}DefaultsM3(this.context, this.isEnabled)
1817
: super(
1918
elevation: ${elevation("$tokenGroup$variant.container")},
2019
shape: ${shape("$tokenGroup.container")},

dev/tools/gen_defaults/lib/dialog_template.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
import 'template.dart';
66

77
class DialogTemplate extends TokenTemplate {
8-
const DialogTemplate(super.fileName, super.tokens)
9-
: super(colorSchemePrefix: '_colors.',
10-
textThemePrefix: '_textTheme.'
11-
);
8+
const DialogTemplate(super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
super.textThemePrefix = '_textTheme.'
11+
});
1212

1313
@override
1414
String generate() => '''
15-
// Generated version ${tokens["version"]}
16-
class _TokenDefaultsM3 extends DialogTheme {
17-
_TokenDefaultsM3(this.context)
15+
class _${blockName}DefaultsM3 extends DialogTheme {
16+
_${blockName}DefaultsM3(this.context)
1817
: super(
1918
alignment: Alignment.center,
2019
elevation: ${elevation("md.comp.dialog.container")},

dev/tools/gen_defaults/lib/fab_template.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
import 'template.dart';
66

77
class FABTemplate extends TokenTemplate {
8-
const FABTemplate(super.fileName, super.tokens)
9-
: super(colorSchemePrefix: '_colors.',
10-
textThemePrefix: '_textTheme.',
11-
);
8+
const FABTemplate(super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
super.textThemePrefix = '_textTheme.',
11+
});
1212

1313
@override
1414
String generate() => '''
15-
// Generated version ${tokens["version"]}
16-
class _TokenDefaultsM3 extends FloatingActionButtonThemeData {
17-
_TokenDefaultsM3(this.context, this.type, this.hasChild)
15+
class _${blockName}DefaultsM3 extends FloatingActionButtonThemeData {
16+
_${blockName}DefaultsM3(this.context, this.type, this.hasChild)
1817
: super(
1918
elevation: ${elevation("md.comp.fab.primary.container")},
2019
focusElevation: ${elevation("md.comp.fab.primary.focus.container")},

dev/tools/gen_defaults/lib/icon_button_template.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55
import 'template.dart';
66

77
class IconButtonTemplate extends TokenTemplate {
8-
const IconButtonTemplate(super.fileName, super.tokens)
9-
: super(colorSchemePrefix: '_colors.',
10-
);
8+
const IconButtonTemplate(super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
});
1111

1212
@override
1313
String generate() => '''
14-
// Generated version ${tokens["version"]}
15-
class _TokenDefaultsM3 extends ButtonStyle {
16-
_TokenDefaultsM3(this.context)
14+
class _${blockName}DefaultsM3 extends ButtonStyle {
15+
_${blockName}DefaultsM3(this.context)
1716
: super(
1817
animationDuration: kThemeChangeDuration,
1918
enableFeedback: true,

dev/tools/gen_defaults/lib/navigation_bar_template.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
import 'template.dart';
66

77
class NavigationBarTemplate extends TokenTemplate {
8-
const NavigationBarTemplate(super.fileName, super.tokens)
9-
: super(colorSchemePrefix: '_colors.',
10-
textThemePrefix: '_textTheme.',
11-
);
8+
const NavigationBarTemplate(super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
super.textThemePrefix = '_textTheme.',
11+
});
1212

1313
@override
1414
String generate() => '''
15-
// Generated version ${tokens["version"]}
16-
class _TokenDefaultsM3 extends NavigationBarThemeData {
17-
_TokenDefaultsM3(this.context)
15+
class _${blockName}DefaultsM3 extends NavigationBarThemeData {
16+
_${blockName}DefaultsM3(this.context)
1817
: super(
1918
height: ${tokens["md.comp.navigation-bar.container.height"]},
2019
elevation: ${elevation("md.comp.navigation-bar.container")},

dev/tools/gen_defaults/lib/navigation_rail_template.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
import 'template.dart';
66

77
class NavigationRailTemplate extends TokenTemplate {
8-
const NavigationRailTemplate(super.fileName, super.tokens)
9-
: super(colorSchemePrefix: '_colors.',
10-
textThemePrefix: '_textTheme.',
11-
);
8+
const NavigationRailTemplate(super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
super.textThemePrefix = '_textTheme.',
11+
});
1212

1313
@override
1414
String generate() => '''
15-
// Generated version ${tokens["version"]}
16-
class _TokenDefaultsM3 extends NavigationRailThemeData {
17-
_TokenDefaultsM3(this.context)
15+
class _${blockName}DefaultsM3 extends NavigationRailThemeData {
16+
_${blockName}DefaultsM3(this.context)
1817
: super(
1918
elevation: ${elevation("md.comp.navigation-rail.container")},
2019
groupAlignment: -1,

dev/tools/gen_defaults/lib/surface_tint.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
import 'template.dart';
66

77
class SurfaceTintTemplate extends TokenTemplate {
8-
const SurfaceTintTemplate(super.fileName, super.tokens);
8+
const SurfaceTintTemplate(super.blockName, super.fileName, super.tokens);
99

1010
@override
1111
String generate() => '''
12-
// Generated version ${tokens["version"]}
13-
1412
// Surface tint opacities based on elevations according to the
1513
// Material Design 3 specification:
1614
// https://m3.material.io/styles/color/the-color-system/color-roles

0 commit comments

Comments
 (0)