Author: limpbizkit
Date: Fri Nov 14 01:06:10 2008
New Revision: 665
Modified:
trunk/src/com/google/inject/TypeLiteral.java
trunk/test/com/google/inject/TypeLiteralTypeResolutionTest.java
Log:
Wildcards now supported in TypeLiteral type resolution
Modified: trunk/src/com/google/inject/TypeLiteral.java
==============================================================================
--- trunk/src/com/google/inject/TypeLiteral.java (original)
+++ trunk/src/com/google/inject/TypeLiteral.java Fri Nov 14 01:06:10 2008
@@ -30,6 +30,7 @@
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
import java.util.List;
/**
@@ -202,6 +203,24 @@
return changed
? Types.newParameterizedTypeWithOwner(newOwnerType,
original.getRawType(), args)
: original;
+
+ } else if (toResolve instanceof WildcardType) {
+ WildcardType original = (WildcardType) toResolve;
+ Type[] originalLowerBound = original.getLowerBounds();
+ Type[] originalUpperBound = original.getUpperBounds();
+
+ if (originalLowerBound.length == 1) {
+ Type lowerBound = resolve(originalLowerBound[0]);
+ if (lowerBound != originalLowerBound[0]) {
+ return Types.supertypeOf(lowerBound);
+ }
+ } else if (originalUpperBound.length == 1) {
+ Type upperBound = resolve(originalUpperBound[0]);
+ if (upperBound != originalUpperBound[0]) {
+ return Types.subtypeOf(upperBound);
+ }
+ }
+ return original;
} else {
return toResolve;
Modified: trunk/test/com/google/inject/TypeLiteralTypeResolutionTest.java
==============================================================================
--- trunk/test/com/google/inject/TypeLiteralTypeResolutionTest.java
(original)
+++ trunk/test/com/google/inject/TypeLiteralTypeResolutionTest.java Fri Nov
14 01:06:10 2008
@@ -295,6 +295,23 @@
type.getSupertype(AbstractCollection.class));
}
+ public void testWildcards() throws NoSuchFieldException {
+ TypeLiteral<Parameterized<String>> ofString = new
TypeLiteral<Parameterized<String>>() {};
+
+ assertEquals(new TypeLiteral<List<String>>() {}.getType(),
+ ofString.getFieldType(Parameterized.class.getField("t")));
+ assertEquals(new TypeLiteral<List<? extends String>>() {}.getType(),
+ ofString.getFieldType(Parameterized.class.getField("extendsT")));
+ assertEquals(new TypeLiteral<List<? super String>>() {}.getType(),
+ ofString.getFieldType(Parameterized.class.getField("superT")));
+ }
+
+ static class Parameterized<T> {
+ public List<T> t;
+ public List<? extends T> extendsT;
+ public List<? super T> superT;
+ }
+
// TODO(jessewilson): tests for tricky bounded types like <T extends
Collection, Serializable>
// TODO(jessewilson): tests for wildcard types
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en
-~----------~----~----~----~------~----~------~--~---