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

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

Issue 8948001: Updates dartc to recognize 'default' keyword on interface and updated factory method syntax (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Got rid of some problems. Created 9 years 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 3d08526b444d084d124cc4611857a8151a040da0..34e8e90afa2df98766a7d0966c5522625d4b564a 100644
--- a/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
+++ b/compiler/java/com/google/dart/compiler/resolver/MemberBuilder.java
@@ -20,7 +20,6 @@ import com.google.dart.compiler.ast.DartNodeTraverser;
import com.google.dart.compiler.ast.DartParameter;
import com.google.dart.compiler.ast.DartParameterizedNode;
import com.google.dart.compiler.ast.DartPropertyAccess;
-import com.google.dart.compiler.ast.DartTypeParameter;
import com.google.dart.compiler.ast.DartUnit;
import com.google.dart.compiler.ast.Modifiers;
import com.google.dart.compiler.type.Type;
@@ -61,6 +60,7 @@ public class MemberBuilder {
EnclosingElement currentHolder;
private ResolutionContext context;
private boolean isStatic;
+ private boolean isFactory;
MemberElementBuilder(CoreTypeProvider typeProvider) {
super(typeProvider);
@@ -77,6 +77,11 @@ public class MemberBuilder {
boolean isStaticContext() {
return isStatic;
}
+
+ @Override
+ boolean isFactoryContext() {
+ return isFactory;
+ }
@Override
public Element visitClass(DartClass node) {
@@ -90,6 +95,7 @@ public class MemberBuilder {
@Override
public Element visitFunctionTypeAlias(DartFunctionTypeAlias node) {
isStatic = false;
+ isFactory = false;
assert !ElementKind.of(currentHolder).equals(ElementKind.CLASS) : "nested class?";
FunctionAliasElement element = node.getSymbol();
currentHolder = element;
@@ -99,10 +105,10 @@ public class MemberBuilder {
for (DartParameter parameter : node.getParameters()) {
parameters.add((VariableElement) parameter.accept(this));
}
- Type returnType = resolveType(node.getReturnTypeNode(), false, TypeErrorCode.NO_SUCH_TYPE);
+ Type returnType = resolveType(node.getReturnTypeNode(), false, false, TypeErrorCode.NO_SUCH_TYPE);
ClassElement functionElement = getTypeProvider().getFunctionType().getElement();
element.setFunctionType(Types.makeFunctionType(getContext(), functionElement,
- parameters, returnType, null));
+ parameters, returnType));
currentHolder = libraryElement;
context = topLevelContext;
return null;
@@ -110,7 +116,8 @@ public class MemberBuilder {
@Override
public Element visitMethodDefinition(final DartMethodDefinition method) {
- isStatic = method.getModifiers().isStatic() || method.getModifiers().isFactory();
+ isFactory = method.getModifiers().isFactory();
+ isStatic = method.getModifiers().isStatic() || isFactory;
MethodElement element = method.getSymbol();
if (element == null) {
switch (getMethodKind(method)) {
@@ -137,9 +144,7 @@ public class MemberBuilder {
recordElement(method, element);
ResolutionContext previous = context;
context = context.extend(element.getName());
- List<DartTypeParameter> parameterNodes = method.getTypeParameters();
- resolveFunction(method.getFunction(), element,
- Elements.makeTypeVariables(parameterNodes, element));
+ resolveFunction(method.getFunction(), element);
context = previous;
}
return null;
@@ -148,12 +153,13 @@ public class MemberBuilder {
@Override
public Element visitFieldDefinition(DartFieldDefinition node) {
isStatic = false;
+ isFactory = false;
for (DartField fieldNode : node.getFields()) {
if (fieldNode.getModifiers().isStatic()) {
isStatic = true;
}
}
- Type type = resolveType(node.getTypeNode(), isStatic, TypeErrorCode.NO_SUCH_TYPE);
+ Type type = resolveType(node.getTypeNode(), isStatic, false, TypeErrorCode.NO_SUCH_TYPE);
for (DartField fieldNode : node.getFields()) {
if (fieldNode.getModifiers().isAbstractField()) {
buildAbstractField(fieldNode);
@@ -175,9 +181,8 @@ public class MemberBuilder {
context = topLevelContext;
}
- private MethodElement buildConstructor(final DartMethodDefinition method) {
- // Resolve the constructor's name and class name.
- Element e = method.getName().accept(new DartNodeTraverser<Element>() {
+ private Element resolveConstructorName(final DartMethodDefinition method) {
+ return method.getName().accept(new DartNodeTraverser<Element>() {
@Override public Element visitPropertyAccess(DartPropertyAccess node) {
Element element = node.getQualifier().accept(this);
if (ElementKind.of(element).equals(ElementKind.CLASS)) {
@@ -194,6 +199,7 @@ public class MemberBuilder {
node,
null,
true,
+ false,
ResolverErrorCode.NO_SUCH_TYPE_CONSTRUCTOR).getElement();
}
@Override public Element visitParameterizedNode(DartParameterizedNode node) {
@@ -209,6 +215,11 @@ public class MemberBuilder {
throw new RuntimeException("Unexpected node " + node);
}
});
+ }
+
+ private MethodElement buildConstructor(final DartMethodDefinition method) {
+ // Resolve the constructor's name and class name.
+ Element e = resolveConstructorName(method);
switch (ElementKind.of(e)) {
default:
@@ -302,7 +313,7 @@ public class MemberBuilder {
DartMethodDefinition accessorNode = fieldNode.getAccessor();
MethodElement accessorElement = Elements.methodFromMethodNode(accessorNode, currentHolder);
recordElement(accessorNode, accessorElement);
- resolveFunction(accessorNode.getFunction(), accessorElement, null);
+ resolveFunction(accessorNode.getFunction(), accessorElement);
String name = fieldNode.getName().getTargetName();
Element element = null;
@@ -383,6 +394,9 @@ public class MemberBuilder {
}
DartExpression name = method.getName();
+ if (name instanceof DartParameterizedNode) {
+ return ElementKind.CONSTRUCTOR;
+ }
if (name instanceof DartIdentifier) {
if (((DartIdentifier) name).getTargetName().equals(currentHolder.getName())) {
return ElementKind.CONSTRUCTOR;
@@ -398,6 +412,13 @@ public class MemberBuilder {
}
resolutionError(method.getName(),
ResolverErrorCode.CANNOT_DECLARE_NON_FACTORY_CONSTRUCTOR);
+ } else if (property.getQualifier() instanceof DartParameterizedNode) {
+ DartParameterizedNode paramNode = (DartParameterizedNode)property.getQualifier();
+ if (paramNode.getExpression() instanceof DartIdentifier) {
+ return ElementKind.CONSTRUCTOR;
+ }
+ resolutionError(method.getName(),
+ ResolverErrorCode.TOO_MANY_QUALIFIERS_FOR_METHOD);
} else {
// Multiple qualifiers (Foo.bar.baz)
resolutionError(method.getName(),

Powered by Google App Engine
This is Rietveld 408576698