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; |