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

Side by Side Diff: pkg/analyzer/test/src/summary/element_text.dart

Issue 2985503002: Parenthesize expressions as needed in elements text dump. (Closed)
Patch Set: Created 3 years, 5 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
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:io'; 5 import 'dart:io';
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/token.dart'; 8 import 'package:analyzer/dart/ast/token.dart';
9 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/dart/element/type.dart'; 10 import 'package:analyzer/dart/element/type.dart';
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 void writeExportElement(ExportElement e) { 262 void writeExportElement(ExportElement e) {
263 writeMetadata(e, '', '\n'); 263 writeMetadata(e, '', '\n');
264 buffer.write('export '); 264 buffer.write('export ');
265 writeUri(e.exportedLibrary?.source); 265 writeUri(e.exportedLibrary?.source);
266 266
267 e.combinators.forEach(writeNamespaceCombinator); 267 e.combinators.forEach(writeNamespaceCombinator);
268 268
269 buffer.writeln(';'); 269 buffer.writeln(';');
270 } 270 }
271 271
272 void writeExpression(AstNode e) { 272 void writeExpression(AstNode e, [Expression enclosing]) {
273 bool needsParenthesis = e is Expression &&
274 enclosing != null &&
275 e.precedence < enclosing.precedence;
276
277 if (needsParenthesis) {
278 buffer.write('(');
279 }
280
273 if (e is Annotation) { 281 if (e is Annotation) {
274 buffer.write('@'); 282 buffer.write('@');
275 writeExpression(e.name); 283 writeExpression(e.name);
276 if (e.constructorName != null) { 284 if (e.constructorName != null) {
277 buffer.write('.'); 285 buffer.write('.');
278 writeExpression(e.constructorName); 286 writeExpression(e.constructorName);
279 } 287 }
280 if (e.arguments != null) { 288 if (e.arguments != null) {
281 writeList('(', ')', e.arguments.arguments, ', ', writeExpression, 289 writeList('(', ')', e.arguments.arguments, ', ', writeExpression,
282 includeEmpty: true); 290 includeEmpty: true);
283 } 291 }
284 } else if (e is AssertInitializer) { 292 } else if (e is AssertInitializer) {
285 buffer.write('assert('); 293 buffer.write('assert(');
286 writeExpression(e.condition); 294 writeExpression(e.condition);
287 if (e.message != null) { 295 if (e.message != null) {
288 buffer.write(', '); 296 buffer.write(', ');
289 writeExpression(e.message); 297 writeExpression(e.message);
290 } 298 }
291 buffer.write(')'); 299 buffer.write(')');
292 } else if (e is BinaryExpression) { 300 } else if (e is BinaryExpression) {
293 writeExpression(e.leftOperand); 301 writeExpression(e.leftOperand, e);
294 buffer.write(' '); 302 buffer.write(' ');
295 buffer.write(e.operator.lexeme); 303 buffer.write(e.operator.lexeme);
296 buffer.write(' '); 304 buffer.write(' ');
297 writeExpression(e.rightOperand); 305 writeExpression(e.rightOperand, e);
298 } else if (e is BooleanLiteral) { 306 } else if (e is BooleanLiteral) {
299 buffer.write(e.value); 307 buffer.write(e.value);
300 } else if (e is ConditionalExpression) { 308 } else if (e is ConditionalExpression) {
301 writeExpression(e.condition); 309 writeExpression(e.condition);
302 buffer.write(' ? '); 310 buffer.write(' ? ');
303 writeExpression(e.thenExpression); 311 writeExpression(e.thenExpression);
304 buffer.write(' : '); 312 buffer.write(' : ');
305 writeExpression(e.elseExpression); 313 writeExpression(e.elseExpression);
306 } else if (e is ConstructorFieldInitializer) { 314 } else if (e is ConstructorFieldInitializer) {
307 writeExpression(e.fieldName); 315 writeExpression(e.fieldName);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 writeExpression(e.key); 361 writeExpression(e.key);
354 buffer.write(': '); 362 buffer.write(': ');
355 writeExpression(e.value); 363 writeExpression(e.value);
356 } else if (e is NamedExpression) { 364 } else if (e is NamedExpression) {
357 writeExpression(e.name); 365 writeExpression(e.name);
358 buffer.write(e.expression); 366 buffer.write(e.expression);
359 } else if (e is NullLiteral) { 367 } else if (e is NullLiteral) {
360 buffer.write('null'); 368 buffer.write('null');
361 } else if (e is PrefixExpression) { 369 } else if (e is PrefixExpression) {
362 buffer.write(e.operator.lexeme); 370 buffer.write(e.operator.lexeme);
363 writeExpression(e.operand); 371 writeExpression(e.operand, e);
364 } else if (e is PrefixedIdentifier) { 372 } else if (e is PrefixedIdentifier) {
365 writeExpression(e.prefix); 373 writeExpression(e.prefix);
366 buffer.write('.'); 374 buffer.write('.');
367 writeExpression(e.identifier); 375 writeExpression(e.identifier);
368 } else if (e is PropertyAccess) { 376 } else if (e is PropertyAccess) {
369 writeExpression(e.target); 377 writeExpression(e.target, e);
370 buffer.write('.'); 378 buffer.write('.');
371 writeExpression(e.propertyName); 379 writeExpression(e.propertyName);
372 } else if (e is RedirectingConstructorInvocation) { 380 } else if (e is RedirectingConstructorInvocation) {
373 buffer.write('this'); 381 buffer.write('this');
374 if (e.constructorName != null) { 382 if (e.constructorName != null) {
375 buffer.write('.'); 383 buffer.write('.');
376 writeExpression(e.constructorName); 384 writeExpression(e.constructorName);
377 } 385 }
378 writeList('(', ')', e.argumentList.arguments, ', ', writeExpression, 386 writeList('(', ')', e.argumentList.arguments, ', ', writeExpression,
379 includeEmpty: true); 387 includeEmpty: true);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 } else if (e is ThisExpression) { 422 } else if (e is ThisExpression) {
415 buffer.write('this'); 423 buffer.write('this');
416 } else if (e is TypeName) { 424 } else if (e is TypeName) {
417 writeExpression(e.name); 425 writeExpression(e.name);
418 if (e.typeArguments != null) { 426 if (e.typeArguments != null) {
419 writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression); 427 writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression);
420 } 428 }
421 } else { 429 } else {
422 fail('Unsupported expression type: ${e.runtimeType}'); 430 fail('Unsupported expression type: ${e.runtimeType}');
423 } 431 }
432
433 if (needsParenthesis) {
434 buffer.write(')');
435 }
424 } 436 }
425 437
426 void writeFunctionElement(FunctionElement e) { 438 void writeFunctionElement(FunctionElement e) {
427 writeDocumentation(e); 439 writeDocumentation(e);
428 writeMetadata(e, '', '\n'); 440 writeMetadata(e, '', '\n');
429 441
430 writeIf(e.isExternal, 'external '); 442 writeIf(e.isExternal, 'external ');
431 443
432 writeType2(e.returnType); 444 writeType2(e.returnType);
433 445
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 return components.join(';'); 870 return components.join(';');
859 } 871 }
860 } 872 }
861 873
862 class _Replacement { 874 class _Replacement {
863 final int offset; 875 final int offset;
864 final int end; 876 final int end;
865 final String text; 877 final String text;
866 _Replacement(this.offset, this.end, this.text); 878 _Replacement(this.offset, this.end, this.text);
867 } 879 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698