Index: pkg/analyzer2dart/lib/src/identifier_semantics.dart |
diff --git a/pkg/analyzer2dart/lib/src/identifier_semantics.dart b/pkg/analyzer2dart/lib/src/identifier_semantics.dart |
index 70747cf7852d851eae3f38d32812c2606ad32097..d78a9395f29c8f4c3f4dbbb75fd7341886e6ea28 100644 |
--- a/pkg/analyzer2dart/lib/src/identifier_semantics.dart |
+++ b/pkg/analyzer2dart/lib/src/identifier_semantics.dart |
@@ -59,10 +59,11 @@ class AccessKind { |
const AccessKind._('STATIC_PROPERTY'); |
/** |
- * The destination of the access is a toplevel class. |
+ * The destination of the access is a toplevel class, function typedef, mixin |
+ * application, or the built-in type "dynamic". |
*/ |
- static const AccessKind TOPLEVEL_CLASS = |
- const AccessKind._('TOPLEVEL_CLASS'); |
+ static const AccessKind TOPLEVEL_TYPE = |
+ const AccessKind._('TOPLEVEL_TYPE'); |
/** |
* The destination of the access is a type parameter of the enclosing class. |
@@ -167,8 +168,8 @@ class AccessSemantics { |
: kind = AccessKind.STATIC_PROPERTY, |
target = null; |
- AccessSemantics.toplevelClass(this.identifier, this.element) |
- : kind = AccessKind.TOPLEVEL_CLASS, |
+ AccessSemantics.toplevelType(this.identifier, this.element) |
+ : kind = AccessKind.TOPLEVEL_TYPE, |
classElement = null, |
isInvoke = false, |
target = null; |
@@ -379,8 +380,9 @@ class AccessSemanticsVisitor extends RecursiveAstVisitor<AccessSemantics> { |
} |
} else if (rhsElement is FunctionElement) { |
return new AccessSemantics.staticMethod(rhs, rhsElement, null); |
- } else if (rhsElement is ClassElement) { |
- return new AccessSemantics.toplevelClass(rhs, rhsElement); |
+ } else if (rhsElement is ClassElement || |
+ rhsElement is FunctionTypeAliasElement) { |
+ return new AccessSemantics.toplevelType(rhs, rhsElement); |
} else { |
return new AccessSemantics.dynamic(rhs, null); |
} |
@@ -480,8 +482,10 @@ class AccessSemanticsVisitor extends RecursiveAstVisitor<AccessSemantics> { |
staticElement.enclosingElement); |
} else if (staticElement is TypeParameterElement) { |
return new AccessSemantics.typeParameter(node, staticElement); |
- } else if (staticElement is ClassElement) { |
- return new AccessSemantics.toplevelClass(node, staticElement); |
+ } else if (staticElement is ClassElement || |
+ staticElement is FunctionTypeAliasElement || |
+ staticElement is DynamicElementImpl) { |
+ return new AccessSemantics.toplevelType(node, staticElement); |
} |
return new AccessSemantics.dynamic(node, null); |
} |