| 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 1552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1563 String name) | 1563 String name) |
| 1564 : _kernelContext = null, | 1564 : _kernelContext = null, |
| 1565 super.forSerialized(null) { | 1565 super.forSerialized(null) { |
| 1566 _enclosingElement = enclosingLibrary; | 1566 _enclosingElement = enclosingLibrary; |
| 1567 _name = name; | 1567 _name = name; |
| 1568 _nameOffset = -1; | 1568 _nameOffset = -1; |
| 1569 } | 1569 } |
| 1570 | 1570 |
| 1571 @override | 1571 @override |
| 1572 List<PropertyAccessorElement> get accessors { | 1572 List<PropertyAccessorElement> get accessors { |
| 1573 if (_unlinkedUnit != null) { | 1573 if (_accessors == null) { |
| 1574 if (_accessors == null) { | 1574 if (_kernelContext != null) { |
| 1575 _explicitTopLevelAccessors ??= |
| 1576 _kernelContext.buildTopLevelAccessors(this); |
| 1577 _explicitTopLevelVariables ??= |
| 1578 _kernelContext.buildTopLevelVariables(this); |
| 1579 } |
| 1580 if (_unlinkedUnit != null) { |
| 1575 _explicitTopLevelAccessors ??= | 1581 _explicitTopLevelAccessors ??= |
| 1576 resynthesizerContext.buildTopLevelAccessors(); | 1582 resynthesizerContext.buildTopLevelAccessors(); |
| 1577 _explicitTopLevelVariables ??= | 1583 _explicitTopLevelVariables ??= |
| 1578 resynthesizerContext.buildTopLevelVariables(); | 1584 resynthesizerContext.buildTopLevelVariables(); |
| 1579 List<PropertyAccessorElementImpl> accessors = | 1585 } |
| 1580 <PropertyAccessorElementImpl>[]; | 1586 if (_explicitTopLevelAccessors != null) { |
| 1581 accessors.addAll(_explicitTopLevelAccessors.accessors); | 1587 _accessors = <PropertyAccessorElementImpl>[] |
| 1582 accessors.addAll(_explicitTopLevelVariables.implicitAccessors); | 1588 ..addAll(_explicitTopLevelAccessors.accessors) |
| 1583 _accessors = accessors; | 1589 ..addAll(_explicitTopLevelVariables.implicitAccessors); |
| 1584 } | 1590 } |
| 1585 } | 1591 } |
| 1586 return _accessors ?? PropertyAccessorElement.EMPTY_LIST; | 1592 return _accessors ?? PropertyAccessorElement.EMPTY_LIST; |
| 1587 } | 1593 } |
| 1588 | 1594 |
| 1589 /** | 1595 /** |
| 1590 * Set the top-level accessors (getters and setters) contained in this | 1596 * Set the top-level accessors (getters and setters) contained in this |
| 1591 * compilation unit to the given [accessors]. | 1597 * compilation unit to the given [accessors]. |
| 1592 */ | 1598 */ |
| 1593 void set accessors(List<PropertyAccessorElement> accessors) { | 1599 void set accessors(List<PropertyAccessorElement> accessors) { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1710 if (_unlinkedPart != null) { | 1716 if (_unlinkedPart != null) { |
| 1711 return _metadata ??= _buildAnnotations( | 1717 return _metadata ??= _buildAnnotations( |
| 1712 library.definingCompilationUnit as CompilationUnitElementImpl, | 1718 library.definingCompilationUnit as CompilationUnitElementImpl, |
| 1713 _unlinkedPart.annotations); | 1719 _unlinkedPart.annotations); |
| 1714 } | 1720 } |
| 1715 return super.metadata; | 1721 return super.metadata; |
| 1716 } | 1722 } |
| 1717 | 1723 |
| 1718 @override | 1724 @override |
| 1719 List<TopLevelVariableElement> get topLevelVariables { | 1725 List<TopLevelVariableElement> get topLevelVariables { |
| 1720 if (_kernelContext != null) { | 1726 if (_variables == null) { |
| 1721 return _variables ??= _kernelContext.library.fields.map((k) { | 1727 if (_kernelContext != null) { |
| 1722 if (k.isConst && k.initializer != null) { | 1728 _explicitTopLevelAccessors ??= |
| 1723 return new ConstTopLevelVariableElementImpl.forKernel(this, k); | 1729 _kernelContext.buildTopLevelAccessors(this); |
| 1724 } else { | 1730 _explicitTopLevelVariables ??= |
| 1725 return new TopLevelVariableElementImpl.forKernel(this, k); | 1731 _kernelContext.buildTopLevelVariables(this); |
| 1726 } | 1732 } |
| 1727 }).toList(growable: false); | 1733 if (_unlinkedUnit != null) { |
| 1728 } | |
| 1729 if (_unlinkedUnit != null) { | |
| 1730 if (_variables == null) { | |
| 1731 _explicitTopLevelAccessors ??= | 1734 _explicitTopLevelAccessors ??= |
| 1732 resynthesizerContext.buildTopLevelAccessors(); | 1735 resynthesizerContext.buildTopLevelAccessors(); |
| 1733 _explicitTopLevelVariables ??= | 1736 _explicitTopLevelVariables ??= |
| 1734 resynthesizerContext.buildTopLevelVariables(); | 1737 resynthesizerContext.buildTopLevelVariables(); |
| 1735 List<TopLevelVariableElementImpl> variables = | 1738 } |
| 1736 <TopLevelVariableElementImpl>[]; | 1739 if (_explicitTopLevelVariables != null) { |
| 1737 variables.addAll(_explicitTopLevelVariables.variables); | 1740 var variables = <TopLevelVariableElement>[] |
| 1738 variables.addAll(_explicitTopLevelAccessors.implicitVariables); | 1741 ..addAll(_explicitTopLevelVariables.variables) |
| 1742 ..addAll(_explicitTopLevelAccessors.implicitVariables); |
| 1743 |
| 1739 // Ensure that getters and setters in different units use | 1744 // Ensure that getters and setters in different units use |
| 1740 // the same top-level variables. | 1745 // the same top-level variables. |
| 1741 (enclosingElement as LibraryElementImpl) | 1746 BuildLibraryElementUtils.patchTopLevelAccessors(library); |
| 1742 .resynthesizerContext | 1747 |
| 1743 .patchTopLevelAccessors(); | 1748 // Apply recorded patches to variables. |
| 1744 _variables = variables; | |
| 1745 _topLevelVariableReplaceMap?.forEach((from, to) { | 1749 _topLevelVariableReplaceMap?.forEach((from, to) { |
| 1746 int index = _variables.indexOf(from); | 1750 int index = variables.indexOf(from); |
| 1747 _variables[index] = to; | 1751 variables[index] = to; |
| 1748 }); | 1752 }); |
| 1749 _topLevelVariableReplaceMap = null; | 1753 _topLevelVariableReplaceMap = null; |
| 1754 |
| 1755 _variables = variables; |
| 1750 } | 1756 } |
| 1751 } | 1757 } |
| 1752 return _variables ?? TopLevelVariableElement.EMPTY_LIST; | 1758 return _variables ?? TopLevelVariableElement.EMPTY_LIST; |
| 1753 } | 1759 } |
| 1754 | 1760 |
| 1755 /** | 1761 /** |
| 1756 * Set the top-level variables contained in this compilation unit to the given | 1762 * Set the top-level variables contained in this compilation unit to the given |
| 1757 * [variables]. | 1763 * [variables]. |
| 1758 */ | 1764 */ |
| 1759 void set topLevelVariables(List<TopLevelVariableElement> variables) { | 1765 void set topLevelVariables(List<TopLevelVariableElement> variables) { |
| (...skipping 4130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5890 } | 5896 } |
| 5891 } | 5897 } |
| 5892 | 5898 |
| 5893 /** | 5899 /** |
| 5894 * The kernel context in which a library is resynthesized. | 5900 * The kernel context in which a library is resynthesized. |
| 5895 */ | 5901 */ |
| 5896 abstract class KernelLibraryResynthesizerContext { | 5902 abstract class KernelLibraryResynthesizerContext { |
| 5897 kernel.Library get library; | 5903 kernel.Library get library; |
| 5898 | 5904 |
| 5899 /** | 5905 /** |
| 5906 * Build explicit top-level property accessors. |
| 5907 */ |
| 5908 UnitExplicitTopLevelAccessors buildTopLevelAccessors( |
| 5909 CompilationUnitElementImpl unit); |
| 5910 |
| 5911 /** |
| 5912 * Build explicit top-level variables. |
| 5913 */ |
| 5914 UnitExplicitTopLevelVariables buildTopLevelVariables( |
| 5915 CompilationUnitElementImpl unit); |
| 5916 |
| 5917 /** |
| 5900 * Return the resynthesized [ConstructorInitializer] for the given Kernel | 5918 * Return the resynthesized [ConstructorInitializer] for the given Kernel |
| 5901 * [initializer], or `null` if synthetic. | 5919 * [initializer], or `null` if synthetic. |
| 5902 */ | 5920 */ |
| 5903 ConstructorInitializer getConstructorInitializer( | 5921 ConstructorInitializer getConstructorInitializer( |
| 5904 ConstructorElementImpl constructor, kernel.Initializer initializer); | 5922 ConstructorElementImpl constructor, kernel.Initializer initializer); |
| 5905 | 5923 |
| 5906 /** | 5924 /** |
| 5907 * Return the [Expression] for the given kernel. | 5925 * Return the [Expression] for the given kernel. |
| 5908 */ | 5926 */ |
| 5909 Expression getExpression(kernel.Expression expression); | 5927 Expression getExpression(kernel.Expression expression); |
| (...skipping 3722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9632 | 9650 |
| 9633 @override | 9651 @override |
| 9634 DartObject computeConstantValue() => null; | 9652 DartObject computeConstantValue() => null; |
| 9635 | 9653 |
| 9636 @override | 9654 @override |
| 9637 void visitChildren(ElementVisitor visitor) { | 9655 void visitChildren(ElementVisitor visitor) { |
| 9638 super.visitChildren(visitor); | 9656 super.visitChildren(visitor); |
| 9639 _initializer?.accept(visitor); | 9657 _initializer?.accept(visitor); |
| 9640 } | 9658 } |
| 9641 } | 9659 } |
| OLD | NEW |