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

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: Changed test. 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') | no next file with comments »
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 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 return null; 1047 return null;
1048 } else if (node.isSuper()) { 1048 } else if (node.isSuper()) {
1049 if (!inInstanceContext) error(node, MessageKind.NO_SUPER_IN_STATIC); 1049 if (!inInstanceContext) error(node, MessageKind.NO_SUPER_IN_STATIC);
1050 if ((ElementCategory.SUPER & allowedCategory) == 0) { 1050 if ((ElementCategory.SUPER & allowedCategory) == 0) {
1051 error(node, MessageKind.INVALID_USE_OF_SUPER); 1051 error(node, MessageKind.INVALID_USE_OF_SUPER);
1052 } 1052 }
1053 return null; 1053 return null;
1054 } else { 1054 } else {
1055 Element element = lookup(node, node.source); 1055 Element element = lookup(node, node.source);
1056 if (element === null) { 1056 if (element === null) {
1057 if (!inInstanceContext) error(node, MessageKind.CANNOT_RESOLVE, [node]); 1057 if (!inInstanceContext) {
1058 element = warnAndCreateErroneousElement(node, node.source,
1059 MessageKind.CANNOT_RESOLVE,
1060 [node]);
1061 }
1058 } else { 1062 } else {
1059 if ((element.kind.category & allowedCategory) == 0) { 1063 if ((element.kind.category & allowedCategory) == 0) {
1060 // TODO(ahe): Improve error message. Need UX input. 1064 // TODO(ahe): Improve error message. Need UX input.
1061 error(node, MessageKind.GENERIC, ["is not an expression $element"]); 1065 error(node, MessageKind.GENERIC, ["is not an expression $element"]);
1062 } 1066 }
1063 } 1067 }
1064 return useElement(node, element); 1068 return useElement(node, element);
1065 } 1069 }
1066 } 1070 }
1067 1071
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 } 1298 }
1295 target = currentClass.lookupSuperMember(name); 1299 target = currentClass.lookupSuperMember(name);
1296 // [target] may be null which means invoking noSuchMethod on 1300 // [target] may be null which means invoking noSuchMethod on
1297 // super. 1301 // super.
1298 } else if (Elements.isUnresolved(resolvedReceiver)) { 1302 } else if (Elements.isUnresolved(resolvedReceiver)) {
1299 return null; 1303 return null;
1300 } else if (resolvedReceiver.kind === ElementKind.CLASS) { 1304 } else if (resolvedReceiver.kind === ElementKind.CLASS) {
1301 ClassElement receiverClass = resolvedReceiver; 1305 ClassElement receiverClass = resolvedReceiver;
1302 target = receiverClass.ensureResolved(compiler).lookupLocalMember(name); 1306 target = receiverClass.ensureResolved(compiler).lookupLocalMember(name);
1303 if (target === null) { 1307 if (target === null) {
1308 // TODO(karlklose): this should be reported by the caller of
1309 // [resolveSend] to select better warning messages for getters and
1310 // setters.
1304 return warnAndCreateErroneousElement(node, name, 1311 return warnAndCreateErroneousElement(node, name,
1305 MessageKind.METHOD_NOT_FOUND, 1312 MessageKind.METHOD_NOT_FOUND,
1306 [receiverClass.name, name]); 1313 [receiverClass.name, name]);
1307 } else if (target.isInstanceMember()) { 1314 } else if (target.isInstanceMember()) {
1308 error(node, MessageKind.MEMBER_NOT_STATIC, [receiverClass.name, name]); 1315 error(node, MessageKind.MEMBER_NOT_STATIC, [receiverClass.name, name]);
1309 } 1316 }
1310 } else if (resolvedReceiver.kind === ElementKind.PREFIX) { 1317 } else if (resolvedReceiver.kind === ElementKind.PREFIX) {
1311 PrefixElement prefix = resolvedReceiver; 1318 PrefixElement prefix = resolvedReceiver;
1312 target = prefix.lookupLocalMember(name); 1319 target = prefix.lookupLocalMember(name);
1313 if (target == null) { 1320 if (target == null) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 } 1404 }
1398 } 1405 }
1399 } 1406 }
1400 1407
1401 visitSend(Send node) { 1408 visitSend(Send node) {
1402 Element target = resolveSend(node); 1409 Element target = resolveSend(node);
1403 if (!Elements.isUnresolved(target) 1410 if (!Elements.isUnresolved(target)
1404 && target.kind == ElementKind.ABSTRACT_FIELD) { 1411 && target.kind == ElementKind.ABSTRACT_FIELD) {
1405 AbstractFieldElement field = target; 1412 AbstractFieldElement field = target;
1406 target = field.getter; 1413 target = field.getter;
1407 if (Elements.isUnresolved(target) && !inInstanceContext) { 1414 if (target == null && !inInstanceContext) {
1408 error(node.selector, MessageKind.CANNOT_RESOLVE_GETTER); 1415 target =
1416 warnAndCreateErroneousElement(node.selector, field.name,
1417 MessageKind.CANNOT_RESOLVE_GETTER,
1418 [node.selector]);
1409 } 1419 }
1410 } 1420 }
1411 1421
1412 bool resolvedArguments = false; 1422 bool resolvedArguments = false;
1413 if (node.isOperator) { 1423 if (node.isOperator) {
1414 String operatorString = node.selector.asOperator().source.stringValue; 1424 String operatorString = node.selector.asOperator().source.stringValue;
1415 if (operatorString === 'is' || operatorString === 'as') { 1425 if (operatorString === 'is' || operatorString === 'as') {
1416 assert(node.arguments.tail.isEmpty()); 1426 assert(node.arguments.tail.isEmpty());
1417 DartType type = resolveTypeTest(node.arguments.head); 1427 DartType type = resolveTypeTest(node.arguments.head);
1418 if (type != null) { 1428 if (type != null) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 Element setter = target; 1471 Element setter = target;
1462 Element getter = target; 1472 Element getter = target;
1463 String source = node.assignmentOperator.source.stringValue; 1473 String source = node.assignmentOperator.source.stringValue;
1464 bool isComplex = source !== '='; 1474 bool isComplex = source !== '=';
1465 if (!Elements.isUnresolved(target) 1475 if (!Elements.isUnresolved(target)
1466 && target.kind == ElementKind.ABSTRACT_FIELD) { 1476 && target.kind == ElementKind.ABSTRACT_FIELD) {
1467 AbstractFieldElement field = target; 1477 AbstractFieldElement field = target;
1468 setter = field.setter; 1478 setter = field.setter;
1469 getter = field.getter; 1479 getter = field.getter;
1470 if (setter == null && !inInstanceContext) { 1480 if (setter == null && !inInstanceContext) {
1471 error(node.selector, MessageKind.CANNOT_RESOLVE_SETTER); 1481 setter =
1482 warnAndCreateErroneousElement(node.selector, field.name,
1483 MessageKind.CANNOT_RESOLVE_SETTER,
1484 [node.selector]);
1472 } 1485 }
1473 if (isComplex && getter == null && !inInstanceContext) { 1486 if (isComplex && getter == null && !inInstanceContext) {
1474 error(node.selector, MessageKind.CANNOT_RESOLVE_GETTER); 1487 getter =
1488 warnAndCreateErroneousElement(node.selector, field.name,
1489 MessageKind.CANNOT_RESOLVE_GETTER,
1490 [node.selector]);
1475 } 1491 }
1476 } 1492 }
1477 1493
1478 visit(node.argumentsNode); 1494 visit(node.argumentsNode);
1479 1495
1480 // TODO(ngeoffray): Check if the target can be assigned. 1496 // TODO(ngeoffray): Check if the target can be assigned.
1481 // TODO(ngeoffray): Warn if target is null and the send is 1497 // TODO(ngeoffray): Warn if target is null and the send is
1482 // unqualified. 1498 // unqualified.
1483 1499
1484 Selector selector = mapping.getSelector(node); 1500 Selector selector = mapping.getSelector(node);
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after
2771 2787
2772 Element localLookup(SourceString name) => library.find(name); 2788 Element localLookup(SourceString name) => library.find(name);
2773 Element lookup(SourceString name) => localLookup(name); 2789 Element lookup(SourceString name) => localLookup(name);
2774 Element lexicalLookup(SourceString name) => localLookup(name); 2790 Element lexicalLookup(SourceString name) => localLookup(name);
2775 2791
2776 Element add(Element newElement) { 2792 Element add(Element newElement) {
2777 throw "Cannot add an element in the top scope"; 2793 throw "Cannot add an element in the top scope";
2778 } 2794 }
2779 String toString() => '$element'; 2795 String toString() => '$element';
2780 } 2796 }
OLDNEW
« no previous file with comments | « no previous file | tests/co19/co19-dart2js.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698