Index: lib/compiler/implementation/resolver.dart |
diff --git a/lib/compiler/implementation/resolver.dart b/lib/compiler/implementation/resolver.dart |
index 2e96dc00a63159e00123c75c8930762cef083154..e2c383c0b17ba2c20fcaea33fa43d9b3bfce0bad 100644 |
--- a/lib/compiler/implementation/resolver.dart |
+++ b/lib/compiler/implementation/resolver.dart |
@@ -1176,6 +1176,11 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
DartType useType(TypeAnnotation annotation, DartType type) { |
if (type !== null) { |
+ if (type.element.isTypeVariable() && enclosingElement.inStaticContext()) { |
+ error(annotation, |
+ MessageKind.CANNOT_ACCESS_TYPE_VARIABLE_IN_STATIC_CONTEXT, |
+ [type.name]); |
+ } |
mapping.setType(annotation, type); |
useElement(annotation, type.element); |
} |
@@ -2820,18 +2825,6 @@ class Scope { |
abstract Element localLookup(SourceString name); |
} |
-class VariableScope extends Scope { |
- VariableScope(parent, element) : super(parent, element); |
- |
- Element add(Element newElement) { |
- throw "Cannot add element to VariableScope"; |
- } |
- |
- Element localLookup(SourceString name) => null; |
- |
- String toString() => '$element > $parent'; |
-} |
- |
/** |
* [TypeDeclarationScope] defines the outer scope of a type declaration in |
* which the declared type variables and the entities in the enclosing scope are |
@@ -2901,8 +2894,6 @@ class BlockScope extends MethodScope { |
* scope and inherited members are available, in the given order. |
*/ |
class ClassScope extends TypeDeclarationScope { |
- bool inStaticContext = false; |
- |
ClassScope(Scope parentScope, ClassElement element) |
: super(parentScope, element) { |
assert(parent !== null); |
@@ -2912,13 +2903,7 @@ class ClassScope extends TypeDeclarationScope { |
ClassElement cls = element; |
Element result = cls.lookupLocalMember(name); |
if (result !== null) return result; |
- if (!inStaticContext) { |
- // If not in a static context, we can lookup in the |
- // TypeDeclaration scope, which contains the type variables of |
- // the class. |
- result = super.localLookup(name); |
- } |
- return result; |
+ return super.localLookup(name); |
} |
Element lookup(SourceString name) { |