| 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 'package:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
| 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| 7 import 'package:analyzer/dart/ast/token.dart'; | 7 import 'package:analyzer/dart/ast/token.dart'; |
| 8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
| 9 import 'package:analyzer/dart/element/type.dart'; | 9 import 'package:analyzer/dart/element/type.dart'; |
| 10 import 'package:analyzer/src/dart/element/element.dart'; | 10 import 'package:analyzer/src/dart/element/element.dart'; |
| 11 import 'package:analyzer/src/dart/element/type.dart'; | 11 import 'package:analyzer/src/dart/element/type.dart'; |
| 12 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; | 12 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
| 13 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; | 13 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; |
| 14 import 'package:front_end/src/base/source.dart'; | 14 import 'package:front_end/src/base/source.dart'; |
| 15 import 'package:front_end/src/fasta/kernel/redirecting_factory_body.dart'; |
| 15 import 'package:kernel/kernel.dart' as kernel; | 16 import 'package:kernel/kernel.dart' as kernel; |
| 16 import 'package:kernel/type_environment.dart' as kernel; | 17 import 'package:kernel/type_environment.dart' as kernel; |
| 17 | 18 |
| 18 /** | 19 /** |
| 19 * Object that can resynthesize analyzer [LibraryElement] from Kernel. | 20 * Object that can resynthesize analyzer [LibraryElement] from Kernel. |
| 20 */ | 21 */ |
| 21 class KernelResynthesizer { | 22 class KernelResynthesizer { |
| 22 final AnalysisContext _analysisContext; | 23 final AnalysisContext _analysisContext; |
| 23 final kernel.TypeEnvironment _types; | 24 final kernel.TypeEnvironment _types; |
| 24 final Map<String, kernel.Library> _kernelMap; | 25 final Map<String, kernel.Library> _kernelMap; |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 ConstructorElementImpl constructor, kernel.Initializer k) { | 388 ConstructorElementImpl constructor, kernel.Initializer k) { |
| 388 if (k is kernel.LocalInitializer || | 389 if (k is kernel.LocalInitializer || |
| 389 k is kernel.FieldInitializer && k.isSynthetic || | 390 k is kernel.FieldInitializer && k.isSynthetic || |
| 390 k is kernel.SuperInitializer && k.isSynthetic) { | 391 k is kernel.SuperInitializer && k.isSynthetic) { |
| 391 return null; | 392 return null; |
| 392 } | 393 } |
| 393 return new _ExprBuilder(this).buildInitializer(k); | 394 return new _ExprBuilder(this).buildInitializer(k); |
| 394 } | 395 } |
| 395 | 396 |
| 396 @override | 397 @override |
| 397 ElementImpl getElement(kernel.Reference reference) { | |
| 398 return _getElement(reference.canonicalName); | |
| 399 } | |
| 400 | |
| 401 @override | |
| 402 Expression getExpression(kernel.Expression expression) { | 398 Expression getExpression(kernel.Expression expression) { |
| 403 return new _ExprBuilder(this).build(expression); | 399 return new _ExprBuilder(this).build(expression); |
| 404 } | 400 } |
| 405 | 401 |
| 406 @override | 402 @override |
| 407 InterfaceType getInterfaceType( | 403 InterfaceType getInterfaceType( |
| 408 ElementImpl context, kernel.Supertype kernelType) { | 404 ElementImpl context, kernel.Supertype kernelType) { |
| 409 return _getInterfaceType( | 405 return _getInterfaceType( |
| 410 context, kernelType.className.canonicalName, kernelType.typeArguments); | 406 context, kernelType.className.canonicalName, kernelType.typeArguments); |
| 411 } | 407 } |
| 412 | 408 |
| 413 @override | 409 @override |
| 414 LibraryElement getLibrary(String uriStr) { | 410 LibraryElement getLibrary(String uriStr) { |
| 415 return _resynthesizer.getLibrary(uriStr); | 411 return _resynthesizer.getLibrary(uriStr); |
| 416 } | 412 } |
| 417 | 413 |
| 414 @override |
| 415 ConstructorElementImpl getRedirectedConstructor( |
| 416 kernel.Constructor kernelConstructor, kernel.Procedure kernelFactory) { |
| 417 if (kernelConstructor != null) { |
| 418 for (var initializer in kernelConstructor.initializers) { |
| 419 if (initializer is kernel.RedirectingInitializer) { |
| 420 return _getElement(initializer.targetReference.canonicalName) |
| 421 as ConstructorElementImpl; |
| 422 } |
| 423 } |
| 424 } |
| 425 if (kernelFactory != null) { |
| 426 kernel.Statement body = kernelFactory.function.body; |
| 427 if (body is RedirectingFactoryBody) { |
| 428 kernel.Member target = body.target; |
| 429 if (target != null) { |
| 430 return _getElement(target.reference.canonicalName) |
| 431 as ConstructorElementImpl; |
| 432 } |
| 433 } |
| 434 } |
| 435 return null; |
| 436 } |
| 437 |
| 418 DartType getType(ElementImpl context, kernel.DartType kernelType) { | 438 DartType getType(ElementImpl context, kernel.DartType kernelType) { |
| 419 if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance; | 439 if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance; |
| 420 if (kernelType is kernel.VoidType) return VoidTypeImpl.instance; | 440 if (kernelType is kernel.VoidType) return VoidTypeImpl.instance; |
| 421 | 441 |
| 422 if (kernelType is kernel.InterfaceType) { | 442 if (kernelType is kernel.InterfaceType) { |
| 423 return _getInterfaceType(context, kernelType.className.canonicalName, | 443 return _getInterfaceType(context, kernelType.className.canonicalName, |
| 424 kernelType.typeArguments); | 444 kernelType.typeArguments); |
| 425 } | 445 } |
| 426 | 446 |
| 427 if (kernelType is kernel.TypeParameterType) { | 447 if (kernelType is kernel.TypeParameterType) { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 for (var typeParameter in ctx.typeParameters) { | 582 for (var typeParameter in ctx.typeParameters) { |
| 563 if (typeParameter.name == name) { | 583 if (typeParameter.name == name) { |
| 564 return typeParameter; | 584 return typeParameter; |
| 565 } | 585 } |
| 566 } | 586 } |
| 567 } | 587 } |
| 568 } | 588 } |
| 569 throw new StateError('Not found $kernelTypeParameter in $context'); | 589 throw new StateError('Not found $kernelTypeParameter in $context'); |
| 570 } | 590 } |
| 571 } | 591 } |
| OLD | NEW |