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

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

Issue 2480783003: Avoid writing to the same parts of the element model in two tasks. (Closed)
Patch Set: Created 4 years, 1 month 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/lib/src/generated/resolver.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 3f7545e4264468d06e9fb8914e9a3f11559b8265..3e29c82af712acd6dfb70b589c523598c3a1c0ed 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3581,7 +3581,12 @@ abstract class ExecutableElementImpl extends ElementImpl
List<TypeParameterElement> _typeParameters;
/**
- * The return type defined by this executable element.
+ * The declared return type of this executable element.
+ */
+ DartType _declaredReturnType;
+
+ /**
+ * The inferred return type of this executable element.
*/
DartType _returnType;
@@ -3636,6 +3641,11 @@ abstract class ExecutableElementImpl extends ElementImpl
return super.codeOffset;
}
+ void set declaredReturnType(DartType returnType) {
+ _assertNotResynthesized(serializedExecutable);
+ _declaredReturnType = returnType;
+ }
+
@override
String get displayName {
if (serializedExecutable != null) {
@@ -3847,17 +3857,18 @@ abstract class ExecutableElementImpl extends ElementImpl
@override
DartType get returnType {
- if (serializedExecutable != null && _returnType == null) {
+ if (serializedExecutable != null &&
+ _declaredReturnType == null &&
+ _returnType == null) {
bool isSetter =
serializedExecutable.kind == UnlinkedExecutableKind.setter;
_returnType = enclosingUnit.resynthesizerContext.resolveLinkedType(
- serializedExecutable.inferredReturnTypeSlot,
- typeParameterContext) ??
- enclosingUnit.resynthesizerContext.resolveTypeRef(
- serializedExecutable.returnType, typeParameterContext,
- defaultVoid: isSetter && context.analysisOptions.strongMode);
+ serializedExecutable.inferredReturnTypeSlot, typeParameterContext);
+ _declaredReturnType = enclosingUnit.resynthesizerContext.resolveTypeRef(
+ serializedExecutable.returnType, typeParameterContext,
+ defaultVoid: isSetter && context.analysisOptions.strongMode);
}
- return _returnType;
+ return _returnType ?? _declaredReturnType;
}
void set returnType(DartType returnType) {
@@ -6770,11 +6781,11 @@ abstract class NonParameterVariableElementImpl extends VariableElementImpl {
@override
DartType get type {
- if (_unlinkedVariable != null && _type == null) {
+ if (_unlinkedVariable != null && _declaredType == null && _type == null) {
_type = enclosingUnit.resynthesizerContext.resolveLinkedType(
- _unlinkedVariable.inferredTypeSlot, typeParameterContext) ??
- enclosingUnit.resynthesizerContext
- .resolveTypeRef(_unlinkedVariable.type, typeParameterContext);
+ _unlinkedVariable.inferredTypeSlot, typeParameterContext);
+ _declaredType = enclosingUnit.resynthesizerContext
+ .resolveTypeRef(_unlinkedVariable.type, typeParameterContext);
}
return super.type;
}
@@ -7214,7 +7225,7 @@ class ParameterElementImpl extends VariableElementImpl
* been build yet, build them and remember in the corresponding fields.
*/
void _resynthesizeTypeAndParameters() {
- if (_unlinkedParam != null && _type == null) {
+ if (_unlinkedParam != null && _declaredType == null && _type == null) {
if (_unlinkedParam.isFunctionTyped) {
CompilationUnitElementImpl enclosingUnit = this.enclosingUnit;
FunctionElementImpl parameterTypeElement =
@@ -7241,9 +7252,9 @@ class ParameterElementImpl extends VariableElementImpl
_type = parameterType;
} else {
_type = enclosingUnit.resynthesizerContext.resolveLinkedType(
- _unlinkedParam.inferredTypeSlot, typeParameterContext) ??
- enclosingUnit.resynthesizerContext
- .resolveTypeRef(_unlinkedParam.type, typeParameterContext);
+ _unlinkedParam.inferredTypeSlot, typeParameterContext);
+ _declaredType = enclosingUnit.resynthesizerContext
+ .resolveTypeRef(_unlinkedParam.type, typeParameterContext);
}
}
}
@@ -8302,6 +8313,11 @@ abstract class VariableElementImpl extends ElementImpl
/**
* The declared type of this variable.
*/
+ DartType _declaredType;
+
+ /**
+ * The inferred type of this variable.
+ */
DartType _type;
/**
@@ -8348,6 +8364,10 @@ abstract class VariableElementImpl extends ElementImpl
@override
DartObject get constantValue => evaluationResult?.value;
+ void set declaredType(DartType type) {
+ _declaredType = type;
+ }
+
@override
String get displayName => name;
@@ -8421,7 +8441,7 @@ abstract class VariableElementImpl extends ElementImpl
bool get isStatic => hasModifier(Modifier.STATIC);
@override
- DartType get type => _type;
+ DartType get type => _type ?? _declaredType;
void set type(DartType type) {
_type = type;
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698