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

Unified Diff: compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.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/TopLevelElementBuilder.java
diff --git a/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java b/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
index 7eb66ee3133b5dac55ddedadb415cec9a931e19f..2f054aad02b2d1a7fb8413e61e1553948f5f81d5 100644
--- a/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
+++ b/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
@@ -30,6 +30,7 @@ import com.google.dart.compiler.common.SourceInfo;
import com.google.dart.compiler.type.Type;
import com.google.dart.compiler.type.TypeVariable;
import com.google.dart.compiler.type.Types;
+import com.google.dart.compiler.util.apache.StringUtils;
import java.util.Collections;
import java.util.List;
@@ -197,11 +198,29 @@ public class TopLevelElementBuilder {
}
private void declare(Element newElement, DartCompilerListener listener, Scope scope) {
- Element oldElement = scope.declareElement(newElement.getName(), newElement);
+ String name = newElement.getName();
+ Element oldElement = scope.findLocalElement(name);
+ if (oldElement == null && newElement instanceof FieldElement) {
+ FieldElement eField = (FieldElement) newElement;
+ if (!eField.getModifiers().isAbstractField()) {
+ oldElement = scope.findLocalElement("setter " + name);
+ }
+ if (eField.getModifiers().isAbstractField()
+ && StringUtils.startsWith(name, "setter ")) {
+ Element other2 = scope.findLocalElement(StringUtils.removeStart(name, "setter "));
+ if (other2 instanceof FieldElement) {
+ FieldElement otherField = (FieldElement) other2;
+ if (!otherField.getModifiers().isAbstractField()) {
+ oldElement = otherField;
+ }
+ }
+ }
+ }
if (shouldReportDuplicateDeclaration(oldElement, newElement)) {
reportDuplicateDeclaration(listener, oldElement, newElement);
reportDuplicateDeclaration(listener, newElement, oldElement);
}
+ scope.declareElement(name, newElement);
}
private static boolean shouldReportDuplicateDeclaration(Element oldElement, Element newElement) {

Powered by Google App Engine
This is Rietveld 408576698