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
-~----------~----~----~----~------~----~------~--~---

Reply via email to