Chromium Code Reviews| 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 97b3b2fc9e52ea23d732e0f84adacef2ba2cca11..6421123d37a41db99d34d31debfff066b1a24d20 100644 |
| --- a/pkg/analyzer/lib/src/dart/element/element.dart |
| +++ b/pkg/analyzer/lib/src/dart/element/element.dart |
| @@ -839,6 +839,14 @@ class ClassElementImpl extends AbstractClassElementImpl |
| @override |
| List<MethodElement> get methods { |
| + if (_kernel != null) { |
| + _methods ??= _kernel.procedures |
| + .where((k) => |
| + k.kind == kernel.ProcedureKind.Method || |
| + k.kind == kernel.ProcedureKind.Operator) |
| + .map((k) => new MethodElementImpl.forKernel(this, k)) |
| + .toList(growable: false); |
| + } |
| if (_unlinkedClass != null) { |
| _methods ??= _unlinkedClass.executables |
| .where((e) => e.kind == UnlinkedExecutableKind.functionOrMethod) |
| @@ -3838,6 +3846,9 @@ abstract class ExecutableElementImpl extends ElementImpl |
| @override |
| bool get isAbstract { |
| + if (_kernel != null) { |
| + return _kernel.isAbstract; |
| + } |
| if (serializedExecutable != null) { |
| return serializedExecutable.isAbstract; |
| } |
| @@ -3846,6 +3857,11 @@ abstract class ExecutableElementImpl extends ElementImpl |
| @override |
| bool get isAsynchronous { |
| + if (_kernel != null) { |
| + kernel.AsyncMarker marker = _kernel.function.asyncMarker; |
| + return marker == kernel.AsyncMarker.Async || |
| + marker == kernel.AsyncMarker.AsyncStar; |
| + } |
| if (serializedExecutable != null) { |
| return serializedExecutable.isAsynchronous; |
| } |
| @@ -3865,6 +3881,9 @@ abstract class ExecutableElementImpl extends ElementImpl |
| @override |
| bool get isGenerator { |
| + if (_kernel != null) { |
| + return _kernel.function.asyncMarker == kernel.AsyncMarker.AsyncStar; |
|
Paul Berry
2017/07/17 15:22:50
... || _kernel.function.asyncMarker == kernel.Asyn
scheglov
2017/07/17 15:37:20
Done.
|
| + } |
| if (serializedExecutable != null) { |
| return serializedExecutable.isGenerator; |
| } |
| @@ -3932,6 +3951,10 @@ abstract class ExecutableElementImpl extends ElementImpl |
| @override |
| DartType get returnType { |
| + if (_kernel != null) { |
| + return _returnType ??= enclosingUnit._kernelContext |
| + .getType(this, _kernel.function.returnType); |
| + } |
| if (serializedExecutable != null && |
| _declaredReturnType == null && |
| _returnType == null) { |
| @@ -6549,12 +6572,24 @@ class LocalVariableElementImpl extends NonParameterVariableElementImpl |
| */ |
| class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
| /** |
| + * The kernel of the element. |
| + */ |
| + kernel.Procedure _kernelProcedure; |
| + |
| + /** |
| * Initialize a newly created method element to have the given [name] at the |
| * given [offset]. |
| */ |
| MethodElementImpl(String name, int offset) : super(name, offset); |
| /** |
| + * Initialize using the given kernel. |
| + */ |
| + MethodElementImpl.forKernel( |
| + ClassElementImpl enclosingClass, this._kernelProcedure) |
| + : super.forKernel(enclosingClass, _kernelProcedure); |
| + |
| + /** |
| * Initialize a newly created method element to have the given [name]. |
| */ |
| MethodElementImpl.forNode(Identifier name) : super.forNode(name); |
| @@ -6613,6 +6648,9 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
| @override |
| bool get isStatic { |
| + if (_kernel != null) { |
| + return _kernelProcedure.isStatic; |
| + } |
| if (serializedExecutable != null) { |
| return serializedExecutable.isStatic; |
| } |