| Index: pkg/analyzer/lib/src/fasta/ast_builder.dart
|
| diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
|
| index 6425a7ebfb9c4b0af48f8e45f6df0836d6273029..aa47114daea0367ba5b2f4287365f18e80705062 100644
|
| --- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
|
| +++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
|
| @@ -1290,7 +1290,7 @@ class AstBuilder extends ScopeListener {
|
|
|
| @override
|
| void handleNativeClause(Token nativeToken, bool hasName) {
|
| - push(ast.nativeClause(nativeToken, hasName ? pop() : null));
|
| + if (!hasName) push(NullValue.StringLiteral);
|
| }
|
|
|
| @override
|
| @@ -1304,7 +1304,12 @@ class AstBuilder extends ScopeListener {
|
| Token endToken) {
|
| debugEvent("ClassDeclaration");
|
| _ClassBody body = pop();
|
| - NativeClause nativeClause = nativeToken != null ? pop() : null;
|
| + NativeClause nativeClause;
|
| + if (nativeToken != null) {
|
| + var nativeName = pop();
|
| + nativeClause = ast.nativeClause(nativeToken,
|
| + nativeName == NullValue.StringLiteral ? null : nativeName);
|
| + }
|
| ImplementsClause implementsClause;
|
| if (implementsKeyword != null) {
|
| List<TypeName> interfaces = popList(interfacesCount);
|
| @@ -1607,9 +1612,22 @@ class AstBuilder extends ScopeListener {
|
| }
|
|
|
| @override
|
| - void endMethod(Token getOrSet, Token beginToken, Token endToken) {
|
| + void endMethod(
|
| + Token getOrSet, Token beginToken, Token nativeToken, Token endToken) {
|
| debugEvent("Method");
|
| FunctionBody body = pop();
|
| + if (nativeToken != null) {
|
| + var nativeName = pop();
|
| + if (nativeName == NullValue.StringLiteral) {
|
| + nativeName = null;
|
| + }
|
| + if (body is EmptyFunctionBody) {
|
| + body = ast.nativeFunctionBody(nativeToken, nativeName, body.endToken);
|
| + } else {
|
| + // TODO(danrubel): Report error if native clause is used with
|
| + // non-empty function body.
|
| + }
|
| + }
|
| ConstructorName redirectedConstructor = null; // TODO(paulberry)
|
| List<ConstructorInitializer> initializers = pop() ?? const [];
|
| Token separator = pop();
|
|
|