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

Side by Side Diff: pkg/analysis_server/tool/spec/from_html.dart

Issue 3002543002: Support experimental annotations for the analysis server spec. (Closed)
Patch Set: Created 3 years, 4 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 unified diff | Download patch
« no previous file with comments | « pkg/analysis_server/doc/api.html ('k') | pkg/analysis_server/tool/spec/spec_input.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * Code for reading an HTML API description. 6 * Code for reading an HTML API description.
7 */ 7 */
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:analyzer/src/codegen/html.dart'; 10 import 'package:analyzer/src/codegen/html.dart';
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 element.attributes.forEach((String name, String value) { 124 element.attributes.forEach((String name, String value) {
125 if (!requiredAttributes.contains(name) && 125 if (!requiredAttributes.contains(name) &&
126 !optionalAttributes.contains(name)) { 126 !optionalAttributes.contains(name)) {
127 throw new Exception( 127 throw new Exception(
128 '$context: Unexpected attribute in ${element.localName}: $name'); 128 '$context: Unexpected attribute in ${element.localName}: $name');
129 } 129 }
130 attributesFound.add(name); 130 attributesFound.add(name);
131 }); 131 });
132 for (String expectedAttribute in requiredAttributes) { 132 for (String expectedAttribute in requiredAttributes) {
133 if (!attributesFound.contains(expectedAttribute)) { 133 if (!attributesFound.contains(expectedAttribute)) {
134 throw new Exception( 134 throw new Exception('$context: ${element
135 '$context: ${element.localName} must contain attribute $expectedAttr ibute'); 135 .localName} must contain attribute $expectedAttribute');
136 } 136 }
137 } 137 }
138 } 138 }
139 139
140 /** 140 /**
141 * Check that the given [element] has the given [expectedName]. 141 * Check that the given [element] has the given [expectedName].
142 */ 142 */
143 void checkName(dom.Element element, String expectedName, [String context]) { 143 void checkName(dom.Element element, String expectedName, [String context]) {
144 if (element.localName != expectedName) { 144 if (element.localName != expectedName) {
145 if (context == null) { 145 if (context == null) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 * 204 *
205 * <params> has the same form as <object>, as described in [typeDeclFromHtml]. 205 * <params> has the same form as <object>, as described in [typeDeclFromHtml].
206 * 206 *
207 * Child elements can occur in any order. 207 * Child elements can occur in any order.
208 */ 208 */
209 Notification notificationFromHtml(dom.Element html, String context) { 209 Notification notificationFromHtml(dom.Element html, String context) {
210 String domainName = getAncestor(html, 'domain', context).attributes['name']; 210 String domainName = getAncestor(html, 'domain', context).attributes['name'];
211 checkName(html, 'notification', context); 211 checkName(html, 'notification', context);
212 String event = html.attributes['event']; 212 String event = html.attributes['event'];
213 context = '$context.${event != null ? event : 'event'}'; 213 context = '$context.${event != null ? event : 'event'}';
214 checkAttributes(html, ['event'], context); 214 checkAttributes(html, ['event'], context,
215 optionalAttributes: ['experimental']);
216 bool experimental = html.attributes['experimental'] == 'true';
215 TypeDecl params; 217 TypeDecl params;
216 recurse(html, context, { 218 recurse(html, context, {
217 'params': (dom.Element child) { 219 'params': (dom.Element child) {
218 params = typeObjectFromHtml(child, '$context.params'); 220 params = typeObjectFromHtml(child, '$context.params');
219 } 221 }
220 }); 222 });
221 return new Notification(domainName, event, params, html); 223 return new Notification(domainName, event, params, html,
224 experimental: experimental);
222 } 225 }
223 226
224 /** 227 /**
225 * Create a single of [TypeDecl] corresponding to the type defined inside the 228 * Create a single of [TypeDecl] corresponding to the type defined inside the
226 * given HTML element. 229 * given HTML element.
227 */ 230 */
228 TypeDecl processContentsAsType(dom.Element html, String context) { 231 TypeDecl processContentsAsType(dom.Element html, String context) {
229 List<TypeDecl> types = processContentsAsTypes(html, context); 232 List<TypeDecl> types = processContentsAsTypes(html, context);
230 if (types.length != 1) { 233 if (types.length != 1) {
231 throw new Exception('$context: Exactly one type must be specified'); 234 throw new Exception('$context: Exactly one type must be specified');
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 } 600 }
598 }); 601 });
599 for (dom.Element element in childElements) { 602 for (dom.Element element in childElements) {
600 html.append(element); 603 html.append(element);
601 } 604 }
602 Types types = new Types(typeMap, html); 605 Types types = new Types(typeMap, html);
603 types.importUris.addAll(importUris); 606 types.importUris.addAll(importUris);
604 return types; 607 return types;
605 } 608 }
606 } 609 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/doc/api.html ('k') | pkg/analysis_server/tool/spec/spec_input.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698