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

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

Issue 1606283003: Modify summary codegen so that builder getters return builders. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Improve behavior of defaults 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/lib/src/summary/format.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 b813bb0af3528a9eb250bcd164fc429b742037a9..230ae438a854beac3fae7f2292fd715cdc0d3acd 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -120,10 +120,19 @@ class _CodeGenerator {
/**
* Generate a Dart expression representing the default value for a field
* having the given [type], or `null` if there is no default value.
+ *
+ * If [builder] is `true`, the returned type should be appropriate for use in
+ * a builder class.
*/
- String defaultValue(idlModel.FieldType type) {
+ String defaultValue(idlModel.FieldType type, bool builder) {
if (type.isList) {
- return 'const <${type.typeName}>[]';
+ if (builder) {
+ idlModel.FieldType elementType =
+ new idlModel.FieldType(type.typeName, false);
+ return '<${encodedType(elementType)}>[]';
+ } else {
+ return 'const <${type.typeName}>[]';
+ }
} else if (_idl.enums.containsKey(type.typeName)) {
return '${type.typeName}.${_idl.enums[type.typeName].values[0]}';
} else if (type.typeName == 'int') {
@@ -314,11 +323,11 @@ class _CodeGenerator {
String fieldName = field.name;
idlModel.FieldType fieldType = field.type;
String typeStr = encodedType(fieldType);
- String def = defaultValue(fieldType);
- String defSuffix = def == null ? '' : ' ?? $def';
+ String def = defaultValue(fieldType, true);
+ String defSuffix = def == null ? '' : ' ??= $def';
out();
out('@override');
- out('${dartType(fieldType)} get $fieldName => _$fieldName$defSuffix;');
+ out('$typeStr get $fieldName => _$fieldName$defSuffix;');
out();
outDoc(field.documentation);
constructorParams.add('$typeStr $fieldName');
@@ -390,9 +399,11 @@ class _CodeGenerator {
String listCode = '$valueName.map((b) => $itemCode).toList()';
writeCode = '$offsetName = fbBuilder.writeListUint32($listCode);';
} else if (fieldType.typeName == 'int') {
- writeCode = '$offsetName = fbBuilder.writeListUint32($valueName);';
+ writeCode =
+ '$offsetName = fbBuilder.writeListUint32($valueName);';
} else if (fieldType.typeName == 'double') {
- writeCode = '$offsetName = fbBuilder.writeListFloat64($valueName);';
+ writeCode =
+ '$offsetName = fbBuilder.writeListFloat64($valueName);';
} else {
assert(fieldType.typeName == 'String');
String itemCode = 'fbBuilder.writeString(b)';
@@ -433,10 +444,10 @@ class _CodeGenerator {
condition = '$valueName == true';
writeCode = 'fbBuilder.addBool($index, true);';
} else if (fieldType.typeName == 'int') {
- condition += ' && $valueName != ${defaultValue(fieldType)}';
+ condition += ' && $valueName != ${defaultValue(fieldType, true)}';
writeCode = 'fbBuilder.addUint32($index, $valueName);';
} else if (_idl.enums.containsKey(fieldType.typeName)) {
- condition += ' && $valueName != ${defaultValue(fieldType)}';
+ condition += ' && $valueName != ${defaultValue(fieldType, true)}';
writeCode = 'fbBuilder.addUint32($index, $valueName.index);';
}
if (writeCode == null) {
@@ -511,7 +522,7 @@ class _CodeGenerator {
String typeName = type.typeName;
// Prepare "readCode" + "def"
String readCode;
- String def = defaultValue(type);
+ String def = defaultValue(type, false);
if (type.isList) {
if (typeName == 'int') {
String itemCode = 'const fb.Uint32Reader()';
« no previous file with comments | « pkg/analyzer/lib/src/summary/format.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698