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 |