OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 part of scanner; | 5 part of scanner; |
6 | 6 |
7 class ClassElementParser extends PartialParser { | 7 class ClassElementParser extends PartialParser { |
8 ClassElementParser(Listener listener) : super(listener); | 8 ClassElementParser(Listener listener) : super(listener); |
9 | 9 |
10 Token parseClassBody(Token token) => fullParseClassBody(token); | 10 Token parseClassBody(Token token) => fullParseClassBody(token); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 assert(identical(receiver.source.stringValue, 'operator')); | 98 assert(identical(receiver.source.stringValue, 'operator')); |
99 // TODO(ahe): It is a hack to compare to ')', but it beats | 99 // TODO(ahe): It is a hack to compare to ')', but it beats |
100 // parsing the node. | 100 // parsing the node. |
101 bool isUnary = identical(operator.token.next.next.stringValue, ')'); | 101 bool isUnary = identical(operator.token.next.next.stringValue, ')'); |
102 return Elements.constructOperatorName(operator.source, isUnary); | 102 return Elements.constructOperatorName(operator.source, isUnary); |
103 } else { | 103 } else { |
104 if (receiver == null) { | 104 if (receiver == null) { |
105 listener.cancel('library prefix in named factory constructor not ' | 105 listener.cancel('library prefix in named factory constructor not ' |
106 'implemented', node: send.receiver); | 106 'implemented', node: send.receiver); |
107 } | 107 } |
| 108 if (receiver.source != enclosingElement.name) { |
| 109 listener.onDeprecatedFeature(receiver, 'interface factories'); |
| 110 } |
108 return Elements.constructConstructorName(receiver.source, | 111 return Elements.constructConstructorName(receiver.source, |
109 selector.source); | 112 selector.source); |
110 } | 113 } |
111 } | 114 } |
112 | 115 |
113 void endMethod(Token getOrSet, Token beginToken, Token endToken) { | 116 void endMethod(Token getOrSet, Token beginToken, Token endToken) { |
114 super.endMethod(getOrSet, beginToken, endToken); | 117 super.endMethod(getOrSet, beginToken, endToken); |
115 FunctionExpression method = popNode(); | 118 FunctionExpression method = popNode(); |
116 pushNode(null); | 119 pushNode(null); |
117 bool isConstructor = isConstructorName(method.name); | 120 bool isConstructor = isConstructorName(method.name); |
(...skipping 12 matching lines...) Expand all Loading... |
130 new PartialFunctionElement(name, beginToken, getOrSet, endToken, | 133 new PartialFunctionElement(name, beginToken, getOrSet, endToken, |
131 kind, method.modifiers, enclosingElement); | 134 kind, method.modifiers, enclosingElement); |
132 addMember(memberElement); | 135 addMember(memberElement); |
133 } | 136 } |
134 | 137 |
135 void endFactoryMethod(Token beginToken, Token endToken) { | 138 void endFactoryMethod(Token beginToken, Token endToken) { |
136 super.endFactoryMethod(beginToken, endToken); | 139 super.endFactoryMethod(beginToken, endToken); |
137 FunctionExpression method = popNode(); | 140 FunctionExpression method = popNode(); |
138 pushNode(null); | 141 pushNode(null); |
139 SourceString name = getMethodNameHack(method.name); | 142 SourceString name = getMethodNameHack(method.name); |
| 143 Identifier singleIdentifierName = method.name.asIdentifier(); |
| 144 if (singleIdentifierName != null && singleIdentifierName.source == name) { |
| 145 if (name != enclosingElement.name) { |
| 146 listener.onDeprecatedFeature(method.name, 'interface factories'); |
| 147 } |
| 148 } |
140 ElementKind kind = ElementKind.FUNCTION; | 149 ElementKind kind = ElementKind.FUNCTION; |
141 Element memberElement = | 150 Element memberElement = |
142 new PartialFunctionElement(name, beginToken, null, endToken, | 151 new PartialFunctionElement(name, beginToken, null, endToken, |
143 kind, method.modifiers, enclosingElement); | 152 kind, method.modifiers, enclosingElement); |
144 addMember(memberElement); | 153 addMember(memberElement); |
145 } | 154 } |
146 | 155 |
147 void endFields(int count, Token beginToken, Token endToken) { | 156 void endFields(int count, Token beginToken, Token endToken) { |
148 super.endFields(count, beginToken, endToken); | 157 super.endFields(count, beginToken, endToken); |
149 VariableDefinitions variableDefinitions = popNode(); | 158 VariableDefinitions variableDefinitions = popNode(); |
(...skipping 29 matching lines...) Expand all Loading... |
179 | 188 |
180 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { | 189 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { |
181 popNode(); // Discard arguments. | 190 popNode(); // Discard arguments. |
182 if (periodBeforeName != null) { | 191 if (periodBeforeName != null) { |
183 popNode(); // Discard name. | 192 popNode(); // Discard name. |
184 } | 193 } |
185 popNode(); // Discard node (Send or Identifier). | 194 popNode(); // Discard node (Send or Identifier). |
186 pushMetadata(new PartialMetadataAnnotation(beginToken)); | 195 pushMetadata(new PartialMetadataAnnotation(beginToken)); |
187 } | 196 } |
188 } | 197 } |
OLD | NEW |