Index: compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java |
diff --git a/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java b/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java |
index f3372c186c7aa82d78f68a6a41874d1b8ef37b14..76c9e0681845a3168ab1f304d3b52d235900c9a8 100644 |
--- a/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java |
+++ b/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java |
@@ -34,9 +34,7 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
abstract ResolutionContext getContext(); |
- final MethodElement resolveFunction(DartFunction node, MethodElement element, |
- List<TypeVariable> typeVariables) { |
- bindTypeVariables(typeVariables); |
+ final MethodElement resolveFunction(DartFunction node, MethodElement element) { |
for (DartParameter parameter : node.getParams()) { |
Elements.addParameter(element, (VariableElement) parameter.accept(this)); |
} |
@@ -44,11 +42,11 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
resolveType( |
node.getReturnTypeNode(), |
element.getModifiers().isStatic(), |
+ element.getModifiers().isFactory(), |
TypeErrorCode.NO_SUCH_TYPE); |
ClassElement functionElement = typeProvider.getFunctionType().getElement(); |
FunctionType type = Types.makeFunctionType(getContext(), functionElement, |
- element.getParameters(), returnType, |
- typeVariables); |
+ element.getParameters(), returnType); |
Elements.setType(element, type); |
return element; |
} |
@@ -60,7 +58,7 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
continue; |
} |
bindTypeVariable((TypeVariableElement) typeNode.getType().getElement()); |
- } |
+ } |
} |
final FunctionAliasElement resolveFunctionAlias(DartFunctionTypeAlias node) { |
@@ -85,7 +83,7 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
DartTypeNode boundNode = typeParameterNode.getBound(); |
Type bound; |
if (boundNode != null) { |
- bound = getContext().resolveType(boundNode, true, ResolverErrorCode.NO_SUCH_TYPE); |
+ bound = getContext().resolveType(boundNode, true, isFactoryContext(), ResolverErrorCode.NO_SUCH_TYPE); |
boundNode.setType(bound); |
} else { |
bound = typeProvider.getObjectType(); |
@@ -106,13 +104,15 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
abstract boolean isStaticContext(); |
+ abstract boolean isFactoryContext(); |
+ |
@Override |
public Element visitParameter(DartParameter node) { |
ErrorCode typeErrorCode = |
node.getParent() instanceof DartCatchBlock |
? ResolverErrorCode.NO_SUCH_TYPE |
: TypeErrorCode.NO_SUCH_TYPE; |
- Type type = resolveType(node.getTypeNode(), isStaticContext(), typeErrorCode); |
+ Type type = resolveType(node.getTypeNode(), isStaticContext(), isFactoryContext(), typeErrorCode); |
VariableElement element = Elements.parameterElement(node, node.getParameterName(), |
node.getModifiers()); |
List<DartParameter> functionParameters = node.getFunctionParameters(); |
@@ -123,22 +123,19 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
parameterElements.add((VariableElement) parameter.accept(this)); |
} |
ClassElement functionElement = typeProvider.getFunctionType().getElement(); |
- type = Types.makeFunctionType(getContext(), functionElement, parameterElements, type, null); |
- DartTypeNode typeNode = node.getTypeNode(); |
- if (typeNode != null) { |
- typeNode.setType(type); |
- } |
+ type = Types.makeFunctionType(getContext(), functionElement, parameterElements, type); |
} |
Elements.setType(element, type); |
return recordElement(node, element); |
} |
- final Type resolveType(DartTypeNode node, boolean isStatic, ErrorCode errorCode) { |
+ final Type resolveType(DartTypeNode node, boolean isStatic, boolean isFactory, |
+ ErrorCode errorCode) { |
if (node == null) { |
return getTypeProvider().getDynamicType(); |
} |
assert node.getType() == null || node.getType() instanceof DynamicType; |
- Type type = getContext().resolveType(node, isStatic, errorCode); |
+ Type type = getContext().resolveType(node, isStatic, isFactory, errorCode); |
if (type == null) { |
type = getTypeProvider().getDynamicType(); |
} |