Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: sdk/lib/_internal/compiler/implementation/resolution/signatures.dart

Issue 266913017: Convert property methods into getters. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebased Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 resolution; 5 part of resolution;
6 6
7 /** 7 /**
8 * [SignatureResolver] resolves function signatures. 8 * [SignatureResolver] resolves function signatures.
9 */ 9 */
10 class SignatureResolver extends MappingVisitor<ParameterElementX> { 10 class SignatureResolver extends MappingVisitor<ParameterElementX> {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 return null; 50 return null;
51 } 51 }
52 if (!definitions.tail.isEmpty) { 52 if (!definitions.tail.isEmpty) {
53 internalError(definitions.tail.head, 'extra definition'); 53 internalError(definitions.tail.head, 'extra definition');
54 return null; 54 return null;
55 } 55 }
56 Node definition = definitions.head; 56 Node definition = definitions.head;
57 if (definition is NodeList) { 57 if (definition is NodeList) {
58 internalError(node, 'optional parameters are not implemented'); 58 internalError(node, 'optional parameters are not implemented');
59 } 59 }
60 if (node.modifiers.isConst()) { 60 if (node.modifiers.isConst) {
61 compiler.reportError(node, MessageKind.FORMAL_DECLARED_CONST); 61 compiler.reportError(node, MessageKind.FORMAL_DECLARED_CONST);
62 } 62 }
63 if (node.modifiers.isStatic()) { 63 if (node.modifiers.isStatic) {
64 compiler.reportError(node, MessageKind.FORMAL_DECLARED_STATIC); 64 compiler.reportError(node, MessageKind.FORMAL_DECLARED_STATIC);
65 } 65 }
66 66
67 if (currentDefinitions != null) { 67 if (currentDefinitions != null) {
68 internalError(node, 'function type parameters not supported'); 68 internalError(node, 'function type parameters not supported');
69 } 69 }
70 currentDefinitions = node; 70 currentDefinitions = node;
71 ParameterElementX element = definition.accept(this); 71 ParameterElementX element = definition.accept(this);
72 if (currentDefinitions.metadata != null) { 72 if (currentDefinitions.metadata != null) {
73 element.metadata = compiler.resolver.resolveMetadata(element, node); 73 element.metadata = compiler.resolver.resolveMetadata(element, node);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 if (node.receiver.asIdentifier() == null || 168 if (node.receiver.asIdentifier() == null ||
169 !node.receiver.asIdentifier().isThis()) { 169 !node.receiver.asIdentifier().isThis()) {
170 error(node, MessageKind.INVALID_PARAMETER); 170 error(node, MessageKind.INVALID_PARAMETER);
171 } else if (!identical(enclosingElement.kind, 171 } else if (!identical(enclosingElement.kind,
172 ElementKind.GENERATIVE_CONSTRUCTOR)) { 172 ElementKind.GENERATIVE_CONSTRUCTOR)) {
173 error(node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED); 173 error(node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED);
174 } else { 174 } else {
175 Identifier name = getParameterName(node); 175 Identifier name = getParameterName(node);
176 validateName(name); 176 validateName(name);
177 Element fieldElement = 177 Element fieldElement =
178 enclosingElement.getEnclosingClass().lookupLocalMember(name.source); 178 enclosingElement.enclosingClass.lookupLocalMember(name.source);
179 if (fieldElement == null || 179 if (fieldElement == null ||
180 !identical(fieldElement.kind, ElementKind.FIELD)) { 180 !identical(fieldElement.kind, ElementKind.FIELD)) {
181 error(node, MessageKind.NOT_A_FIELD, {'fieldName': name}); 181 error(node, MessageKind.NOT_A_FIELD, {'fieldName': name});
182 } else if (!fieldElement.isInstanceMember()) { 182 } else if (!fieldElement.isInstanceMember) {
183 error(node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name}); 183 error(node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name});
184 } 184 }
185 element = new FieldParameterElementX(enclosingElement, 185 element = new FieldParameterElementX(enclosingElement,
186 currentDefinitions, name, initializer, fieldElement); 186 currentDefinitions, name, initializer, fieldElement);
187 computeParameterType(element, fieldElement); 187 computeParameterType(element, fieldElement);
188 } 188 }
189 return element; 189 return element;
190 } 190 }
191 191
192 /// A [SendSet] node is an optional parameter with a default value. 192 /// A [SendSet] node is an optional parameter with a default value.
193 Element visitSendSet(SendSet node) { 193 Element visitSendSet(SendSet node) {
194 ParameterElementX element; 194 ParameterElementX element;
195 if (node.receiver != null) { 195 if (node.receiver != null) {
196 element = createFieldParameter(node, node.arguments.first); 196 element = createFieldParameter(node, node.arguments.first);
197 } else if (node.selector.asIdentifier() != null || 197 } else if (node.selector.asIdentifier() != null ||
198 node.selector.asFunctionExpression() != null) { 198 node.selector.asFunctionExpression() != null) {
199 element = createParameter(getParameterName(node), node.arguments.first); 199 element = createParameter(getParameterName(node), node.arguments.first);
200 } 200 }
201 Node defaultValue = node.arguments.head; 201 Node defaultValue = node.arguments.head;
202 if (!defaultValuesAllowed) { 202 if (!defaultValuesAllowed) {
203 compiler.reportError(defaultValue, defaultValuesError); 203 compiler.reportError(defaultValue, defaultValuesError);
204 } 204 }
205 return element; 205 return element;
206 } 206 }
207 207
208 Element visitFunctionExpression(FunctionExpression node) { 208 Element visitFunctionExpression(FunctionExpression node) {
209 // This is a function typed parameter. 209 // This is a function typed parameter.
210 Modifiers modifiers = currentDefinitions.modifiers; 210 Modifiers modifiers = currentDefinitions.modifiers;
211 if (modifiers.isFinal()) { 211 if (modifiers.isFinal) {
212 compiler.reportError(modifiers, 212 compiler.reportError(modifiers,
213 MessageKind.FINAL_FUNCTION_TYPE_PARAMETER); 213 MessageKind.FINAL_FUNCTION_TYPE_PARAMETER);
214 } 214 }
215 if (modifiers.isVar()) { 215 if (modifiers.isVar) {
216 compiler.reportError(modifiers, MessageKind.VAR_FUNCTION_TYPE_PARAMETER); 216 compiler.reportError(modifiers, MessageKind.VAR_FUNCTION_TYPE_PARAMETER);
217 } 217 }
218 218
219 return createParameter(node.name, null); 219 return createParameter(node.name, null);
220 } 220 }
221 221
222 LinkBuilder<Element> analyzeNodes(Link<Node> link) { 222 LinkBuilder<Element> analyzeNodes(Link<Node> link) {
223 LinkBuilder<Element> elements = new LinkBuilder<Element>(); 223 LinkBuilder<Element> elements = new LinkBuilder<Element>();
224 for (; !link.isEmpty; link = link.tail) { 224 for (; !link.isEmpty; link = link.tail) {
225 Element element = link.head.accept(this); 225 Element element = link.head.accept(this);
(...skipping 18 matching lines...) Expand all
244 NodeList formalParameters, 244 NodeList formalParameters,
245 Node returnNode, 245 Node returnNode,
246 Element element, 246 Element element,
247 TreeElementMapping mapping, 247 TreeElementMapping mapping,
248 {MessageKind defaultValuesError}) { 248 {MessageKind defaultValuesError}) {
249 SignatureResolver visitor = new SignatureResolver(compiler, element, 249 SignatureResolver visitor = new SignatureResolver(compiler, element,
250 mapping, defaultValuesError: defaultValuesError); 250 mapping, defaultValuesError: defaultValuesError);
251 Link<Element> parameters = const Link<Element>(); 251 Link<Element> parameters = const Link<Element>();
252 int requiredParameterCount = 0; 252 int requiredParameterCount = 0;
253 if (formalParameters == null) { 253 if (formalParameters == null) {
254 if (!element.isGetter()) { 254 if (!element.isGetter) {
255 compiler.reportError(element, MessageKind.MISSING_FORMALS); 255 compiler.reportError(element, MessageKind.MISSING_FORMALS);
256 } 256 }
257 } else { 257 } else {
258 if (element.isGetter()) { 258 if (element.isGetter) {
259 if (!identical(formalParameters.getEndToken().next.stringValue, 259 if (!identical(formalParameters.endToken.next.stringValue,
260 // TODO(ahe): Remove the check for native keyword. 260 // TODO(ahe): Remove the check for native keyword.
261 'native')) { 261 'native')) {
262 compiler.reportError(formalParameters, 262 compiler.reportError(formalParameters,
263 MessageKind.EXTRA_FORMALS); 263 MessageKind.EXTRA_FORMALS);
264 } 264 }
265 } 265 }
266 LinkBuilder<Element> parametersBuilder = 266 LinkBuilder<Element> parametersBuilder =
267 visitor.analyzeNodes(formalParameters.nodes); 267 visitor.analyzeNodes(formalParameters.nodes);
268 requiredParameterCount = parametersBuilder.length; 268 requiredParameterCount = parametersBuilder.length;
269 parameters = parametersBuilder.toLink(); 269 parameters = parametersBuilder.toLink();
270 } 270 }
271 DartType returnType; 271 DartType returnType;
272 if (element.isFactoryConstructor()) { 272 if (element.isFactoryConstructor) {
273 returnType = element.getEnclosingClass().thisType; 273 returnType = element.enclosingClass.thisType;
274 // Because there is no type annotation for the return type of 274 // Because there is no type annotation for the return type of
275 // this element, we explicitly add one. 275 // this element, we explicitly add one.
276 if (compiler.enableTypeAssertions) { 276 if (compiler.enableTypeAssertions) {
277 compiler.enqueuer.resolution.registerIsCheck(returnType, mapping); 277 compiler.enqueuer.resolution.registerIsCheck(returnType, mapping);
278 } 278 }
279 } else { 279 } else {
280 returnType = visitor.resolveReturnType(returnNode); 280 returnType = visitor.resolveReturnType(returnNode);
281 } 281 }
282 282
283 if (element.isSetter() && (requiredParameterCount != 1 || 283 if (element.isSetter && (requiredParameterCount != 1 ||
284 visitor.optionalParameterCount != 0)) { 284 visitor.optionalParameterCount != 0)) {
285 // If there are no formal parameters, we already reported an error above. 285 // If there are no formal parameters, we already reported an error above.
286 if (formalParameters != null) { 286 if (formalParameters != null) {
287 compiler.reportError(formalParameters, 287 compiler.reportError(formalParameters,
288 MessageKind.ILLEGAL_SETTER_FORMALS); 288 MessageKind.ILLEGAL_SETTER_FORMALS);
289 } 289 }
290 } 290 }
291 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>(); 291 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
292 for (ParameterElement parameter in parameters) { 292 for (ParameterElement parameter in parameters) {
293 parameterTypes.addLast(parameter.type); 293 parameterTypes.addLast(parameter.type);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 344
345 DartType resolveReturnType(TypeAnnotation annotation) { 345 DartType resolveReturnType(TypeAnnotation annotation) {
346 if (annotation == null) return compiler.types.dynamicType; 346 if (annotation == null) return compiler.types.dynamicType;
347 DartType result = resolver.resolveTypeAnnotation(annotation); 347 DartType result = resolver.resolveTypeAnnotation(annotation);
348 if (result == null) { 348 if (result == null) {
349 return compiler.types.dynamicType; 349 return compiler.types.dynamicType;
350 } 350 }
351 return result; 351 return result;
352 } 352 }
353 } 353 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698