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

Unified Diff: compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java

Issue 10666020: Issue 2478. Support for 'factory lib.Interface.namedConstructor()' (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 6 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: 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);
}
});

Powered by Google App Engine
This is Rietveld 408576698