| 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);
|
| + }
|
| }
|
|
|