| 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;
 | 
|        }
 | 
|      }
 | 
| 
 |