| Index: pkg/analyzer/lib/src/generated/element_resolver.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| index 04d36846e3dd210e126da5286f89f0cd8694eb2a..b387a98c12c67e195bd3944a77ad672f1c7d0931 100644
|
| --- a/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| +++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| @@ -868,7 +868,9 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| if (prefixElement is PrefixElement) {
|
| Element element = _resolver.nameScope.lookup(node, _definingLibrary);
|
| if (element == null && identifier.inSetterContext()) {
|
| - element = _resolver.nameScope.lookup(new ElementResolver_SyntheticIdentifier("${node.name}="), _definingLibrary);
|
| + element = _resolver.nameScope.lookup(new SyntheticIdentifier(
|
| + "${node.name}=", node),
|
| + _definingLibrary);
|
| }
|
| if (element == null) {
|
| if (identifier.inSetterContext()) {
|
| @@ -1329,7 +1331,9 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| for (ImportElement importElement in _definingLibrary.imports) {
|
| PrefixElement prefixElement = importElement.prefix;
|
| if (prefixElement != null) {
|
| - Identifier prefixedIdentifier = new ElementResolver_SyntheticIdentifier("${prefixElement.name}.${identifier.name}");
|
| + Identifier prefixedIdentifier = new SyntheticIdentifier(
|
| + "${prefixElement.name}.${identifier.name}",
|
| + identifier);
|
| Element importedElement = nameScope.lookup(prefixedIdentifier, _definingLibrary);
|
| if (importedElement != null) {
|
| if (element == null) {
|
| @@ -2355,7 +2359,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| // imported top-level function or top-level getter that returns a function.
|
| //
|
| String name = "${target.name}.$methodName";
|
| - Identifier functionName = new ElementResolver_SyntheticIdentifier(name);
|
| + Identifier functionName = new SyntheticIdentifier(name, methodName);
|
| Element element = _resolver.nameScope.lookup(functionName, _definingLibrary);
|
| if (element != null) {
|
| // TODO(brianwilkerson) This isn't a method invocation, it's a function invocation where
|
| @@ -2487,8 +2491,11 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| element = setter;
|
| }
|
| }
|
| - } else if (element == null && (node.inSetterContext() || node.parent is CommentReference)) {
|
| - element = _resolver.nameScope.lookup(new ElementResolver_SyntheticIdentifier("${node.name}="), _definingLibrary);
|
| + } else if (element == null
|
| + && (node.inSetterContext() || node.parent is CommentReference)) {
|
| + element = _resolver.nameScope.lookup(
|
| + new SyntheticIdentifier("${node.name}=", node),
|
| + _definingLibrary);
|
| }
|
| ClassElement enclosingClass = _resolver.enclosingClass;
|
| if (element == null && enclosingClass != null) {
|
| @@ -2591,23 +2598,28 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| }
|
|
|
| /**
|
| - * Instances of the class `SyntheticIdentifier` implement an identifier that can be used to
|
| - * look up names in the lexical scope when there is no identifier in the AST structure. There is
|
| - * no identifier in the AST when the parser could not distinguish between a method invocation and
|
| - * an invocation of a top-level function imported with a prefix.
|
| + * A `SyntheticIdentifier` is an identifier that can be used to look up names in
|
| + * the lexical scope when there is no identifier in the AST structure. There is
|
| + * no identifier in the AST when the parser could not distinguish between a
|
| + * method invocation and an invocation of a top-level function imported with a
|
| + * prefix.
|
| */
|
| -class ElementResolver_SyntheticIdentifier extends Identifier {
|
| +class SyntheticIdentifier extends Identifier {
|
| /**
|
| * The name of the synthetic identifier.
|
| */
|
| final String name;
|
|
|
| /**
|
| - * Initialize a newly created synthetic identifier to have the given name.
|
| - *
|
| - * @param name the name of the synthetic identifier
|
| + * The identifier to be highlighted in case of an error
|
| */
|
| - ElementResolver_SyntheticIdentifier(this.name);
|
| + final Identifier identifier;
|
| +
|
| + /**
|
| + * Initialize a newly created synthetic identifier to have the given [name]
|
| + * and [identifier].
|
| + */
|
| + SyntheticIdentifier(this.name, this.identifier);
|
|
|
| @override
|
| accept(AstVisitor visitor) => null;
|
| @@ -2622,6 +2634,12 @@ class ElementResolver_SyntheticIdentifier extends Identifier {
|
| sc.Token get endToken => null;
|
|
|
| @override
|
| + int get length => identifier.length;
|
| +
|
| + @override
|
| + int get offset => identifier.offset;
|
| +
|
| + @override
|
| int get precedence => 16;
|
|
|
| @override
|
| @@ -2634,4 +2652,3 @@ class ElementResolver_SyntheticIdentifier extends Identifier {
|
| void visitChildren(AstVisitor visitor) {
|
| }
|
| }
|
| -
|
|
|