| Index: lib/src/checker/resolver.dart
|
| diff --git a/lib/src/checker/resolver.dart b/lib/src/checker/resolver.dart
|
| index 427baf3575f9516954cbb781d8016b0608206271..1c0ac285acf44762e3b6083682382be59b288b91 100644
|
| --- a/lib/src/checker/resolver.dart
|
| +++ b/lib/src/checker/resolver.dart
|
| @@ -198,13 +198,14 @@ class LibraryResolverWithInference extends LibraryResolver {
|
| FieldDeclaration field, Set<VariableDeclaration> pending) {
|
| var variables = field.fields;
|
| for (var variable in variables.variables) {
|
| - var varElement = variable.element;
|
| + var varElement = variable.element as FieldElement;
|
| if (!varElement.type.isDynamic || variables.type != null) continue;
|
| var getter = varElement.getter;
|
| // Note: type will be null only when there are no overrides. When some
|
| // override's type was not specified and couldn't be inferred, the type
|
| // here will be dynamic.
|
| - var type = searchTypeFor(varElement.enclosingElement.type, getter);
|
| + var enclosingElement = varElement.enclosingElement;
|
| + var type = searchTypeFor(enclosingElement.type, getter);
|
|
|
| // Infer from the RHS when there are no overrides.
|
| if (type == null) {
|
| @@ -235,8 +236,8 @@ class LibraryResolverWithInference extends LibraryResolver {
|
| methodElement is PropertyAccessorElement) &&
|
| methodElement.returnType.isDynamic &&
|
| method.returnType == null) {
|
| - var type =
|
| - searchTypeFor(methodElement.enclosingElement.type, methodElement);
|
| + var enclosingElement = methodElement.enclosingElement as ClassElement;
|
| + var type = searchTypeFor(enclosingElement.type, methodElement);
|
| if (type != null && !type.returnType.isDynamic) {
|
| methodElement.returnType = type.returnType;
|
| }
|
| @@ -245,7 +246,7 @@ class LibraryResolverWithInference extends LibraryResolver {
|
|
|
| void _inferVariableFromInitializer(Iterable<VariableDeclaration> variables) {
|
| for (var variable in variables) {
|
| - var declaration = variable.parent;
|
| + var declaration = variable.parent as VariableDeclarationList;
|
| // Only infer on variables that don't have any declared type.
|
| if (declaration.type != null) continue;
|
| if (_options.onlyInferConstsAndFinalFields &&
|
| @@ -258,7 +259,7 @@ class LibraryResolverWithInference extends LibraryResolver {
|
| var type = initializer.staticType;
|
| if (type == null || type.isDynamic || type.isBottom) continue;
|
| if (!_canInferFrom(initializer)) continue;
|
| - var element = variable.element;
|
| + var element = variable.element as PropertyInducingElement;
|
| // Note: it's ok to update the type here, since initializer.staticType
|
| // is already computed for all declarations in the library cycle. The
|
| // new types will only be propagated on a second run of the
|
| @@ -371,7 +372,7 @@ class RestrictedResolverVisitor extends ResolverVisitor {
|
| oldState = new _ResolverState(this);
|
| state.restore(this);
|
| if (node is FieldDeclaration) {
|
| - var cls = node.parent;
|
| + var cls = node.parent as ClassDeclaration;
|
| enclosingClass = cls.element;
|
| }
|
| }
|
| @@ -547,8 +548,7 @@ class RestrictedStaticTypeAnalyzer extends StaticTypeAnalyzer {
|
| super.visitDeclaredIdentifier(node);
|
| if (node.type != null) return;
|
|
|
| - var parent = node.parent;
|
| - assert(parent is ForEachStatement);
|
| + var parent = node.parent as ForEachStatement;
|
| var expr = parent.iterable;
|
| var element = node.element as LocalVariableElementImpl;
|
| var exprType = expr.staticType;
|
| @@ -606,9 +606,10 @@ class RestrictedStaticTypeAnalyzer extends StaticTypeAnalyzer {
|
| // TODO(jmesserly): we'll likely need something that can handle a wider
|
| // variety of types, especially when we get to JS interop.
|
| var args = node.argumentList.arguments;
|
| - if (args.isNotEmpty && args.first is SimpleStringLiteral) {
|
| + var first = args.isNotEmpty ? args.first : null;
|
| + if (first is SimpleStringLiteral) {
|
| var coreLib = _typeProvider.objectType.element.library;
|
| - var classElem = coreLib.getType(args.first.stringValue);
|
| + var classElem = coreLib.getType(first.stringValue);
|
| if (classElem != null) node.staticType = classElem.type;
|
| }
|
| }
|
|
|