| Index: pkg/analyzer/lib/src/summary/link.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
|
| index 81e3e3a303ac1641073b595aa1829f2830bd80aa..9e9d19e838b779772cd74d2d4c1c84a8723cbd4d 100644
|
| --- a/pkg/analyzer/lib/src/summary/link.dart
|
| +++ b/pkg/analyzer/lib/src/summary/link.dart
|
| @@ -64,6 +64,7 @@ import 'package:analyzer/dart/element/type.dart';
|
| import 'package:analyzer/src/dart/constant/value.dart';
|
| import 'package:analyzer/src/dart/element/element.dart';
|
| import 'package:analyzer/src/dart/element/type.dart';
|
| +import 'package:analyzer/src/generated/engine.dart';
|
| import 'package:analyzer/src/generated/resolver.dart';
|
| import 'package:analyzer/src/generated/utilities_dart.dart';
|
| import 'package:analyzer/src/summary/format.dart';
|
| @@ -1410,6 +1411,22 @@ class ConstVariableNode extends ConstNode {
|
| }
|
|
|
| /**
|
| + * Stub implementation of [AnalysisContext] which provides just those methods
|
| + * needed during linking.
|
| + */
|
| +class ContextForLink implements AnalysisContext {
|
| + final Linker _linker;
|
| +
|
| + ContextForLink(this._linker);
|
| +
|
| + @override
|
| + TypeSystem get typeSystem => _linker.typeSystem;
|
| +
|
| + @override
|
| + noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
| +}
|
| +
|
| +/**
|
| * An instance of [DependencyWalker] contains the core algorithms for
|
| * walking a dependency graph and evaluating nodes in a safe order.
|
| */
|
| @@ -1553,6 +1570,7 @@ abstract class ExecutableElementForLink extends Object
|
| List<TypeParameterElementForLink> _typeParameters;
|
| String _name;
|
| List<ParameterElementForLink> _parameters;
|
| + String _displayName;
|
|
|
| /**
|
| * TODO(paulberry): this won't always be a class element.
|
| @@ -1569,6 +1587,17 @@ abstract class ExecutableElementForLink extends Object
|
| enclosingElement.enclosingElement;
|
|
|
| @override
|
| + String get displayName {
|
| + if (_displayName == null) {
|
| + _displayName = _unlinkedExecutable.name;
|
| + if (_unlinkedExecutable.kind == UnlinkedExecutableKind.setter) {
|
| + _displayName = _displayName.substring(0, _displayName.length - 1);
|
| + }
|
| + }
|
| + return _displayName;
|
| + }
|
| +
|
| + @override
|
| TypeParameterizedElementForLink get enclosingTypeParameterContext =>
|
| enclosingElement;
|
|
|
| @@ -2653,6 +2682,9 @@ abstract class LibraryElementForLink<
|
| }
|
| }
|
|
|
| + @override
|
| + ContextForLink get context => _linker.context;
|
| +
|
| /**
|
| * Get the [UnlinkedUnit] for the defining compilation unit of this library.
|
| */
|
| @@ -2934,6 +2966,7 @@ class Linker {
|
| SpecialTypeElementForLink _voidElement;
|
| SpecialTypeElementForLink _dynamicElement;
|
| SpecialTypeElementForLink _bottomElement;
|
| + ContextForLink _context;
|
|
|
| Linker(Map<String, LinkedLibraryBuilder> linkedLibraries, this.getDependency,
|
| this.getUnit, this.strongMode) {
|
| @@ -2960,6 +2993,12 @@ class Linker {
|
| new SpecialTypeElementForLink(this, BottomTypeImpl.instance);
|
|
|
| /**
|
| + * Get a stub implementation of [AnalysisContext] which can be used during
|
| + * linking.
|
| + */
|
| + get context => _context ??= new ContextForLink(this);
|
| +
|
| + /**
|
| * Get the library element for `dart:core`.
|
| */
|
| LibraryElementForLink get coreLibrary =>
|
|
|