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

Unified Diff: pkg/analyzer/lib/src/task/strong_mode.dart

Issue 1311133009: Remove some order dependency in instance member inference (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/task/strong_mode.dart
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index 823319893f36c3e1831fe4786ed144c8a8f823e0..8e21243e98c1d30b6f33895ef24cbd7557daa544 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -286,8 +286,7 @@ class InstanceMemberInferrer {
if (!accessorElement.isSynthetic &&
accessorElement.isGetter &&
!accessorElement.isStatic &&
- accessorElement.hasImplicitReturnType &&
- _getReturnType(accessorElement).isDynamic) {
+ accessorElement.hasImplicitReturnType) {
List<ExecutableElement> overriddenGetters = inheritanceManager
.lookupOverrides(
accessorElement.enclosingElement, accessorElement.name);
@@ -301,10 +300,11 @@ class InstanceMemberInferrer {
if (setter != null) {
overriddenSetters.add(setter);
}
- if (_isCompatible(newType, overriddenSetters)) {
- _setReturnType(accessorElement, newType);
- (accessorElement.variable as FieldElementImpl).type = newType;
+ if (!_isCompatible(newType, overriddenSetters)) {
+ newType = typeProvider.dynamicType;
}
+ _setReturnType(accessorElement, newType);
+ (accessorElement.variable as FieldElementImpl).type = newType;
}
}
}
@@ -354,8 +354,7 @@ class InstanceMemberInferrer {
void _inferField(FieldElement fieldElement) {
if (!fieldElement.isSynthetic &&
!fieldElement.isStatic &&
- fieldElement.hasImplicitType &&
- fieldElement.type.isDynamic) {
+ fieldElement.hasImplicitType) {
//
// First look for overridden getters with the same name as the field.
//
@@ -381,11 +380,12 @@ class InstanceMemberInferrer {
newType = fieldElement.initializer.returnType;
}
}
- if (newType != null && !newType.isBottom) {
- (fieldElement as FieldElementImpl).type = newType;
- _setReturnType(fieldElement.getter, newType);
- _setParameterType(fieldElement.setter, newType);
+ if (newType == null || newType.isBottom) {
+ newType = typeProvider.dynamicType;
}
+ (fieldElement as FieldElementImpl).type = newType;
+ _setReturnType(fieldElement.getter, newType);
+ _setParameterType(fieldElement.setter, newType);
}
}
@@ -401,8 +401,7 @@ class InstanceMemberInferrer {
//
// Infer the return type.
//
- if (methodElement.hasImplicitReturnType &&
- _getReturnType(methodElement).isDynamic) {
+ if (methodElement.hasImplicitReturnType) {
overriddenMethods = inheritanceManager.lookupOverrides(
methodElement.enclosingElement, methodElement.name);
if (overriddenMethods.isEmpty || !_onlyMethods(overriddenMethods)) {
@@ -418,19 +417,14 @@ class InstanceMemberInferrer {
var length = parameters.length;
for (int i = 0; i < length; ++i) {
ParameterElement parameter = parameters[i];
- if (parameter.hasImplicitType && parameter.type.isDynamic) {
+ if (parameter is ParameterElementImpl && parameter.hasImplicitType) {
overriddenMethods = overriddenMethods ??
inheritanceManager.lookupOverrides(
methodElement.enclosingElement, methodElement.name);
if (overriddenMethods.isEmpty || !_onlyMethods(overriddenMethods)) {
return;
}
- DartType type = _computeParameterType(parameter, i, overriddenMethods);
- if (!type.isDynamic) {
- if (parameter is ParameterElementImpl) {
- parameter.type = type;
- }
- }
+ parameter.type = _computeParameterType(parameter, i, overriddenMethods);
}
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698