| Index: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| diff --git a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| index 207370f8597bd51af8bb463c3d9b211da19f7144..07cd57e203e59a95b159f1ed509a69ac708eb77d 100644
|
| --- a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| +++ b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
|
| @@ -268,10 +268,16 @@ public class MemberBuilder {
|
|
|
| private Element resolveConstructorName(final DartMethodDefinition method) {
|
| return method.getName().accept(new ASTVisitor<Element>() {
|
| - @Override public Element visitPropertyAccess(DartPropertyAccess node) {
|
| - Element element = node.getQualifier().accept(this);
|
| - recordElement(node.getQualifier(), element);
|
| - if (ElementKind.of(element).equals(ElementKind.CLASS)) {
|
| + @Override
|
| + public Element visitPropertyAccess(DartPropertyAccess node) {
|
| + Element element = context.resolveName(node);
|
| + if (ElementKind.of(element) == ElementKind.CLASS) {
|
| + return resolveType(node);
|
| + } else {
|
| + element = node.getQualifier().accept(this);
|
| + recordElement(node.getQualifier(), element);
|
| + }
|
| + if (ElementKind.of(element) == ElementKind.CLASS) {
|
| return Elements.constructorFromMethodNode(
|
| method, node.getPropertyName(), (ClassElement) currentHolder, (ClassElement) element);
|
| } else {
|
| @@ -279,7 +285,11 @@ public class MemberBuilder {
|
| return getTypeProvider().getDynamicType().getElement();
|
| }
|
| }
|
| - @Override public Element visitIdentifier(DartIdentifier node) {
|
| + @Override
|
| + public Element visitIdentifier(DartIdentifier node) {
|
| + return resolveType(node);
|
| + }
|
| + private Element resolveType(DartNode node) {
|
| return context.resolveType(
|
| node,
|
| node,
|
| @@ -289,7 +299,8 @@ public class MemberBuilder {
|
| ResolverErrorCode.NO_SUCH_TYPE_CONSTRUCTOR,
|
| ResolverErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS).getElement();
|
| }
|
| - @Override public Element visitParameterizedTypeNode(DartParameterizedTypeNode node) {
|
| + @Override
|
| + public Element visitParameterizedTypeNode(DartParameterizedTypeNode node) {
|
| Element element = node.getExpression().accept(this);
|
| if (ElementKind.of(element).equals(ElementKind.CONSTRUCTOR)) {
|
| recordElement(node.getExpression(), currentHolder);
|
| @@ -298,7 +309,8 @@ public class MemberBuilder {
|
| }
|
| return element;
|
| }
|
| - @Override public Element visitNode(DartNode node) {
|
| + @Override
|
| + public Element visitNode(DartNode node) {
|
| throw new RuntimeException("Unexpected node " + node);
|
| }
|
| });
|
|
|