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

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

Issue 2976263002: Resynthesize methods from Kernel. (Closed)
Patch Set: Fix for sync* and test. 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/test/src/summary/resynthesize_common.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 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;
}
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/resynthesize_common.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698