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

Unified Diff: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java

Issue 10943012: Issue 5153. Setter should not conflict with method (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 side-by-side diff with in-line comments
Download patch
Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 896d394013bb33fadfd817e4c2d9c4183868fe05..15c81a858ec440073b9816be143a6a08b8445259 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -638,6 +638,9 @@ public class TypeAnalyzer implements DartCompilationPhase {
return null;
}
Member member = itype.lookupMember(methodName);
+ if (member == null) {
+ member = itype.lookupMember("setter " + methodName);
+ }
if (member == null && problemTarget != null) {
if (reportNoMemberWhenHasInterceptor || !Elements.handlesNoSuchMethod(itype)) {
if (typeChecksForInferredTypes || !receiver.isInferred()) {
@@ -2275,6 +2278,12 @@ public class TypeAnalyzer implements DartCompilationPhase {
// Do not visit the name, it may not have been resolved.
String name = node.getPropertyName();
InterfaceType.Member member = cls.lookupMember(name);
+ if (member == null || ASTNodes.inSetterContext(node)) {
+ InterfaceType.Member member2 = cls.lookupMember("setter " + name);
+ if (member2 != null && (member == null || member2.getHolder() == member.getHolder() || types.isSubtype(member2.getHolder(), member.getHolder()))) {
+ member = member2;
+ }
+ }
if (member == null) {
if (reportNoMemberWhenHasInterceptor || !Elements.handlesNoSuchMethod(cls)) {
if (typeChecksForInferredTypes || !receiver.isInferred()) {
@@ -2332,6 +2341,9 @@ public class TypeAnalyzer implements DartCompilationPhase {
if (setter == null) {
setter = Elements.lookupFieldElementSetter(enclosingClass, name);
if (setter == null) {
+ setter = Elements.lookupFieldElementSetter(enclosingClass, "setter " + name);
+ }
+ if (setter == null) {
return typeError(node.getName(), TypeErrorCode.FIELD_HAS_NO_SETTER, node.getName());
}
}

Powered by Google App Engine
This is Rietveld 408576698