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..fbe11647d7689647771df3d2e56acc282ac9c0c0 100644 |
--- a/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java |
+++ b/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java |
@@ -4,6 +4,9 @@ |
package com.google.dart.compiler.resolver; |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
import com.google.dart.compiler.ErrorCode; |
import com.google.dart.compiler.ast.DartCatchBlock; |
import com.google.dart.compiler.ast.DartFunction; |
@@ -19,9 +22,6 @@ import com.google.dart.compiler.type.Type; |
import com.google.dart.compiler.type.TypeVariable; |
import com.google.dart.compiler.type.Types; |
-import java.util.ArrayList; |
-import java.util.List; |
- |
/** |
* Shared visitor between Resolver and MemberBuilder. |
*/ |
@@ -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; |
} |
@@ -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(); |
@@ -105,6 +103,8 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
} |
abstract boolean isStaticContext(); |
+ |
+ abstract boolean isFactoryContext(); |
@Override |
public Element visitParameter(DartParameter node) { |
@@ -112,7 +112,7 @@ abstract class ResolveVisitor extends DartNodeTraverser<Element> { |
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,18 @@ 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(); |
} |