Index: frog/member.dart |
diff --git a/frog/member.dart b/frog/member.dart |
index 688f64d1c15336236e51e506b93452250058f252..dee77b869d1c06788e86c7e4f98939cd706a4f9e 100644 |
--- a/frog/member.dart |
+++ b/frog/member.dart |
@@ -333,7 +333,7 @@ class FieldMember extends Member { |
} |
} |
type = resolveType(definition.type, false); |
- if (isStatic && type.hasTypeParams) { |
+ if (isStatic && !isFactory && type.hasTypeParams) { |
world.error('using type parameter in static context', |
definition.type.span); |
} |
@@ -391,9 +391,9 @@ class FieldMember extends Member { |
// TODO(jmesserly): this handles native fields that return types like |
// "List". Is there a better solution for fields? Unlike methods we have |
// no good way to annotate them. |
- var factory_ = returnType.genericType.factory_; |
- if (factory_ != null && factory_.isNative) { |
- factory_.markUsed(); |
+ var defaultType = returnType.genericType.defaultType; |
+ if (defaultType != null && defaultType.isNative) { |
+ defaultType.markUsed(); |
} |
} |
} |
@@ -675,11 +675,6 @@ class MethodMember extends Member { |
Type returnType; |
List<Parameter> parameters; |
- // Could support generic methods in general. Right now only used for |
- // strange corner case of factory methods for generic types. |
- List<ParameterType> typeParameters; |
- |
- |
Type _functionType; |
bool isStatic = false; |
bool isAbstract = false; |
@@ -1399,20 +1394,6 @@ class MethodMember extends Member { |
isStatic = true; |
} |
- if (definition.typeParameters != null) { |
- if (!isFactory) { |
- world.error( |
- 'Only factories are allowed to have explicit type parameters', |
- definition.typeParameters[0].span); |
- } else { |
- typeParameters = definition.typeParameters; |
- for (var tp in definition.typeParameters) { |
- tp.enclosingElement = this; |
- tp.resolve(); |
- } |
- } |
- } |
- |
// TODO(jimhug): need a better annotation for being an operator method |
if (isOperator && isStatic && !isCallMethod) { |
world.error('operator method may not be static "${name}"', span); |
@@ -1456,8 +1437,7 @@ class MethodMember extends Member { |
/** Overriden to ensure that type arguments aren't used in static methods. */ |
Type resolveType(TypeReference node, bool typeErrors) { |
Type t = super.resolveType(node, typeErrors); |
- if (isStatic && t is ParameterType && |
- (typeParameters == null || !typeParameters.some((p) => p === t))) { |
+ if (isStatic && !isFactory && t is ParameterType) { |
world.error('using type parameter in static context.', node.span); |
} |
return t; |