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

Side by Side Diff: lib/compiler/implementation/resolver.dart

Issue 10908236: Convert static error to warning for calls to toplevel methods, getters and setters. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 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
« no previous file with comments | « no previous file | tests/co19/co19-dart2js.status » ('j') | tests/co19/co19-dart2js.status » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 abstract class TreeElements { 5 abstract class TreeElements {
6 Element operator[](Node node); 6 Element operator[](Node node);
7 Selector getSelector(Send send); 7 Selector getSelector(Send send);
8 DartType getType(TypeAnnotation annotation); 8 DartType getType(TypeAnnotation annotation);
9 bool isParameterChecked(Element element); 9 bool isParameterChecked(Element element);
10 } 10 }
(...skipping 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 return null; 1039 return null;
1040 } else if (node.isSuper()) { 1040 } else if (node.isSuper()) {
1041 if (!inInstanceContext) error(node, MessageKind.NO_SUPER_IN_STATIC); 1041 if (!inInstanceContext) error(node, MessageKind.NO_SUPER_IN_STATIC);
1042 if ((ElementCategory.SUPER & allowedCategory) == 0) { 1042 if ((ElementCategory.SUPER & allowedCategory) == 0) {
1043 error(node, MessageKind.INVALID_USE_OF_SUPER); 1043 error(node, MessageKind.INVALID_USE_OF_SUPER);
1044 } 1044 }
1045 return null; 1045 return null;
1046 } else { 1046 } else {
1047 Element element = lookup(node, node.source); 1047 Element element = lookup(node, node.source);
1048 if (element === null) { 1048 if (element === null) {
1049 if (!inInstanceContext) error(node, MessageKind.CANNOT_RESOLVE, [node]); 1049 if (!inInstanceContext) {
1050 element = warnAndCreateErroneousElement(node, node.source,
1051 MessageKind.CANNOT_RESOLVE,
1052 [node]);
1053 }
1050 } else { 1054 } else {
1051 if ((element.kind.category & allowedCategory) == 0) { 1055 if ((element.kind.category & allowedCategory) == 0) {
1052 // TODO(ahe): Improve error message. Need UX input. 1056 // TODO(ahe): Improve error message. Need UX input.
1053 error(node, MessageKind.GENERIC, ["is not an expression $element"]); 1057 error(node, MessageKind.GENERIC, ["is not an expression $element"]);
1054 } 1058 }
1055 } 1059 }
1056 return useElement(node, element); 1060 return useElement(node, element);
1057 } 1061 }
1058 } 1062 }
1059 1063
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 } 1290 }
1287 target = currentClass.lookupSuperMember(name); 1291 target = currentClass.lookupSuperMember(name);
1288 // [target] may be null which means invoking noSuchMethod on 1292 // [target] may be null which means invoking noSuchMethod on
1289 // super. 1293 // super.
1290 } else if (Elements.isUnresolved(resolvedReceiver)) { 1294 } else if (Elements.isUnresolved(resolvedReceiver)) {
1291 return null; 1295 return null;
1292 } else if (resolvedReceiver.kind === ElementKind.CLASS) { 1296 } else if (resolvedReceiver.kind === ElementKind.CLASS) {
1293 ClassElement receiverClass = resolvedReceiver; 1297 ClassElement receiverClass = resolvedReceiver;
1294 target = receiverClass.ensureResolved(compiler).lookupLocalMember(name); 1298 target = receiverClass.ensureResolved(compiler).lookupLocalMember(name);
1295 if (target === null) { 1299 if (target === null) {
1300 // TODO(karlklose): this should be reported by the caller to select
ngeoffray 2012/09/13 09:18:30 the caller of [resolveSend] ...
karlklose 2012/09/13 12:00:43 Done.
1301 // better warning messages for getters and setters.
1296 return warnAndCreateErroneousElement(node, name, 1302 return warnAndCreateErroneousElement(node, name,
1297 MessageKind.METHOD_NOT_FOUND, 1303 MessageKind.METHOD_NOT_FOUND,
1298 [receiverClass.name, name]); 1304 [receiverClass.name, name]);
1299 } else if (target.isInstanceMember()) { 1305 } else if (target.isInstanceMember()) {
1300 error(node, MessageKind.MEMBER_NOT_STATIC, [receiverClass.name, name]); 1306 error(node, MessageKind.MEMBER_NOT_STATIC, [receiverClass.name, name]);
1301 } 1307 }
1302 } else if (resolvedReceiver.kind === ElementKind.PREFIX) { 1308 } else if (resolvedReceiver.kind === ElementKind.PREFIX) {
1303 PrefixElement prefix = resolvedReceiver; 1309 PrefixElement prefix = resolvedReceiver;
1304 target = prefix.lookupLocalMember(name); 1310 target = prefix.lookupLocalMember(name);
1305 if (target == null) { 1311 if (target == null) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1389 } 1395 }
1390 } 1396 }
1391 } 1397 }
1392 1398
1393 visitSend(Send node) { 1399 visitSend(Send node) {
1394 Element target = resolveSend(node); 1400 Element target = resolveSend(node);
1395 if (!Elements.isUnresolved(target) 1401 if (!Elements.isUnresolved(target)
1396 && target.kind == ElementKind.ABSTRACT_FIELD) { 1402 && target.kind == ElementKind.ABSTRACT_FIELD) {
1397 AbstractFieldElement field = target; 1403 AbstractFieldElement field = target;
1398 target = field.getter; 1404 target = field.getter;
1399 if (Elements.isUnresolved(target) && !inInstanceContext) { 1405 if (target == null && !inInstanceContext) {
1400 error(node.selector, MessageKind.CANNOT_RESOLVE_GETTER); 1406 target =
1407 warnAndCreateErroneousElement(node.selector, field.name,
1408 MessageKind.CANNOT_RESOLVE_GETTER,
1409 [node.selector]);
1401 } 1410 }
1402 } 1411 }
1403 1412
1404 bool resolvedArguments = false; 1413 bool resolvedArguments = false;
1405 if (node.isOperator) { 1414 if (node.isOperator) {
1406 String operatorString = node.selector.asOperator().source.stringValue; 1415 String operatorString = node.selector.asOperator().source.stringValue;
1407 if (operatorString === 'is' || operatorString === 'as') { 1416 if (operatorString === 'is' || operatorString === 'as') {
1408 assert(node.arguments.tail.isEmpty()); 1417 assert(node.arguments.tail.isEmpty());
1409 DartType type = resolveTypeTest(node.arguments.head); 1418 DartType type = resolveTypeTest(node.arguments.head);
1410 if (type != null) { 1419 if (type != null) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1453 Element setter = target; 1462 Element setter = target;
1454 Element getter = target; 1463 Element getter = target;
1455 String source = node.assignmentOperator.source.stringValue; 1464 String source = node.assignmentOperator.source.stringValue;
1456 bool isComplex = source !== '='; 1465 bool isComplex = source !== '=';
1457 if (!Elements.isUnresolved(target) 1466 if (!Elements.isUnresolved(target)
1458 && target.kind == ElementKind.ABSTRACT_FIELD) { 1467 && target.kind == ElementKind.ABSTRACT_FIELD) {
1459 AbstractFieldElement field = target; 1468 AbstractFieldElement field = target;
1460 setter = field.setter; 1469 setter = field.setter;
1461 getter = field.getter; 1470 getter = field.getter;
1462 if (setter == null && !inInstanceContext) { 1471 if (setter == null && !inInstanceContext) {
1463 error(node.selector, MessageKind.CANNOT_RESOLVE_SETTER); 1472 setter =
1473 warnAndCreateErroneousElement(node.selector, field.name,
1474 MessageKind.CANNOT_RESOLVE_SETTER,
1475 [node.selector]);
1464 } 1476 }
1465 if (isComplex && getter == null && !inInstanceContext) { 1477 if (isComplex && getter == null && !inInstanceContext) {
1466 error(node.selector, MessageKind.CANNOT_RESOLVE_GETTER); 1478 getter =
1479 warnAndCreateErroneousElement(node.selector, field.name,
1480 MessageKind.CANNOT_RESOLVE_GETTER,
1481 [node.selector]);
1467 } 1482 }
1468 } 1483 }
1469 1484
1470 visit(node.argumentsNode); 1485 visit(node.argumentsNode);
1471 1486
1472 // TODO(ngeoffray): Check if the target can be assigned. 1487 // TODO(ngeoffray): Check if the target can be assigned.
1473 // TODO(ngeoffray): Warn if target is null and the send is 1488 // TODO(ngeoffray): Warn if target is null and the send is
1474 // unqualified. 1489 // unqualified.
1475 1490
1476 Selector selector = mapping.getSelector(node); 1491 Selector selector = mapping.getSelector(node);
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after
2763 2778
2764 Element localLookup(SourceString name) => library.find(name); 2779 Element localLookup(SourceString name) => library.find(name);
2765 Element lookup(SourceString name) => localLookup(name); 2780 Element lookup(SourceString name) => localLookup(name);
2766 Element lexicalLookup(SourceString name) => localLookup(name); 2781 Element lexicalLookup(SourceString name) => localLookup(name);
2767 2782
2768 Element add(Element newElement) { 2783 Element add(Element newElement) {
2769 throw "Cannot add an element in the top scope"; 2784 throw "Cannot add an element in the top scope";
2770 } 2785 }
2771 String toString() => '$element'; 2786 String toString() => '$element';
2772 } 2787 }
OLDNEW
« no previous file with comments | « no previous file | tests/co19/co19-dart2js.status » ('j') | tests/co19/co19-dart2js.status » ('J')

Powered by Google App Engine
This is Rietveld 408576698