| Index: compiler/java/com/google/dart/compiler/parser/DartParser.java
|
| ===================================================================
|
| --- compiler/java/com/google/dart/compiler/parser/DartParser.java (revision 11322)
|
| +++ compiler/java/com/google/dart/compiler/parser/DartParser.java (working copy)
|
| @@ -1861,8 +1861,10 @@
|
| */
|
| private DartFieldDefinition parseFieldDeclaration(Modifiers modifiers, DartTypeNode type) {
|
| List<DartField> fields = new ArrayList<DartField>();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| do {
|
| beginVariableDeclaration();
|
| + List<DartAnnotation> fieldMetadata = parseMetadata();
|
| DartIdentifier name = parseIdentifier();
|
| DartExpression value = null;
|
| if (optional(Token.ASSIGN)) {
|
| @@ -1874,9 +1876,13 @@
|
| if (modifiers.isExternal()) {
|
| reportError(name, ParserErrorCode.EXTERNAL_ONLY_METHOD);
|
| }
|
| - fields.add(done(new DartField(name, modifiers, null, value)));
|
| + DartField field = done(new DartField(name, modifiers, null, value));
|
| + field.setMetadata(fieldMetadata);
|
| + fields.add(field);
|
| } while (optional(Token.COMMA));
|
| - return done(new DartFieldDefinition(type, fields));
|
| + DartFieldDefinition definition = new DartFieldDefinition(type, fields);
|
| + definition.setMetadata(metadata);
|
| + return done(definition);
|
| }
|
|
|
| /**
|
| @@ -3759,6 +3765,7 @@
|
| List<DartVariable> idents = new ArrayList<DartVariable>();
|
| do {
|
| beginVariableDeclaration();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| DartIdentifier name = parseIdentifier();
|
| DartExpression value = null;
|
| if (isParsingInterface) {
|
| @@ -3767,7 +3774,9 @@
|
| } else if (optional(Token.ASSIGN)) {
|
| value = parseExpression();
|
| }
|
| - idents.add(done(new DartVariable(name, value)));
|
| + DartVariable variable = done(new DartVariable(name, value));
|
| + variable.setMetadata(metadata);
|
| + idents.add(variable);
|
| } while (optional(Token.COMMA));
|
|
|
| return idents;
|
| @@ -3856,7 +3865,14 @@
|
| labels.add(parseIdentifier());
|
| expect(Token.COLON);
|
| }
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| DartStatement statement = parseNonLabelledStatement();
|
| + if (!metadata.isEmpty() && statement instanceof DartVariableStatement) {
|
| + DartVariableStatement variableStatement = (DartVariableStatement) statement;
|
| + if (!variableStatement.getVariables().isEmpty()) {
|
| + variableStatement.getVariables().get(0).setMetadata(metadata);
|
| + }
|
| + }
|
| for (int i = labels.size() - 1; i >= 0; i--) {
|
| statement = done(new DartLabel(labels.get(i), statement));
|
| }
|
| @@ -4632,6 +4648,7 @@
|
| */
|
| private DartParameter parseCatchParameter() {
|
| beginCatchParameter();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| DartTypeNode type = null;
|
| Modifiers modifiers = Modifiers.NONE;
|
| boolean isDeclared = false;
|
| @@ -4651,7 +4668,9 @@
|
| if (!isDeclared) {
|
| reportError(name, ParserErrorCode.EXPECTED_VAR_FINAL_OR_TYPE);
|
| }
|
| - return done(new DartParameter(name, type, null, null, modifiers));
|
| + DartParameter parameter = done(new DartParameter(name, type, null, null, modifiers));
|
| + parameter.setMetadata(metadata);
|
| + return parameter;
|
| }
|
|
|
| /**
|
| @@ -4708,8 +4727,10 @@
|
| if (optional(Token.CATCH)) {
|
| expect(Token.LPAREN);
|
| beginCatchParameter();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| DartIdentifier exceptionName = parseIdentifier();
|
| exception = done(new DartParameter(exceptionName, exceptionType, null, null, Modifiers.NONE));
|
| + exception.setMetadata(metadata);
|
| if (optional(Token.COMMA)) {
|
| beginCatchParameter();
|
| DartIdentifier stackName = parseIdentifier();
|
| @@ -4719,9 +4740,11 @@
|
| } else {
|
| // Create a dummy identifier that the user cannot reliably reference.
|
| beginCatchParameter();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| beginIdentifier();
|
| DartIdentifier exceptionName = done(new DartIdentifier("e" + Long.toHexString(System.currentTimeMillis())));
|
| exception = done(new DartParameter(exceptionName, exceptionType, null, null, Modifiers.NONE));
|
| + exception.setMetadata(metadata);
|
| }
|
| DartBlock block = parseBlock();
|
| catches.add(done(new DartCatchBlock(block, exception, stackTrace)));
|
| @@ -4732,8 +4755,10 @@
|
| DartParameter exception;
|
| if (match(Token.IDENTIFIER) && (peek(1) == Token.COMMA || peek(1) == Token.RPAREN)) {
|
| beginCatchParameter();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| DartIdentifier exceptionName = parseIdentifier();
|
| exception = done(new DartParameter(exceptionName, null , null, null, Modifiers.NONE));
|
| + exception.setMetadata(metadata);
|
| } else {
|
| // Old-style parameter
|
| //reportError(position(), ParserErrorCode.DEPRECATED_CATCH);
|
| @@ -4743,8 +4768,10 @@
|
| if (optional(Token.COMMA)) {
|
| if (match(Token.IDENTIFIER) && peek(1) == Token.RPAREN) {
|
| beginCatchParameter();
|
| + List<DartAnnotation> metadata = parseMetadata();
|
| DartIdentifier stackName = parseIdentifier();
|
| stackTrace = done(new DartParameter(stackName, null, null, null, Modifiers.NONE));
|
| + stackTrace.setMetadata(metadata);
|
| } else {
|
| // Old-style parameter
|
| //reportError(position(), ParserErrorCode.DEPRECATED_CATCH);
|
|
|