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

Unified Diff: lib/compiler/implementation/resolver.dart

Issue 10920089: Generate a warning and a runtime error for calls to nonexistent static calls, getters and setters. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove case for variable == null in handling of ForIn. 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 side-by-side diff with in-line comments
Download patch
Index: lib/compiler/implementation/resolver.dart
diff --git a/lib/compiler/implementation/resolver.dart b/lib/compiler/implementation/resolver.dart
index 4b6a8f49fdbe5ed61d7e91227689569694408830..09c19413dc4227ad7b6c6cb032b9a416d5b20e12 100644
--- a/lib/compiler/implementation/resolver.dart
+++ b/lib/compiler/implementation/resolver.dart
@@ -990,8 +990,8 @@ class ResolverVisitor extends CommonResolverVisitor<Element> {
TargetElement element = mapping[statement];
if (element === null) {
element = new TargetElement(statement,
- statementScope.nestingLevel,
- enclosingElement);
+ statementScope.nestingLevel,
+ enclosingElement);
mapping[statement] = element;
}
return element;
@@ -1009,6 +1009,12 @@ class ResolverVisitor extends CommonResolverVisitor<Element> {
inStaticContext(() => visit(node));
}
+ ErroneousElement warnAndCreateErroneousElement(Node node, MessageKind kind) {
+ ResolutionWarning warning = new ResolutionWarning(kind, [node]);
+ compiler.reportWarning(node, warning);
+ return new ErroneousElement(warning.message, enclosingElement);
+ }
+
Element visitIdentifier(Identifier node) {
if (node.isThis()) {
if (!inInstanceContext) {
@@ -1024,7 +1030,10 @@ class ResolverVisitor extends CommonResolverVisitor<Element> {
} else {
Element element = lookup(node, node.source);
if (element === null) {
- if (!inInstanceContext) error(node, MessageKind.CANNOT_RESOLVE, [node]);
+ if (!inInstanceContext) {
+ element =
+ warnAndCreateErroneousElement(node, MessageKind.CANNOT_RESOLVE);
+ }
} else {
if ((element.kind.category & allowedCategory) == 0) {
// TODO(ahe): Improve error message. Need UX input.
@@ -1336,9 +1345,10 @@ class ResolverVisitor extends CommonResolverVisitor<Element> {
&& target.kind == ElementKind.ABSTRACT_FIELD) {
AbstractFieldElement field = target;
target = field.getter;
- if (Element.isInvalid(target) && !inInstanceContext) {
- // TODO(karlklose): make this a runtime error.
- error(node.selector, MessageKind.CANNOT_RESOLVE_GETTER);
+ if (target == null && !inInstanceContext) {
+ target =
+ warnAndCreateErroneousElement(node.selector,
ngeoffray 2012/09/05 11:46:45 Move warnAndcreateErroneouselement one up, and put
karlklose 2012/09/05 14:53:42 This change is reverted.
+ MessageKind.CANNOT_RESOLVE_GETTER);
}
}
@@ -1402,17 +1412,20 @@ class ResolverVisitor extends CommonResolverVisitor<Element> {
Element getter = target;
String source = node.assignmentOperator.source.stringValue;
bool isComplex = source !== '=';
- if (target != null && target.kind == ElementKind.ABSTRACT_FIELD) {
+ if (!Element.isInvalid(target)
+ && target.kind == ElementKind.ABSTRACT_FIELD) {
AbstractFieldElement field = target;
setter = field.setter;
getter = field.getter;
- if (Element.isInvalid(setter) && !inInstanceContext) {
- // TODO(karlklose): make this a runtime error.
- error(node.selector, MessageKind.CANNOT_RESOLVE_SETTER);
- }
- if (isComplex && Element.isInvalid(getter) && !inInstanceContext) {
- // TODO(karlklose): make this a runtime error.
- error(node.selector, MessageKind.CANNOT_RESOLVE_GETTER);
+ if (setter == null && !inInstanceContext) {
+ setter =
+ warnAndCreateErroneousElement(node.selector,
+ MessageKind.CANNOT_RESOLVE_GETTER);
ngeoffray 2012/09/05 11:46:45 ditto
karlklose 2012/09/05 14:53:42 ditto.
+ }
+ if (isComplex && getter == null && !inInstanceContext) {
+ getter =
+ warnAndCreateErroneousElement(node.selector,
+ MessageKind.CANNOT_RESOLVE_GETTER);
}
}

Powered by Google App Engine
This is Rietveld 408576698