| OLD | NEW |
| 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 library analyzer.src.dart.element.element; | 5 library analyzer.src.dart.element.element; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import 'dart:math' show min; | 8 import 'dart:math' show min; |
| 9 | 9 |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 /** | 469 /** |
| 470 * Initialize a newly created class element to have the given [name] at the | 470 * Initialize a newly created class element to have the given [name] at the |
| 471 * given [offset] in the file that contains the declaration of this element. | 471 * given [offset] in the file that contains the declaration of this element. |
| 472 */ | 472 */ |
| 473 ClassElementImpl(String name, int offset) | 473 ClassElementImpl(String name, int offset) |
| 474 : _unlinkedClass = null, | 474 : _unlinkedClass = null, |
| 475 _kernel = null, | 475 _kernel = null, |
| 476 super(name, offset); | 476 super(name, offset); |
| 477 | 477 |
| 478 /** | 478 /** |
| 479 * Initialize using the given kernel. |
| 480 */ |
| 481 ClassElementImpl.forKernel( |
| 482 CompilationUnitElementImpl enclosingUnit, this._kernel) |
| 483 : _unlinkedClass = null, |
| 484 super.forSerialized(enclosingUnit); |
| 485 |
| 486 /** |
| 479 * Initialize a newly created class element to have the given [name]. | 487 * Initialize a newly created class element to have the given [name]. |
| 480 */ | 488 */ |
| 481 ClassElementImpl.forNode(Identifier name) | 489 ClassElementImpl.forNode(Identifier name) |
| 482 : _unlinkedClass = null, | 490 : _unlinkedClass = null, |
| 483 _kernel = null, | 491 _kernel = null, |
| 484 super.forNode(name); | 492 super.forNode(name); |
| 485 | 493 |
| 486 /** | 494 /** |
| 487 * Initialize using the given serialized information. | 495 * Initialize using the given serialized information. |
| 488 */ | 496 */ |
| 489 ClassElementImpl.forSerialized( | 497 ClassElementImpl.forSerialized( |
| 490 this._unlinkedClass, CompilationUnitElementImpl enclosingUnit) | 498 this._unlinkedClass, CompilationUnitElementImpl enclosingUnit) |
| 491 : _kernel = null, | 499 : _kernel = null, |
| 492 super.forSerialized(enclosingUnit); | 500 super.forSerialized(enclosingUnit); |
| 493 | 501 |
| 494 /** | 502 /** |
| 495 * Initialize using the given kernel. | |
| 496 */ | |
| 497 ClassElementImpl.forKernel( | |
| 498 CompilationUnitElementImpl enclosingUnit, this._kernel) | |
| 499 : _unlinkedClass = null, | |
| 500 super.forSerialized(enclosingUnit); | |
| 501 | |
| 502 /** | |
| 503 * Set whether this class is abstract. | 503 * Set whether this class is abstract. |
| 504 */ | 504 */ |
| 505 void set abstract(bool isAbstract) { | 505 void set abstract(bool isAbstract) { |
| 506 _assertNotResynthesized(_unlinkedClass); | 506 _assertNotResynthesized(_unlinkedClass); |
| 507 setModifier(Modifier.ABSTRACT, isAbstract); | 507 setModifier(Modifier.ABSTRACT, isAbstract); |
| 508 } | 508 } |
| 509 | 509 |
| 510 @override | 510 @override |
| 511 List<PropertyAccessorElement> get accessors { | 511 List<PropertyAccessorElement> get accessors { |
| 512 if (_unlinkedClass != null && _accessors == null) { | 512 if (_unlinkedClass != null && _accessors == null) { |
| (...skipping 877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1390 * [name]. | 1390 * [name]. |
| 1391 */ | 1391 */ |
| 1392 CompilationUnitElementImpl(String name) | 1392 CompilationUnitElementImpl(String name) |
| 1393 : resynthesizerContext = null, | 1393 : resynthesizerContext = null, |
| 1394 _unlinkedUnit = null, | 1394 _unlinkedUnit = null, |
| 1395 _unlinkedPart = null, | 1395 _unlinkedPart = null, |
| 1396 _kernelContext = null, | 1396 _kernelContext = null, |
| 1397 super(name, -1); | 1397 super(name, -1); |
| 1398 | 1398 |
| 1399 /** | 1399 /** |
| 1400 * Initialize using the given serialized information. | 1400 * Initialize using the given kernel information. |
| 1401 */ | 1401 */ |
| 1402 CompilationUnitElementImpl.forSerialized( | 1402 CompilationUnitElementImpl.forKernel( |
| 1403 LibraryElementImpl enclosingLibrary, | 1403 LibraryElementImpl enclosingLibrary, this._kernelContext, String name) |
| 1404 this.resynthesizerContext, | 1404 : resynthesizerContext = null, |
| 1405 this._unlinkedUnit, | 1405 _unlinkedUnit = null, |
| 1406 this._unlinkedPart, | 1406 _unlinkedPart = null, |
| 1407 String name) | |
| 1408 : _kernelContext = null, | |
| 1409 super.forSerialized(null) { | 1407 super.forSerialized(null) { |
| 1410 _enclosingElement = enclosingLibrary; | 1408 _enclosingElement = enclosingLibrary; |
| 1411 _name = name; | 1409 _name = name; |
| 1412 _nameOffset = -1; | 1410 _nameOffset = -1; |
| 1413 } | 1411 } |
| 1414 | 1412 |
| 1415 /** | 1413 /** |
| 1416 * Initialize using the given kernel information. | 1414 * Initialize using the given serialized information. |
| 1417 */ | 1415 */ |
| 1418 CompilationUnitElementImpl.forKernel( | 1416 CompilationUnitElementImpl.forSerialized( |
| 1419 LibraryElementImpl enclosingLibrary, this._kernelContext, String name) | 1417 LibraryElementImpl enclosingLibrary, |
| 1420 : resynthesizerContext = null, | 1418 this.resynthesizerContext, |
| 1421 _unlinkedUnit = null, | 1419 this._unlinkedUnit, |
| 1422 _unlinkedPart = null, | 1420 this._unlinkedPart, |
| 1421 String name) |
| 1422 : _kernelContext = null, |
| 1423 super.forSerialized(null) { | 1423 super.forSerialized(null) { |
| 1424 _enclosingElement = enclosingLibrary; | 1424 _enclosingElement = enclosingLibrary; |
| 1425 _name = name; | 1425 _name = name; |
| 1426 _nameOffset = -1; | 1426 _nameOffset = -1; |
| 1427 } | 1427 } |
| 1428 | 1428 |
| 1429 @override | 1429 @override |
| 1430 List<PropertyAccessorElement> get accessors { | 1430 List<PropertyAccessorElement> get accessors { |
| 1431 if (_unlinkedUnit != null) { | 1431 if (_unlinkedUnit != null) { |
| 1432 if (_accessors == null) { | 1432 if (_accessors == null) { |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2011 | 2011 |
| 2012 /** | 2012 /** |
| 2013 * Initialize a newly created constructor element to have the given [name] and | 2013 * Initialize a newly created constructor element to have the given [name] and |
| 2014 * [offset]. | 2014 * [offset]. |
| 2015 */ | 2015 */ |
| 2016 ConstructorElementImpl(String name, int offset) | 2016 ConstructorElementImpl(String name, int offset) |
| 2017 : _kernel = null, | 2017 : _kernel = null, |
| 2018 super(name, offset); | 2018 super(name, offset); |
| 2019 | 2019 |
| 2020 /** | 2020 /** |
| 2021 * Initialize using the given serialized information. |
| 2022 */ |
| 2023 ConstructorElementImpl.forKernel( |
| 2024 ClassElementImpl enclosingClass, this._kernel) |
| 2025 : super.forKernel(enclosingClass, _kernel) { |
| 2026 isSynthetic = _kernel.isSyntheticDefault; |
| 2027 } |
| 2028 |
| 2029 /** |
| 2021 * Initialize a newly created constructor element to have the given [name]. | 2030 * Initialize a newly created constructor element to have the given [name]. |
| 2022 */ | 2031 */ |
| 2023 ConstructorElementImpl.forNode(Identifier name) | 2032 ConstructorElementImpl.forNode(Identifier name) |
| 2024 : _kernel = null, | 2033 : _kernel = null, |
| 2025 super.forNode(name); | 2034 super.forNode(name); |
| 2026 | 2035 |
| 2027 /** | 2036 /** |
| 2028 * Initialize using the given serialized information. | 2037 * Initialize using the given serialized information. |
| 2029 */ | 2038 */ |
| 2030 ConstructorElementImpl.forSerialized( | 2039 ConstructorElementImpl.forSerialized( |
| 2031 UnlinkedExecutable serializedExecutable, ClassElementImpl enclosingClass) | 2040 UnlinkedExecutable serializedExecutable, ClassElementImpl enclosingClass) |
| 2032 : _kernel = null, | 2041 : _kernel = null, |
| 2033 super.forSerialized(serializedExecutable, enclosingClass); | 2042 super.forSerialized(serializedExecutable, enclosingClass); |
| 2034 | 2043 |
| 2035 /** | 2044 /** |
| 2036 * Initialize using the given serialized information. | |
| 2037 */ | |
| 2038 ConstructorElementImpl.forKernel( | |
| 2039 ClassElementImpl enclosingClass, this._kernel) | |
| 2040 : super.forSerialized(null, enclosingClass) { | |
| 2041 isSynthetic = _kernel.isSyntheticDefault; | |
| 2042 } | |
| 2043 | |
| 2044 /** | |
| 2045 * Return the constant initializers for this element, which will be empty if | 2045 * Return the constant initializers for this element, which will be empty if |
| 2046 * there are no initializers, or `null` if there was an error in the source. | 2046 * there are no initializers, or `null` if there was an error in the source. |
| 2047 */ | 2047 */ |
| 2048 List<ConstructorInitializer> get constantInitializers { | 2048 List<ConstructorInitializer> get constantInitializers { |
| 2049 if (serializedExecutable != null && _constantInitializers == null) { | 2049 if (serializedExecutable != null && _constantInitializers == null) { |
| 2050 _constantInitializers ??= serializedExecutable.constantInitializers | 2050 _constantInitializers ??= serializedExecutable.constantInitializers |
| 2051 .map((i) => _buildConstructorInitializer(i)) | 2051 .map((i) => _buildConstructorInitializer(i)) |
| 2052 .toList(growable: false); | 2052 .toList(growable: false); |
| 2053 } | 2053 } |
| 2054 return _constantInitializers; | 2054 return _constantInitializers; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2071 /** | 2071 /** |
| 2072 * Set whether this constructor represents a factory method. | 2072 * Set whether this constructor represents a factory method. |
| 2073 */ | 2073 */ |
| 2074 void set factory(bool isFactory) { | 2074 void set factory(bool isFactory) { |
| 2075 _assertNotResynthesized(serializedExecutable); | 2075 _assertNotResynthesized(serializedExecutable); |
| 2076 setModifier(Modifier.FACTORY, isFactory); | 2076 setModifier(Modifier.FACTORY, isFactory); |
| 2077 } | 2077 } |
| 2078 | 2078 |
| 2079 @override | 2079 @override |
| 2080 bool get isConst { | 2080 bool get isConst { |
| 2081 if (_kernel != null) { |
| 2082 return _kernel.isConst; |
| 2083 } |
| 2081 if (serializedExecutable != null) { | 2084 if (serializedExecutable != null) { |
| 2082 return serializedExecutable.isConst; | 2085 return serializedExecutable.isConst; |
| 2083 } | 2086 } |
| 2084 return hasModifier(Modifier.CONST); | 2087 return hasModifier(Modifier.CONST); |
| 2085 } | 2088 } |
| 2086 | 2089 |
| 2087 /** | 2090 /** |
| 2088 * Set whether this constructor represents a 'const' constructor. | 2091 * Set whether this constructor represents a 'const' constructor. |
| 2089 */ | 2092 */ |
| 2090 void set isConst(bool isConst) { | 2093 void set isConst(bool isConst) { |
| (...skipping 1564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3655 /** | 3658 /** |
| 3656 * Initialize a newly created executable element to have the given [name] and | 3659 * Initialize a newly created executable element to have the given [name] and |
| 3657 * [offset]. | 3660 * [offset]. |
| 3658 */ | 3661 */ |
| 3659 ExecutableElementImpl(String name, int offset) | 3662 ExecutableElementImpl(String name, int offset) |
| 3660 : serializedExecutable = null, | 3663 : serializedExecutable = null, |
| 3661 _kernel = null, | 3664 _kernel = null, |
| 3662 super(name, offset); | 3665 super(name, offset); |
| 3663 | 3666 |
| 3664 /** | 3667 /** |
| 3668 * Initialize using the given kernel. |
| 3669 */ |
| 3670 ExecutableElementImpl.forKernel(ElementImpl enclosingElement, this._kernel) |
| 3671 : serializedExecutable = null, |
| 3672 super.forSerialized(enclosingElement); |
| 3673 |
| 3674 /** |
| 3665 * Initialize a newly created executable element to have the given [name]. | 3675 * Initialize a newly created executable element to have the given [name]. |
| 3666 */ | 3676 */ |
| 3667 ExecutableElementImpl.forNode(Identifier name) | 3677 ExecutableElementImpl.forNode(Identifier name) |
| 3668 : serializedExecutable = null, | 3678 : serializedExecutable = null, |
| 3669 _kernel = null, | 3679 _kernel = null, |
| 3670 super.forNode(name); | 3680 super.forNode(name); |
| 3671 | 3681 |
| 3672 /** | 3682 /** |
| 3673 * Initialize using the given serialized information. | 3683 * Initialize using the given serialized information. |
| 3674 */ | 3684 */ |
| 3675 ExecutableElementImpl.forSerialized( | 3685 ExecutableElementImpl.forSerialized( |
| 3676 this.serializedExecutable, ElementImpl enclosingElement) | 3686 this.serializedExecutable, ElementImpl enclosingElement) |
| 3677 : _kernel = null, | 3687 : _kernel = null, |
| 3678 super.forSerialized(enclosingElement); | 3688 super.forSerialized(enclosingElement); |
| 3679 | 3689 |
| 3680 /** | 3690 /** |
| 3681 * Initialize using the given kernel. | |
| 3682 */ | |
| 3683 ExecutableElementImpl.forKernel(ElementImpl enclosingElement, this._kernel) | |
| 3684 : serializedExecutable = null, | |
| 3685 super.forSerialized(enclosingElement); | |
| 3686 | |
| 3687 /** | |
| 3688 * Set whether this executable element's body is asynchronous. | 3691 * Set whether this executable element's body is asynchronous. |
| 3689 */ | 3692 */ |
| 3690 void set asynchronous(bool isAsynchronous) { | 3693 void set asynchronous(bool isAsynchronous) { |
| 3691 _assertNotResynthesized(serializedExecutable); | 3694 _assertNotResynthesized(serializedExecutable); |
| 3692 setModifier(Modifier.ASYNCHRONOUS, isAsynchronous); | 3695 setModifier(Modifier.ASYNCHRONOUS, isAsynchronous); |
| 3693 } | 3696 } |
| 3694 | 3697 |
| 3695 @override | 3698 @override |
| 3696 int get codeLength { | 3699 int get codeLength { |
| 3697 if (serializedExecutable != null) { | 3700 if (serializedExecutable != null) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 3708 return super.codeOffset; | 3711 return super.codeOffset; |
| 3709 } | 3712 } |
| 3710 | 3713 |
| 3711 void set declaredReturnType(DartType returnType) { | 3714 void set declaredReturnType(DartType returnType) { |
| 3712 _assertNotResynthesized(serializedExecutable); | 3715 _assertNotResynthesized(serializedExecutable); |
| 3713 _declaredReturnType = _checkElementOfType(returnType); | 3716 _declaredReturnType = _checkElementOfType(returnType); |
| 3714 } | 3717 } |
| 3715 | 3718 |
| 3716 @override | 3719 @override |
| 3717 String get displayName { | 3720 String get displayName { |
| 3721 if (_kernel != null) { |
| 3722 return _kernel.name.name; |
| 3723 } |
| 3718 if (serializedExecutable != null) { | 3724 if (serializedExecutable != null) { |
| 3719 return serializedExecutable.name; | 3725 return serializedExecutable.name; |
| 3720 } | 3726 } |
| 3721 return super.displayName; | 3727 return super.displayName; |
| 3722 } | 3728 } |
| 3723 | 3729 |
| 3724 @override | 3730 @override |
| 3725 String get documentationComment { | 3731 String get documentationComment { |
| 3726 if (serializedExecutable != null) { | 3732 if (serializedExecutable != null) { |
| 3727 return serializedExecutable?.documentationComment?.text; | 3733 return serializedExecutable?.documentationComment?.text; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3794 @override | 3800 @override |
| 3795 bool get isAsynchronous { | 3801 bool get isAsynchronous { |
| 3796 if (serializedExecutable != null) { | 3802 if (serializedExecutable != null) { |
| 3797 return serializedExecutable.isAsynchronous; | 3803 return serializedExecutable.isAsynchronous; |
| 3798 } | 3804 } |
| 3799 return hasModifier(Modifier.ASYNCHRONOUS); | 3805 return hasModifier(Modifier.ASYNCHRONOUS); |
| 3800 } | 3806 } |
| 3801 | 3807 |
| 3802 @override | 3808 @override |
| 3803 bool get isExternal { | 3809 bool get isExternal { |
| 3810 if (_kernel != null) { |
| 3811 return _kernel.isExternal; |
| 3812 } |
| 3804 if (serializedExecutable != null) { | 3813 if (serializedExecutable != null) { |
| 3805 return serializedExecutable.isExternal; | 3814 return serializedExecutable.isExternal; |
| 3806 } | 3815 } |
| 3807 return hasModifier(Modifier.EXTERNAL); | 3816 return hasModifier(Modifier.EXTERNAL); |
| 3808 } | 3817 } |
| 3809 | 3818 |
| 3810 @override | 3819 @override |
| 3811 bool get isGenerator { | 3820 bool get isGenerator { |
| 3812 if (serializedExecutable != null) { | 3821 if (serializedExecutable != null) { |
| 3813 return serializedExecutable.isGenerator; | 3822 return serializedExecutable.isGenerator; |
| (...skipping 1729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5543 : new HideElementCombinatorImpl.forSerialized(unlinkedCombinator); | 5552 : new HideElementCombinatorImpl.forSerialized(unlinkedCombinator); |
| 5544 } | 5553 } |
| 5545 return combinators; | 5554 return combinators; |
| 5546 } else { | 5555 } else { |
| 5547 return const <NamespaceCombinator>[]; | 5556 return const <NamespaceCombinator>[]; |
| 5548 } | 5557 } |
| 5549 } | 5558 } |
| 5550 } | 5559 } |
| 5551 | 5560 |
| 5552 /** | 5561 /** |
| 5562 * The kernel context in which a library is resynthesized. |
| 5563 */ |
| 5564 abstract class KernelLibraryResynthesizerContext { |
| 5565 kernel.Library get library; |
| 5566 } |
| 5567 |
| 5568 /** |
| 5553 * A concrete implementation of a [LabelElement]. | 5569 * A concrete implementation of a [LabelElement]. |
| 5554 */ | 5570 */ |
| 5555 class LabelElementImpl extends ElementImpl implements LabelElement { | 5571 class LabelElementImpl extends ElementImpl implements LabelElement { |
| 5556 /** | 5572 /** |
| 5557 * A flag indicating whether this label is associated with a `switch` | 5573 * A flag indicating whether this label is associated with a `switch` |
| 5558 * statement. | 5574 * statement. |
| 5559 */ | 5575 */ |
| 5560 // TODO(brianwilkerson) Make this a modifier. | 5576 // TODO(brianwilkerson) Make this a modifier. |
| 5561 final bool _onSwitchStatement; | 5577 final bool _onSwitchStatement; |
| 5562 | 5578 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5703 * Initialize a newly created library element in the given [context] to have | 5719 * Initialize a newly created library element in the given [context] to have |
| 5704 * the given [name] and [offset]. | 5720 * the given [name] and [offset]. |
| 5705 */ | 5721 */ |
| 5706 LibraryElementImpl(this.context, String name, int offset, this.nameLength) | 5722 LibraryElementImpl(this.context, String name, int offset, this.nameLength) |
| 5707 : resynthesizerContext = null, | 5723 : resynthesizerContext = null, |
| 5708 _kernelContext = null, | 5724 _kernelContext = null, |
| 5709 _unlinkedDefiningUnit = null, | 5725 _unlinkedDefiningUnit = null, |
| 5710 super(name, offset); | 5726 super(name, offset); |
| 5711 | 5727 |
| 5712 /** | 5728 /** |
| 5729 * Initialize using the given kernel information. |
| 5730 */ |
| 5731 LibraryElementImpl.forKernel(this.context, this._kernelContext) |
| 5732 : resynthesizerContext = null, |
| 5733 _unlinkedDefiningUnit = null, |
| 5734 nameLength = _kernelContext.library.name?.length ?? 0, |
| 5735 super.forSerialized(null) { |
| 5736 _name = _kernelContext.library.name ?? ''; |
| 5737 _nameOffset = _kernelContext.library.fileOffset; |
| 5738 setResolutionCapability( |
| 5739 LibraryResolutionCapability.resolvedTypeNames, true); |
| 5740 setResolutionCapability( |
| 5741 LibraryResolutionCapability.constantExpressions, true); |
| 5742 |
| 5743 definingCompilationUnit = new CompilationUnitElementImpl.forKernel( |
| 5744 this, _kernelContext, '<no-name>'); |
| 5745 |
| 5746 // TODO(scheglov) how to support parts? |
| 5747 } |
| 5748 |
| 5749 /** |
| 5713 * Initialize a newly created library element in the given [context] to have | 5750 * Initialize a newly created library element in the given [context] to have |
| 5714 * the given [name]. | 5751 * the given [name]. |
| 5715 */ | 5752 */ |
| 5716 LibraryElementImpl.forNode(this.context, LibraryIdentifier name) | 5753 LibraryElementImpl.forNode(this.context, LibraryIdentifier name) |
| 5717 : nameLength = name != null ? name.length : 0, | 5754 : nameLength = name != null ? name.length : 0, |
| 5718 resynthesizerContext = null, | 5755 resynthesizerContext = null, |
| 5719 _kernelContext = null, | 5756 _kernelContext = null, |
| 5720 _unlinkedDefiningUnit = null, | 5757 _unlinkedDefiningUnit = null, |
| 5721 super.forNode(name); | 5758 super.forNode(name); |
| 5722 | 5759 |
| 5723 /** | 5760 /** |
| 5724 * Initialize using the given serialized information. | 5761 * Initialize using the given serialized information. |
| 5725 */ | 5762 */ |
| 5726 LibraryElementImpl.forSerialized(this.context, String name, int offset, | 5763 LibraryElementImpl.forSerialized(this.context, String name, int offset, |
| 5727 this.nameLength, this.resynthesizerContext, this._unlinkedDefiningUnit) | 5764 this.nameLength, this.resynthesizerContext, this._unlinkedDefiningUnit) |
| 5728 : _kernelContext = null, | 5765 : _kernelContext = null, |
| 5729 super.forSerialized(null) { | 5766 super.forSerialized(null) { |
| 5730 _name = name; | 5767 _name = name; |
| 5731 _nameOffset = offset; | 5768 _nameOffset = offset; |
| 5732 setResolutionCapability( | 5769 setResolutionCapability( |
| 5733 LibraryResolutionCapability.resolvedTypeNames, true); | 5770 LibraryResolutionCapability.resolvedTypeNames, true); |
| 5734 setResolutionCapability( | 5771 setResolutionCapability( |
| 5735 LibraryResolutionCapability.constantExpressions, true); | 5772 LibraryResolutionCapability.constantExpressions, true); |
| 5736 } | 5773 } |
| 5737 | 5774 |
| 5738 /** | |
| 5739 * Initialize using the given kernel information. | |
| 5740 */ | |
| 5741 LibraryElementImpl.forKernel(this.context, this._kernelContext) | |
| 5742 : resynthesizerContext = null, | |
| 5743 _unlinkedDefiningUnit = null, | |
| 5744 nameLength = _kernelContext.library.name?.length ?? 0, | |
| 5745 super.forSerialized(null) { | |
| 5746 _name = _kernelContext.library.name ?? ''; | |
| 5747 _nameOffset = _kernelContext.library.fileOffset; | |
| 5748 setResolutionCapability( | |
| 5749 LibraryResolutionCapability.resolvedTypeNames, true); | |
| 5750 setResolutionCapability( | |
| 5751 LibraryResolutionCapability.constantExpressions, true); | |
| 5752 | |
| 5753 definingCompilationUnit = new CompilationUnitElementImpl.forKernel( | |
| 5754 this, _kernelContext, '<no-name>'); | |
| 5755 | |
| 5756 // TODO(scheglov) how to support parts? | |
| 5757 } | |
| 5758 | |
| 5759 @override | 5775 @override |
| 5760 int get codeLength { | 5776 int get codeLength { |
| 5761 CompilationUnitElement unit = _definingCompilationUnit; | 5777 CompilationUnitElement unit = _definingCompilationUnit; |
| 5762 if (unit is CompilationUnitElementImpl) { | 5778 if (unit is CompilationUnitElementImpl) { |
| 5763 return unit.codeLength; | 5779 return unit.codeLength; |
| 5764 } | 5780 } |
| 5765 return null; | 5781 return null; |
| 5766 } | 5782 } |
| 5767 | 5783 |
| 5768 @override | 5784 @override |
| (...skipping 3215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8984 | 9000 |
| 8985 @override | 9001 @override |
| 8986 DartObject computeConstantValue() => null; | 9002 DartObject computeConstantValue() => null; |
| 8987 | 9003 |
| 8988 @override | 9004 @override |
| 8989 void visitChildren(ElementVisitor visitor) { | 9005 void visitChildren(ElementVisitor visitor) { |
| 8990 super.visitChildren(visitor); | 9006 super.visitChildren(visitor); |
| 8991 _initializer?.accept(visitor); | 9007 _initializer?.accept(visitor); |
| 8992 } | 9008 } |
| 8993 } | 9009 } |
| 8994 | |
| 8995 /** | |
| 8996 * The kernel context in which a library is resynthesized. | |
| 8997 */ | |
| 8998 abstract class KernelLibraryResynthesizerContext { | |
| 8999 kernel.Library get library; | |
| 9000 } | |
| OLD | NEW |