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

Unified Diff: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/scope/LibraryImportScope.java

Issue 23481015: Fix for issue 12726 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/scope/LibraryImportScope.java
diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/scope/LibraryImportScope.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/scope/LibraryImportScope.java
index dc6eb523720a20c4a29d30ee575e87c3204cf93b..ceec243cd04faf7ec8fe71be3bfe6b5d956e99fd 100644
--- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/scope/LibraryImportScope.java
+++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/scope/LibraryImportScope.java
@@ -88,7 +88,7 @@ public class LibraryImportScope extends Scope {
if (element != null) {
if (foundElement == null) {
foundElement = element;
- } else {
+ } else if (foundElement != element) {
foundElement = new MultiplyDefinedElementImpl(
definingLibrary.getContext(),
foundElement,
@@ -97,6 +97,9 @@ public class LibraryImportScope extends Scope {
}
}
if (foundElement instanceof MultiplyDefinedElementImpl) {
+ foundElement = removeSdkElements((MultiplyDefinedElementImpl) foundElement);
+ }
+ if (foundElement instanceof MultiplyDefinedElementImpl) {
String foundEltName = foundElement.getDisplayName();
String libName1 = "", libName2 = "";
Element[] conflictingMembers = ((MultiplyDefinedElementImpl) foundElement).getConflictingElements();
@@ -139,4 +142,32 @@ public class LibraryImportScope extends Scope {
importedNamespaces.add(builder.createImportNamespace(element));
}
}
+
+ /**
+ * Given a collection of elements that a single name could all be mapped to, remove from the list
+ * all of the names defined in the SDK. Return the element(s) that remain.
+ *
+ * @param foundElement the element encapsulating the collection of elements
+ * @return all of the elements that are not defined in the SDK
+ */
+ private Element removeSdkElements(MultiplyDefinedElementImpl foundElement) {
+ Element[] conflictingMembers = foundElement.getConflictingElements();
+ int length = conflictingMembers.length;
+ int to = 0;
+ for (Element member : conflictingMembers) {
+ if (!member.getLibrary().isInSdk()) {
+ conflictingMembers[to++] = member;
+ }
+ }
+ if (to == length) {
+ // None of the members were removed
+ return foundElement;
+ } else if (to == 1) {
+ // All but one member was removed
+ return conflictingMembers[0];
+ }
+ Element[] remaining = new Element[to];
+ System.arraycopy(conflictingMembers, 0, remaining, 0, to);
+ return new MultiplyDefinedElementImpl(definingLibrary.getContext(), remaining);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698