Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(843)

Unified Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2987863002: Resynthesize factoring constructor redirects from Kernel. (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/kernel/resynthesize.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/dart/element/element.dart
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index a634ab8f4310d021a980cf76905effdf9d2add24..ca835c3b484083fcb229db2c3cab360583ec5b2c 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -571,6 +571,7 @@ class ClassElementImpl extends AbstractClassElementImpl
_constructors = <ConstructorElement>[]
..addAll(constructors)
..addAll(factories);
+ _constructors.sort((a, b) => a.nameOffset - b.nameOffset);
}
if (_unlinkedClass != null && _constructors == null) {
_constructors = _unlinkedClass.executables
@@ -1294,6 +1295,9 @@ class ClassElementImpl extends AbstractClassElementImpl
if (_kernel != null) {
// Build explicit fields and implicit property accessors.
for (var k in _kernel.fields) {
+ if (k.name.name.startsWith('_redirecting#')) {
+ continue;
+ }
var field = new FieldElementImpl.forKernelFactory(this, k);
explicitFields.add(field);
implicitAccessors.add(
@@ -2217,11 +2221,15 @@ class ConstructorElementImpl extends ExecutableElementImpl
List<ConstructorInitializer> get constantInitializers {
if (_constantInitializers == null) {
if (_kernelConstructor != null) {
- var context = enclosingUnit._kernelContext;
- _constantInitializers = _kernelConstructor.initializers
- .map((k) => context.getConstructorInitializer(this, k))
- .where((i) => i != null)
- .toList();
+ if (_kernelConstructor.isConst) {
+ var context = enclosingUnit._kernelContext;
+ _constantInitializers = _kernelConstructor.initializers
+ .map((k) => context.getConstructorInitializer(this, k))
+ .where((i) => i != null)
+ .toList();
+ } else {
+ _constantInitializers = const <ConstructorInitializer>[];
+ }
}
if (serializedExecutable != null) {
_constantInitializers = serializedExecutable.constantInitializers
@@ -2359,14 +2367,9 @@ class ConstructorElementImpl extends ExecutableElementImpl
@override
ConstructorElement get redirectedConstructor {
if (_redirectedConstructor == null) {
- if (_kernelConstructor != null) {
- for (var initializer in _kernelConstructor.initializers) {
- if (initializer is kernel.RedirectingInitializer) {
- return _redirectedConstructor = enclosingUnit._kernelContext
- .getElement(initializer.targetReference)
- as ConstructorElementImpl;
- }
- }
+ if (_kernelConstructor != null || _kernelFactory != null) {
+ _redirectedConstructor = enclosingUnit._kernelContext
+ .getRedirectedConstructor(_kernelConstructor, _kernelFactory);
}
if (serializedExecutable != null) {
if (serializedExecutable.isRedirectedConstructor) {
@@ -4098,6 +4101,9 @@ abstract class ExecutableElementImpl extends ElementImpl
@override
int get nameOffset {
int offset = super.nameOffset;
+ if (_kernel != null) {
+ return _kernel.fileOffset;
+ }
if (offset == 0 && serializedExecutable != null) {
return serializedExecutable.nameOffset;
}
@@ -5898,11 +5904,6 @@ abstract class KernelLibraryResynthesizerContext {
ConstructorElementImpl constructor, kernel.Initializer initializer);
/**
- * Return the [Element] referenced by the given [reference].
- */
- ElementImpl getElement(kernel.Reference reference);
-
- /**
* Return the [Expression] for the given kernel.
*/
Expression getExpression(kernel.Expression expression);
@@ -5919,6 +5920,13 @@ abstract class KernelLibraryResynthesizerContext {
LibraryElement getLibrary(String uriStr);
/**
+ * Return the [ConstructorElementImpl] to which the given [kernelConstructor]
+ * or [kernelFactory] redirects.
+ */
+ ConstructorElementImpl getRedirectedConstructor(
+ kernel.Constructor kernelConstructor, kernel.Procedure kernelFactory);
+
+ /**
* Return the [DartType] for the given Kernel [type], or `null` if the [type]
* does not correspond to a [DartType].
*/
@@ -8353,6 +8361,13 @@ class PrefixElementImpl extends ElementImpl implements PrefixElement {
super(name, nameOffset);
/**
+ * Initialize using the given kernel.
+ */
+ PrefixElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
+ : _unlinkedImport = null,
+ super.forSerialized(enclosingLibrary);
+
+ /**
* Initialize a newly created prefix element to have the given [name].
*/
PrefixElementImpl.forNode(Identifier name)
@@ -8368,13 +8383,6 @@ class PrefixElementImpl extends ElementImpl implements PrefixElement {
: _kernel = null,
super.forSerialized(enclosingLibrary);
- /**
- * Initialize using the given kernel.
- */
- PrefixElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
- : _unlinkedImport = null,
- super.forSerialized(enclosingLibrary);
-
@override
String get displayName => name;
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/kernel/resynthesize.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698