| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |