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