| Index: pkg/analyzer/tool/summary/generate.dart
|
| diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
|
| index fba35c3a74d27187855ffd5a2733bba5123dce5f..1099ab58bfa065fc0106b7c959877a3a3e1fdde2 100644
|
| --- a/pkg/analyzer/tool/summary/generate.dart
|
| +++ b/pkg/analyzer/tool/summary/generate.dart
|
| @@ -63,6 +63,9 @@ final GeneratedFile schemaTarget =
|
| typedef String _StringToString(String s);
|
|
|
| class _CodeGenerator {
|
| + static const String _throwDeprecated =
|
| + "throw new UnimplementedError('attempt to access deprecated field')";
|
| +
|
| /**
|
| * Buffer in which generated code is accumulated.
|
| */
|
| @@ -277,6 +280,7 @@ class _CodeGenerator {
|
| throw new Exception('Cannot handle type arguments in `$type`');
|
| }
|
| int id;
|
| + bool isDeprecated = false;
|
| for (Annotation annotation in classMember.metadata) {
|
| if (annotation.name.name == 'Id') {
|
| if (id != null) {
|
| @@ -294,6 +298,11 @@ class _CodeGenerator {
|
| throw new Exception(
|
| '@Id parameter must be an integer literal ($desc)');
|
| }
|
| + } else if (annotation.name.name == 'deprecated') {
|
| + if (annotation.arguments != null) {
|
| + throw new Exception('@deprecated does not take args ($desc)');
|
| + }
|
| + isDeprecated = true;
|
| }
|
| }
|
| if (id == null) {
|
| @@ -302,8 +311,8 @@ class _CodeGenerator {
|
| String doc = _getNodeDoc(lineInfo, classMember);
|
| idlModel.FieldType fieldType =
|
| new idlModel.FieldType(type.name.name, isList);
|
| - cls.fields.add(new idlModel.FieldDeclaration(
|
| - doc, classMember.name.name, fieldType, id));
|
| + cls.allFields.add(new idlModel.FieldDeclaration(
|
| + doc, classMember.name.name, fieldType, id, isDeprecated));
|
| } else if (classMember is ConstructorDeclaration &&
|
| classMember.name.name == 'fromBuffer') {
|
| // Ignore `fromBuffer` declarations; they simply forward to the
|
| @@ -388,13 +397,18 @@ class _CodeGenerator {
|
| outDoc(cls.documentation);
|
| out('table ${cls.name} {');
|
| indent(() {
|
| - for (int i = 0; i < cls.fields.length; i++) {
|
| - idlModel.FieldDeclaration field = cls.fields[i];
|
| + for (int i = 0; i < cls.allFields.length; i++) {
|
| + idlModel.FieldDeclaration field = cls.allFields[i];
|
| if (i != 0) {
|
| out();
|
| }
|
| outDoc(field.documentation);
|
| - out('${field.name}:${fbsType(field.type)} (id: ${field.id});');
|
| + List<String> attributes = <String>['id: ${field.id}'];
|
| + if (field.isDeprecated) {
|
| + attributes.add('deprecated');
|
| + }
|
| + String attrText = attributes.join(', ');
|
| + out('${field.name}:${fbsType(field.type)} ($attrText);');
|
| }
|
| });
|
| out('}');
|
| @@ -524,7 +538,7 @@ class _CodeGenerator {
|
| out('$typeStr _$fieldName;');
|
| }
|
| // Generate getters and setters.
|
| - for (idlModel.FieldDeclaration field in cls.fields) {
|
| + for (idlModel.FieldDeclaration field in cls.allFields) {
|
| String fieldName = field.name;
|
| idlModel.FieldType fieldType = field.type;
|
| String typeStr = encodedType(fieldType);
|
| @@ -532,34 +546,39 @@ class _CodeGenerator {
|
| String defSuffix = def == null ? '' : ' ??= $def';
|
| out();
|
| out('@override');
|
| - out('$typeStr get $fieldName => _$fieldName$defSuffix;');
|
| - out();
|
| - outDoc(field.documentation);
|
| - constructorParams.add('$typeStr $fieldName');
|
| - out('void set $fieldName($typeStr _value) {');
|
| - indent(() {
|
| - String stateFieldName = '_' + fieldName;
|
| - out('assert(!_finished);');
|
| - // Validate that int(s) are non-negative.
|
| - if (fieldType.typeName == 'int') {
|
| - if (!fieldType.isList) {
|
| - out('assert(_value == null || _value >= 0);');
|
| - } else {
|
| - out('assert(_value == null || _value.every((e) => e >= 0));');
|
| + if (field.isDeprecated) {
|
| + out('$typeStr get $fieldName => $_throwDeprecated;');
|
| + } else {
|
| + out('$typeStr get $fieldName => _$fieldName$defSuffix;');
|
| + out();
|
| + outDoc(field.documentation);
|
| + constructorParams.add('$typeStr $fieldName');
|
| + out('void set $fieldName($typeStr _value) {');
|
| + indent(() {
|
| + String stateFieldName = '_' + fieldName;
|
| + out('assert(!_finished);');
|
| + // Validate that int(s) are non-negative.
|
| + if (fieldType.typeName == 'int') {
|
| + if (!fieldType.isList) {
|
| + out('assert(_value == null || _value >= 0);');
|
| + } else {
|
| + out('assert(_value == null || _value.every((e) => e >= 0));');
|
| + }
|
| }
|
| - }
|
| - // Set the value.
|
| - out('$stateFieldName = _value;');
|
| - });
|
| - out('}');
|
| + // Set the value.
|
| + out('$stateFieldName = _value;');
|
| + });
|
| + out('}');
|
| + }
|
| }
|
| // Generate constructor.
|
| out();
|
| out('$builderName({${constructorParams.join(', ')}})');
|
| - for (int i = 0; i < cls.fields.length; i++) {
|
| - idlModel.FieldDeclaration field = cls.fields[i];
|
| + List<idlModel.FieldDeclaration> fields = cls.fields.toList();
|
| + for (int i = 0; i < fields.length; i++) {
|
| + idlModel.FieldDeclaration field = fields[i];
|
| String prefix = i == 0 ? ' : ' : ' ';
|
| - String suffix = i == cls.fields.length - 1 ? ';' : ',';
|
| + String suffix = i == fields.length - 1 ? ';' : ',';
|
| out('${prefix}_${field.name} = ${field.name}$suffix');
|
| }
|
| // Generate finish.
|
| @@ -714,7 +733,7 @@ class _CodeGenerator {
|
| out('$returnType _$fieldName;');
|
| }
|
| // Write getters.
|
| - for (idlModel.FieldDeclaration field in cls.fields) {
|
| + for (idlModel.FieldDeclaration field in cls.allFields) {
|
| int index = field.id;
|
| String fieldName = field.name;
|
| idlModel.FieldType type = field.type;
|
| @@ -754,13 +773,17 @@ class _CodeGenerator {
|
| out();
|
| out('@override');
|
| String returnType = dartType(type);
|
| - out('$returnType get $fieldName {');
|
| - indent(() {
|
| - String readExpr = '$readCode.vTableGet(_bp, $index, $def)';
|
| - out('_$fieldName ??= $readExpr;');
|
| - out('return _$fieldName;');
|
| - });
|
| - out('}');
|
| + if (field.isDeprecated) {
|
| + out('$returnType get $fieldName => $_throwDeprecated;');
|
| + } else {
|
| + out('$returnType get $fieldName {');
|
| + indent(() {
|
| + String readExpr = '$readCode.vTableGet(_bp, $index, $def)';
|
| + out('_$fieldName ??= $readExpr;');
|
| + out('return _$fieldName;');
|
| + });
|
| + out('}');
|
| + }
|
| }
|
| });
|
| out('}');
|
|
|