| Index: sdk/lib/_internal/compiler/implementation/typechecker.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/typechecker.dart b/sdk/lib/_internal/compiler/implementation/typechecker.dart
|
| index 49612a981971842342a9d69edd45c6157209ef70..78f4c8a92b94c4000732dc61978dc622bc0c9698 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/typechecker.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/typechecker.dart
|
| @@ -506,6 +506,10 @@ class TypeCheckerVisitor extends Visitor<DartType> {
|
| */
|
| ElementAccess computeAccess(Send node, SourceString name, Element element,
|
| MemberKind memberKind) {
|
| + if (element != null && element.isErroneous()) {
|
| + // An error has already been reported for this node.
|
| + return const DynamicAccess();
|
| + }
|
| if (node.receiver != null) {
|
| Element receiverElement = elements[node.receiver];
|
| if (receiverElement != null) {
|
| @@ -557,6 +561,16 @@ class TypeCheckerVisitor extends Visitor<DartType> {
|
| } else if (element.isErroneous()) {
|
| // foo() where foo is erroneous.
|
| return const DynamicAccess();
|
| + } else if (element.impliesType()) {
|
| + // The literal `Foo` where Foo is a class, a typedef, or a type variable.
|
| + if (elements.getType(node) != null) {
|
| + assert(invariant(node, identical(compiler.typeClass,
|
| + elements.getType(node).element),
|
| + message: 'Expected type literal type: '
|
| + '${elements.getType(node)}'));
|
| + return new TypeLiteralAccess(element);
|
| + }
|
| + return createResolvedAccess(node, name, element);
|
| } else if (element.isMember()) {
|
| // foo() where foo is an instance member.
|
| return lookupMember(node, currentClass.computeType(compiler),
|
| @@ -569,16 +583,6 @@ class TypeCheckerVisitor extends Visitor<DartType> {
|
| element.isField()) {
|
| // foo() where foo is a field in the same class.
|
| return createResolvedAccess(node, name, element);
|
| - } else if (element.impliesType()) {
|
| - // The literal `Foo` where Foo is a class, a typedef, or a type variable.
|
| - if (elements.getType(node) != null) {
|
| - assert(invariant(node, identical(compiler.typeClass,
|
| - elements.getType(node).element),
|
| - message: 'Expected type literal type: '
|
| - '${elements.getType(node)}'));
|
| - return new TypeLiteralAccess(element);
|
| - }
|
| - return createResolvedAccess(node, name, element);
|
| } else if (element.isGetter() || element.isSetter()) {
|
| return createResolvedAccess(node, name, element);
|
| } else {
|
|
|