| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.parser.member_listener; | 5 library dart2js.parser.member_listener; |
| 6 | 6 |
| 7 import '../diagnostics/diagnostic_listener.dart' show | 7 import '../diagnostics/diagnostic_listener.dart' show |
| 8 DiagnosticListener; | 8 DiagnosticReporter; |
| 9 import '../diagnostics/messages.dart' show | 9 import '../diagnostics/messages.dart' show |
| 10 MessageKind; | 10 MessageKind; |
| 11 import '../elements/elements.dart' show | 11 import '../elements/elements.dart' show |
| 12 Element, | 12 Element, |
| 13 ElementKind, | 13 ElementKind, |
| 14 Elements, | 14 Elements, |
| 15 MetadataAnnotation; | 15 MetadataAnnotation; |
| 16 import '../elements/modelx.dart' show | 16 import '../elements/modelx.dart' show |
| 17 ClassElementX, | 17 ClassElementX, |
| 18 ElementX, | 18 ElementX, |
| 19 FieldElementX, | 19 FieldElementX, |
| 20 VariableList; | 20 VariableList; |
| 21 import '../tokens/token.dart' show | 21 import '../tokens/token.dart' show |
| 22 Token; | 22 Token; |
| 23 import '../tree/tree.dart'; | 23 import '../tree/tree.dart'; |
| 24 import '../util/util.dart' show | 24 import '../util/util.dart' show |
| 25 Link; | 25 Link; |
| 26 | 26 |
| 27 import 'partial_elements.dart' show | 27 import 'partial_elements.dart' show |
| 28 PartialConstructorElement, | 28 PartialConstructorElement, |
| 29 PartialFunctionElement, | 29 PartialFunctionElement, |
| 30 PartialMetadataAnnotation; | 30 PartialMetadataAnnotation; |
| 31 import 'node_listener.dart' show | 31 import 'node_listener.dart' show |
| 32 NodeListener; | 32 NodeListener; |
| 33 | 33 |
| 34 class MemberListener extends NodeListener { | 34 class MemberListener extends NodeListener { |
| 35 final ClassElementX enclosingClass; | 35 final ClassElementX enclosingClass; |
| 36 | 36 |
| 37 MemberListener(DiagnosticListener listener, | 37 MemberListener(DiagnosticReporter listener, |
| 38 ClassElementX enclosingElement) | 38 ClassElementX enclosingElement) |
| 39 : this.enclosingClass = enclosingElement, | 39 : this.enclosingClass = enclosingElement, |
| 40 super(listener, enclosingElement.compilationUnit); | 40 super(listener, enclosingElement.compilationUnit); |
| 41 | 41 |
| 42 bool isConstructorName(Node nameNode) { | 42 bool isConstructorName(Node nameNode) { |
| 43 if (enclosingClass == null || | 43 if (enclosingClass == null || |
| 44 enclosingClass.kind != ElementKind.CLASS) { | 44 enclosingClass.kind != ElementKind.CLASS) { |
| 45 return false; | 45 return false; |
| 46 } | 46 } |
| 47 String name; | 47 String name; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 65 Identifier selector = send.selector.asIdentifier(); | 65 Identifier selector = send.selector.asIdentifier(); |
| 66 Operator operator = selector.asOperator(); | 66 Operator operator = selector.asOperator(); |
| 67 if (operator != null) { | 67 if (operator != null) { |
| 68 assert(identical(receiver.source, 'operator')); | 68 assert(identical(receiver.source, 'operator')); |
| 69 // TODO(ahe): It is a hack to compare to ')', but it beats | 69 // TODO(ahe): It is a hack to compare to ')', but it beats |
| 70 // parsing the node. | 70 // parsing the node. |
| 71 bool isUnary = identical(operator.token.next.next.stringValue, ')'); | 71 bool isUnary = identical(operator.token.next.next.stringValue, ')'); |
| 72 return Elements.constructOperatorName(operator.source, isUnary); | 72 return Elements.constructOperatorName(operator.source, isUnary); |
| 73 } else { | 73 } else { |
| 74 if (receiver == null || receiver.source != enclosingClass.name) { | 74 if (receiver == null || receiver.source != enclosingClass.name) { |
| 75 listener.reportErrorMessage( | 75 reporter.reportErrorMessage( |
| 76 send.receiver, | 76 send.receiver, |
| 77 MessageKind.INVALID_CONSTRUCTOR_NAME, | 77 MessageKind.INVALID_CONSTRUCTOR_NAME, |
| 78 {'name': enclosingClass.name}); | 78 {'name': enclosingClass.name}); |
| 79 } | 79 } |
| 80 return selector.source; | 80 return selector.source; |
| 81 } | 81 } |
| 82 } | 82 } |
| 83 | 83 |
| 84 void endMethod(Token getOrSet, Token beginToken, Token endToken) { | 84 void endMethod(Token getOrSet, Token beginToken, Token endToken) { |
| 85 super.endMethod(getOrSet, beginToken, endToken); | 85 super.endMethod(getOrSet, beginToken, endToken); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 106 } | 106 } |
| 107 | 107 |
| 108 void endFactoryMethod(Token beginToken, Token endToken) { | 108 void endFactoryMethod(Token beginToken, Token endToken) { |
| 109 super.endFactoryMethod(beginToken, endToken); | 109 super.endFactoryMethod(beginToken, endToken); |
| 110 FunctionExpression method = popNode(); | 110 FunctionExpression method = popNode(); |
| 111 pushNode(null); | 111 pushNode(null); |
| 112 String name = getMethodNameHack(method.name); | 112 String name = getMethodNameHack(method.name); |
| 113 Identifier singleIdentifierName = method.name.asIdentifier(); | 113 Identifier singleIdentifierName = method.name.asIdentifier(); |
| 114 if (singleIdentifierName != null && singleIdentifierName.source == name) { | 114 if (singleIdentifierName != null && singleIdentifierName.source == name) { |
| 115 if (name != enclosingClass.name) { | 115 if (name != enclosingClass.name) { |
| 116 listener.reportErrorMessage( | 116 reporter.reportErrorMessage( |
| 117 singleIdentifierName, | 117 singleIdentifierName, |
| 118 MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME, | 118 MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME, |
| 119 {'name': enclosingClass.name}); | 119 {'name': enclosingClass.name}); |
| 120 } | 120 } |
| 121 } | 121 } |
| 122 Element memberElement = new PartialConstructorElement( | 122 Element memberElement = new PartialConstructorElement( |
| 123 name, beginToken, endToken, | 123 name, beginToken, endToken, |
| 124 ElementKind.FUNCTION, | 124 ElementKind.FUNCTION, |
| 125 method.modifiers, | 125 method.modifiers, |
| 126 enclosingClass); | 126 enclosingClass); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 153 void endInitializers(int count, Token beginToken, Token endToken) { | 153 void endInitializers(int count, Token beginToken, Token endToken) { |
| 154 pushNode(null); | 154 pushNode(null); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void addMetadata(ElementX memberElement) { | 157 void addMetadata(ElementX memberElement) { |
| 158 memberElement.metadata = metadata.toList(); | 158 memberElement.metadata = metadata.toList(); |
| 159 } | 159 } |
| 160 | 160 |
| 161 void addMember(ElementX memberElement) { | 161 void addMember(ElementX memberElement) { |
| 162 addMetadata(memberElement); | 162 addMetadata(memberElement); |
| 163 enclosingClass.addMember(memberElement, listener); | 163 enclosingClass.addMember(memberElement, reporter); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { | 166 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { |
| 167 popNode(); // Discard arguments. | 167 popNode(); // Discard arguments. |
| 168 if (periodBeforeName != null) { | 168 if (periodBeforeName != null) { |
| 169 popNode(); // Discard name. | 169 popNode(); // Discard name. |
| 170 } | 170 } |
| 171 popNode(); // Discard node (Send or Identifier). | 171 popNode(); // Discard node (Send or Identifier). |
| 172 pushMetadata(new PartialMetadataAnnotation(beginToken, endToken)); | 172 pushMetadata(new PartialMetadataAnnotation(beginToken, endToken)); |
| 173 } | 173 } |
| 174 } | 174 } |
| OLD | NEW |