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

Unified Diff: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.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/resolver/MemberBuilder.java
diff --git a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
index 21cfb297ac091e95d9dd9a8e63dbe083d7bd4dfa..4d5d271887eb3482712ac7aed0b35b434aabfb6e 100644
--- a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
+++ b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
@@ -30,6 +30,7 @@ import com.google.dart.compiler.common.HasSourceInfo;
import com.google.dart.compiler.common.SourceInfo;
import com.google.dart.compiler.type.Type;
import com.google.dart.compiler.type.Types;
+import com.google.dart.compiler.util.apache.StringUtils;
import java.util.ArrayList;
import java.util.List;
@@ -434,9 +435,17 @@ public class MemberBuilder {
Element element = null;
if (currentHolder != null) {
element = currentHolder.lookupLocalElement(name);
+ if (element == null) {
+ element = currentHolder.lookupLocalElement("setter " + name);
+ }
} else {
// Top level nodes are not handled gracefully
- element = topLevelContext.getScope().findElement(context.getScope().getLibrary(), name);
+ Scope scope = topLevelContext.getScope();
+ LibraryElement library = context.getScope().getLibrary();
+ element = scope.findElement(library, name);
+ if (element == null) {
+ element = scope.findElement(library, "setter" + name);
Brian Wilkerson 2012/09/18 17:26:42 Should there be a space here? Perhaps we could cre
+ }
}
FieldElementImplementation fieldElement = null;
@@ -445,6 +454,14 @@ public class MemberBuilder {
fieldElement = (FieldElementImplementation) element;
}
+ if (accessorNode.getModifiers().isGetter() && fieldElement != null && fieldElement.getSetter() != null) {
+ MethodNodeElement oldSetter = fieldElement.getSetter();
+ fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, fieldNode.getObsoleteMetadata(),
+ fieldNode.getModifiers());
+ fieldElement.setSetter(oldSetter);
+ addField(currentHolder, fieldElement);
+ }
+
if (fieldElement == null) {
fieldElement = Elements.fieldFromNode(fieldNode, currentHolder, fieldNode.getObsoleteMetadata(),
fieldNode.getModifiers());
@@ -608,8 +625,30 @@ public class MemberBuilder {
}
private void checkUniqueName(EnclosingElement holder, Element e) {
+ if (ElementKind.of(holder) == ElementKind.LIBRARY) {
+ return;
+ }
Element other = lookupElementByName(holder, e.getName(), e.getModifiers());
assert e != other : "forgot to call checkUniqueName() before adding to the class?";
+
+ if (other == null && e instanceof FieldElement) {
+ FieldElement eField = (FieldElement) e;
+ if (!eField.getModifiers().isAbstractField()) {
+ other = lookupElementByName(holder, "setter " + e.getName(), e.getModifiers());
+ }
+ if (eField.getModifiers().isAbstractField()
+ && StringUtils.startsWith(e.getName(), "setter ")) {
+ Element other2 = lookupElementByName(holder,
+ StringUtils.removeStart(e.getName(), "setter "), e.getModifiers());
+ if (other2 instanceof FieldElement) {
+ FieldElement otherField = (FieldElement) other2;
+ if (!otherField.getModifiers().isAbstractField()) {
+ other = otherField;
+ }
+ }
+ }
+ }
+
if (other != null) {
ElementKind eKind = ElementKind.of(e);
ElementKind oKind = ElementKind.of(other);

Powered by Google App Engine
This is Rietveld 408576698