| Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
|
| diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
|
| index 5391157ce833529639a124eecd75ca43d123abf6..37abecc13284f0a05951ab88680d3d97400c73d9 100644
|
| --- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
|
| +++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
|
| @@ -869,6 +869,11 @@ public class ElementResolver extends SimpleAstVisitor<Void> {
|
| if (target == null) {
|
| staticElement = resolveInvokedElement(methodName);
|
| propagatedElement = null;
|
| + } else if (isDeferredPrefix(target)
|
| + && methodName.getName().equals(FunctionElement.LOAD_LIBRARY_NAME)) {
|
| + LibraryElement importedLibrary = getImportedLibrary(target);
|
| + methodName.setStaticElement(importedLibrary.getLoadLibraryFunction());
|
| + return null;
|
| } else {
|
| Type staticType = getStaticType(target);
|
| //
|
| @@ -1627,6 +1632,20 @@ public class ElementResolver extends SimpleAstVisitor<Void> {
|
| }
|
|
|
| /**
|
| + * Assuming that the given expression is a prefix for a deferred import, return the library that
|
| + * is being imported.
|
| + *
|
| + * @param expression the expression representing the deferred import's prefix
|
| + * @return the library that is being imported by the import associated with the prefix
|
| + */
|
| + private LibraryElement getImportedLibrary(Expression expression) {
|
| + PrefixElement prefixElement = (PrefixElement) ((SimpleIdentifier) expression).getStaticElement();
|
| + ImportElement[] imports = prefixElement.getEnclosingElement().getImportsWithPrefix(
|
| + prefixElement);
|
| + return imports[0].getImportedLibrary();
|
| + }
|
| +
|
| + /**
|
| * Return the name of the method invoked by the given postfix expression.
|
| *
|
| * @param node the postfix expression being invoked
|
| @@ -1695,6 +1714,29 @@ public class ElementResolver extends SimpleAstVisitor<Void> {
|
| }
|
|
|
| /**
|
| + * Return {@code true} if the given expression is a prefix for a deferred import.
|
| + *
|
| + * @param expression the expression being tested
|
| + * @return {@code true} if the given expression is a prefix for a deferred import
|
| + */
|
| + private boolean isDeferredPrefix(Expression expression) {
|
| + if (!(expression instanceof SimpleIdentifier)) {
|
| + return false;
|
| + }
|
| + Element element = ((SimpleIdentifier) expression).getStaticElement();
|
| + if (!(element instanceof PrefixElement)) {
|
| + return false;
|
| + }
|
| + PrefixElement prefixElement = (PrefixElement) element;
|
| + ImportElement[] imports = prefixElement.getEnclosingElement().getImportsWithPrefix(
|
| + prefixElement);
|
| + if (imports.length != 1) {
|
| + return false;
|
| + }
|
| + return imports[0].isDeferred();
|
| + }
|
| +
|
| + /**
|
| * Return {@code true} if the given type represents an object that could be invoked using the call
|
| * operator '()'.
|
| *
|
|
|