Index: pkg/compiler/lib/src/parser/element_listener.dart |
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart |
index be504f68da6e122903ec4fa7309d2ce4a9141a7b..faad8521598996f7c319ffd0176355bac684994c 100644 |
--- a/pkg/compiler/lib/src/parser/element_listener.dart |
+++ b/pkg/compiler/lib/src/parser/element_listener.dart |
@@ -76,6 +76,9 @@ class ElementListener extends Listener { |
LinkBuilder<MetadataAnnotation> metadata = |
new LinkBuilder<MetadataAnnotation>(); |
+ /// Indicates whether the parser is currently accepting a type variable. |
+ bool inTypeVariable = false; |
+ |
/// Records a stack of booleans for each member parsed (a stack is used to |
/// support nested members which isn't currently possible, but it also serves |
/// as a simple way to tell we're currently parsing a member). In this case, |
@@ -250,8 +253,13 @@ class ElementListener extends Listener { |
if (periodBeforeName != null) { |
popNode(); // Discard name. |
} |
- popNode(); // Discard node (Send or Identifier). |
- pushMetadata(new PartialMetadataAnnotation(beginToken, endToken)); |
+ popNode(); // Discard type parameters |
+ popNode(); // Discard identifier |
+ // TODO(paulberry,ahe): type variable metadata should not be ignored. See |
+ // dartbug.com/5841. |
+ if (!inTypeVariable) { |
+ pushMetadata(new PartialMetadataAnnotation(beginToken, endToken)); |
+ } |
} |
@override |
@@ -419,7 +427,13 @@ class ElementListener extends Listener { |
} |
@override |
+ void beginTypeVariable(Token token) { |
+ inTypeVariable = true; |
+ } |
+ |
+ @override |
void endTypeVariable(Token token, Token extendsOrSuper) { |
+ inTypeVariable = false; |
NominalTypeAnnotation bound = popNode(); |
Identifier name = popNode(); |
pushNode(new TypeVariable(name, extendsOrSuper, bound)); |