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..4c8b9c74ad6bb34f7ba2b0e23ca2c3231ef9a941 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,11 @@ abstract class ExecutableElementImpl extends ElementImpl |
@override |
bool get isGenerator { |
+ if (_kernel != null) { |
+ kernel.AsyncMarker marker = _kernel.function.asyncMarker; |
+ return marker == kernel.AsyncMarker.AsyncStar || |
+ marker == kernel.AsyncMarker.SyncStar; |
+ } |
if (serializedExecutable != null) { |
return serializedExecutable.isGenerator; |
} |
@@ -3932,6 +3953,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 +6574,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 +6650,9 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
@override |
bool get isStatic { |
+ if (_kernel != null) { |
+ return _kernelProcedure.isStatic; |
+ } |
if (serializedExecutable != null) { |
return serializedExecutable.isStatic; |
} |