Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: pkg/analyzer/tool/summary/generate.dart

Issue 1581993002: Make summary builder classes implement summary interfaces. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/test/src/summary/name_filter_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/tool/summary/generate.dart
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index 19180745cd4ad9b1451700c7b7b0c5fb0b2b45bf..6bb00683572dbbf2ae5fd36505e3f47244448530 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -283,6 +283,8 @@ class _CodeGenerator {
out();
_generateImpl(cls);
out();
+ _generateMixin(cls);
+ out();
}
}
@@ -294,9 +296,12 @@ class _CodeGenerator {
}
List<String> _generateBuilder(idlModel.ClassDeclaration cls) {
- String builderName = cls.name + 'Builder';
+ String name = cls.name;
+ String builderName = name + 'Builder';
+ String mixinName = '_${name}Mixin';
List<String> builderParams = <String>[];
- out('class $builderName {');
+ out('class $builderName extends Object with $mixinName '
+ 'implements $name {');
indent(() {
out('bool _finished = false;');
// Generate fields.
@@ -310,10 +315,15 @@ class _CodeGenerator {
// Generate constructor.
out();
out('$builderName();');
- // Generate setters.
+ // Generate getters and setters.
for (idlModel.FieldDeclaration field in cls.fields) {
String fieldName = field.name;
String typeStr = encodedType(field.type);
+ String def = defaultValue(field.type);
+ String defSuffix = def == null ? '' : ' ?? $def';
+ out();
+ out('@override');
+ out('${dartType(field.type)} get $fieldName => _$fieldName$defSuffix;');
out();
outDoc(field.documentation);
builderParams.add('$typeStr $fieldName');
@@ -446,7 +456,8 @@ class _CodeGenerator {
void _generateImpl(idlModel.ClassDeclaration cls) {
String name = cls.name;
String implName = '_${name}Impl';
- out('class $implName implements $name {');
+ String mixinName = '_${name}Mixin';
+ out('class $implName extends Object with $mixinName implements $name {');
indent(() {
out('final fb.BufferPointer _bp;');
out();
@@ -458,17 +469,6 @@ class _CodeGenerator {
String fieldName = field.name;
out('$returnType _$fieldName;');
}
- out();
- // Write toMap().
- out('@override');
- out('Map<String, Object> toMap() => {');
- indent(() {
- for (idlModel.FieldDeclaration field in cls.fields) {
- String fieldName = field.name;
- out('${quoted(fieldName)}: $fieldName,');
- }
- });
- out('};');
// Write getters.
cls.fields.asMap().forEach((index, field) {
String fieldName = field.name;
@@ -544,6 +544,25 @@ class _CodeGenerator {
out('}');
}
+ void _generateMixin(idlModel.ClassDeclaration cls) {
+ String name = cls.name;
+ String mixinName = '_${name}Mixin';
+ out('abstract class $mixinName implements $name {');
+ indent(() {
+ // Write toMap().
+ out('@override');
+ out('Map<String, Object> toMap() => {');
+ indent(() {
+ for (idlModel.FieldDeclaration field in cls.fields) {
+ String fieldName = field.name;
+ out('${quoted(fieldName)}: $fieldName,');
+ }
+ });
+ out('};');
+ });
+ out('}');
+ }
+
void _generateReader(idlModel.ClassDeclaration cls) {
String name = cls.name;
String readerName = '_${name}Reader';
« no previous file with comments | « pkg/analyzer/test/src/summary/name_filter_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698