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 af0d650ae21aaa090da71a85bc03c7edd3163e6c..eec48144250371574e778d764ad93238a1002d5c 100644 |
--- a/pkg/analyzer/lib/src/task/strong_mode.dart |
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart |
@@ -23,16 +23,6 @@ import 'package:analyzer/src/summary/link.dart' |
show FieldElementForLink_ClassField, ParameterElementForLink; |
/** |
- * Return `true` if the given [expression] is an immediately-evident expression, |
- * so can be used to infer the type for a top-level variable or a class field. |
- */ |
-bool isValidForTypeInference(Expression expression) { |
- var visitor = new _IsValidForTypeInferenceVisitor(); |
- expression.accept(visitor); |
- return visitor.isValid; |
-} |
- |
-/** |
* Sets the type of the field. The types in implicit accessors are updated |
* implicitly, and the types of explicit accessors should be updated separately. |
*/ |
@@ -71,13 +61,6 @@ class InstanceMemberInferrer { |
final InheritanceManagerProvider inheritanceManagerProvider; |
/** |
- * The set of fields for which type inference from initializer should be |
- * disabled, because their initializers are not immediately-evident |
- * expressions. |
- */ |
- final Set<FieldElement> fieldsWithDisabledInitializerInference; |
- |
- /** |
* The classes that have been visited while attempting to infer the types of |
* instance members of some base class. |
*/ |
@@ -88,9 +71,7 @@ class InstanceMemberInferrer { |
* Initialize a newly create inferrer. |
*/ |
InstanceMemberInferrer( |
- TypeProvider typeProvider, |
- this.inheritanceManagerProvider, |
- this.fieldsWithDisabledInitializerInference, |
+ TypeProvider typeProvider, this.inheritanceManagerProvider, |
{TypeSystem typeSystem}) |
: typeSystem = (typeSystem != null) |
? typeSystem |
@@ -430,9 +411,7 @@ class InstanceMemberInferrer { |
if (field.hasImplicitType) { |
DartType newType = typeResult.type; |
- if (newType == null && |
- field.initializer != null && |
- !fieldsWithDisabledInitializerInference.contains(field)) { |
+ if (newType == null && field.initializer != null) { |
newType = field.initializer.returnType; |
} |
@@ -608,93 +587,3 @@ class _FieldOverrideInferenceResult { |
_FieldOverrideInferenceResult(this.isCovariant, this.type, this.isError); |
} |
- |
-/** |
- * The visitor for [isValidForTypeInference]. |
- */ |
-class _IsValidForTypeInferenceVisitor extends RecursiveAstVisitor { |
- bool isValid = true; |
- |
- @override |
- void visitAssignmentExpression(AssignmentExpression node) { |
- isValid = false; |
- } |
- |
- @override |
- void visitCascadeExpression(CascadeExpression node) { |
- node.target.accept(this); |
- } |
- |
- @override |
- void visitFunctionExpression(FunctionExpression node) { |
- FunctionBody body = node.body; |
- if (body is ExpressionFunctionBody) { |
- body.accept(this); |
- } else { |
- isValid = false; |
- } |
- } |
- |
- @override |
- void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |
- node.function?.accept(this); |
- } |
- |
- @override |
- void visitIndexExpression(IndexExpression node) { |
- isValid = false; |
- } |
- |
- @override |
- void visitInstanceCreationExpression(InstanceCreationExpression node) { |
- ConstructorElement constructor = node.staticElement; |
- if (constructor != null) { |
- ClassElement clazz = constructor?.enclosingElement; |
- if (clazz.typeParameters.isNotEmpty && |
- node.constructorName.type.typeArguments == null) { |
- isValid = false; |
- return; |
- } |
- } |
- } |
- |
- @override |
- void visitListLiteral(ListLiteral node) { |
- if (node.typeArguments == null) { |
- super.visitListLiteral(node); |
- } |
- } |
- |
- @override |
- void visitMapLiteral(MapLiteral node) { |
- if (node.typeArguments == null) { |
- super.visitMapLiteral(node); |
- } |
- } |
- |
- @override |
- void visitMethodInvocation(MethodInvocation node) { |
- Element element = node.methodName.staticElement; |
- if (element is ExecutableElement) { |
- if (element.type.typeFormals.isNotEmpty && node.typeArguments == null) { |
- isValid = false; |
- return; |
- } |
- } |
- node.target?.accept(this); |
- } |
- |
- @override |
- void visitSimpleIdentifier(SimpleIdentifier node) { |
- Element element = node.staticElement; |
- if (element == null) { |
- AstNode parent = node.parent; |
- if (parent is PropertyAccess && parent.propertyName == node || |
- parent is PrefixedIdentifier && parent.identifier == node) { |
- isValid = false; |
- } |
- } else if (element is PropertyAccessorElement && !element.isStatic) { |
- isValid = false; |
- } |
- } |
-} |