This is an automated email from the git hooks/post-receive script.

faux-guest pushed a commit to branch master
in repository libjtype-java.

commit b8ead9eb0cb1210bc7069149a9fc5ebfd4be0a5c
Author: Chris West (Faux) <[email protected]>
Date:   Wed Jun 3 21:06:15 2015 +0100

    Fix #751526: Use guava's solution for Java 8 support
    
    Patch submitted to upstream as their issue 1:
    https://github.com/markhobson/jtype/issues/1
    
    https://bugs.debian.org/751526
    
    Conflicts:
        src/main/java/com/googlecode/jtype/Types.java
---
 .../com/googlecode/jtype/DefaultTypeVariable.java  | 13 +-----
 src/main/java/com/googlecode/jtype/Types.java      | 46 +++++++++++++++++++++-
 .../googlecode/jtype/DefaultTypeVariableTest.java  | 40 +++++++++----------
 3 files changed, 67 insertions(+), 32 deletions(-)

diff --git a/src/main/java/com/googlecode/jtype/DefaultTypeVariable.java 
b/src/main/java/com/googlecode/jtype/DefaultTypeVariable.java
index 1f31bf2..3a300d2 100644
--- a/src/main/java/com/googlecode/jtype/DefaultTypeVariable.java
+++ b/src/main/java/com/googlecode/jtype/DefaultTypeVariable.java
@@ -34,7 +34,7 @@ import java.util.Arrays;
  *            the type of generic declaration that declared the type variable
  * @see TypeVariable
  */
-class DefaultTypeVariable<D extends GenericDeclaration> implements 
TypeVariable<D>, Serializable
+class DefaultTypeVariable<D extends GenericDeclaration> implements Type, 
Serializable
 {
        // constants 
--------------------------------------------------------------
        
@@ -154,16 +154,7 @@ class DefaultTypeVariable<D extends GenericDeclaration> 
implements TypeVariable<
                        && name.equals(typeVariable.getName())
                        && Arrays.equals(bounds, typeVariable.getBounds());
        }
-       
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public String toString()
-       {
-               return TypeUtils.toString(this);
-       }
-       
+
        // private methods 
--------------------------------------------------------
        
        private static boolean isValidFirstBound(Type bound)
diff --git a/src/main/java/com/googlecode/jtype/Types.java 
b/src/main/java/com/googlecode/jtype/Types.java
index 2c718cc..00d5a87 100644
--- a/src/main/java/com/googlecode/jtype/Types.java
+++ b/src/main/java/com/googlecode/jtype/Types.java
@@ -17,10 +17,15 @@ package com.googlecode.jtype;
 
 import static com.googlecode.jtype.Utils.checkNotNull;
 
+import java.io.Serializable;
 import java.lang.reflect.GenericArrayType;
 import java.lang.reflect.GenericDeclaration;
 import java.lang.reflect.MalformedParameterizedTypeException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.lang.reflect.WildcardType;
@@ -76,7 +81,10 @@ public final class Types
        public static <D extends GenericDeclaration> TypeVariable<D> 
typeVariable(D declaration, String name,
                Type... bounds)
        {
-               return new DefaultTypeVariable<D>(declaration, name, bounds);
+               return (TypeVariable<D>) Proxy.newProxyInstance(
+                               Types.class.getClassLoader(),
+                               new Class[]{TypeVariable.class},
+                               new TypeVariableInvocationHandler(new 
DefaultTypeVariable<D>(declaration, name, bounds)));
        }
        
        /**
@@ -347,4 +355,40 @@ public final class Types
                
                return wildcardType(upperBounds, lowerBounds);
        }
+
+       private static class TypeVariableInvocationHandler implements 
InvocationHandler, Serializable {
+               private static final Map<String, Method> typeVariableMethods = 
new HashMap<String, Method>();
+               static {
+                       for (Method method : 
DefaultTypeVariable.class.getMethods()) {
+                               if 
(method.getDeclaringClass().equals(DefaultTypeVariable.class)) {
+                                       
typeVariableMethods.put(method.getName(), method);
+                               }
+                       }
+               }
+
+               private final DefaultTypeVariable<?> typeVariable;
+
+               public TypeVariableInvocationHandler(DefaultTypeVariable<?> 
typeVariable) {
+                       this.typeVariable = typeVariable;
+               }
+
+               public Object invoke(Object proxy, Method method, Object[] 
args) throws Throwable {
+                       String methodName = method.getName();
+
+                       if ("toString".equals(methodName)) {
+                               return TypeUtils.toString((Type) proxy);
+                       }
+
+                       Method typeVariableMethod = 
typeVariableMethods.get(methodName);
+                       if (typeVariableMethod == null) {
+                               throw new 
UnsupportedOperationException(methodName);
+                       } else {
+                               try {
+                                       return 
typeVariableMethod.invoke(typeVariable, args);
+                               } catch (InvocationTargetException e) {
+                                       throw e.getCause();
+                               }
+                       }
+               }
+       }
 }
diff --git a/src/test/java/com/googlecode/jtype/DefaultTypeVariableTest.java 
b/src/test/java/com/googlecode/jtype/DefaultTypeVariableTest.java
index 253ba2f..566c208 100644
--- a/src/test/java/com/googlecode/jtype/DefaultTypeVariableTest.java
+++ b/src/test/java/com/googlecode/jtype/DefaultTypeVariableTest.java
@@ -61,7 +61,7 @@ public class DefaultTypeVariableTest
        {
                try
                {
-                       new DefaultTypeVariable<Constructor<?>>(null, "T", new 
Type[] {Number.class});
+                       Types.<Constructor<?>>typeVariable(null, "T", new 
Type[] {Number.class});
                }
                catch (NullPointerException exception)
                {
@@ -76,7 +76,7 @@ public class DefaultTypeVariableTest
        {
                try
                {
-                       new DefaultTypeVariable<Constructor<?>>(constructor, 
null, new Type[] {Number.class});
+                       Types.<Constructor<?>>typeVariable(constructor, null, 
new Type[] {Number.class});
                }
                catch (NullPointerException exception)
                {
@@ -173,7 +173,7 @@ public class DefaultTypeVariableTest
        @Test
        public void constructorWithNullBounds()
        {
-               TypeVariable<Constructor<?>> typeVariable = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T", null);
+               TypeVariable<Constructor<?>> typeVariable = 
Types.<Constructor<?>>typeVariable(constructor, "T", null);
                
                assertEquals(constructor, typeVariable.getGenericDeclaration());
                assertEquals("T", typeVariable.getName());
@@ -183,7 +183,7 @@ public class DefaultTypeVariableTest
        @Test
        public void constructorWithEmptyBounds()
        {
-               TypeVariable<Constructor<?>> typeVariable = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[0]);
                
                assertEquals(constructor, typeVariable.getGenericDeclaration());
@@ -194,10 +194,10 @@ public class DefaultTypeVariableTest
        @Test
        public void hashCodeTest()
        {
-               TypeVariable<Constructor<?>> typeVariable1 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable1 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class, Comparable.class});
                
-               TypeVariable<Constructor<?>> typeVariable2 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable2 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class, Comparable.class});
                
                assertEquals(typeVariable1.hashCode(), 
typeVariable2.hashCode());
@@ -206,10 +206,10 @@ public class DefaultTypeVariableTest
        @Test
        public void equalsWhenEqual()
        {
-               TypeVariable<Constructor<?>> typeVariable1 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable1 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class, Comparable.class});
                
-               TypeVariable<Constructor<?>> typeVariable2 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable2 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class, Comparable.class});
                
                assertEquals(typeVariable1, typeVariable2);
@@ -218,7 +218,7 @@ public class DefaultTypeVariableTest
        @Test
        public void equalsWithDifferentClass()
        {
-               TypeVariable<Constructor<?>> typeVariable = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T", null);
+               TypeVariable<Constructor<?>> typeVariable = 
Types.<Constructor<?>>typeVariable(constructor, "T", null);
                
                assertFalse(typeVariable.equals(new Object()));
        }
@@ -226,12 +226,12 @@ public class DefaultTypeVariableTest
        @Test
        public void equalsWithDifferentDeclarations() throws 
NoSuchMethodException
        {
-               TypeVariable<Constructor<?>> typeVariable1 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable1 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class});
                
                Method method = 
getClass().getDeclaredMethod("equalsWithDifferentDeclarations");
                
-               TypeVariable<Method> typeVariable2 = new 
DefaultTypeVariable<Method>(method, "T", new Type[] {Number.class});
+               TypeVariable<Method> typeVariable2 = 
Types.<Method>typeVariable(method, "T", new Type[] {Number.class});
                
                assertFalse(typeVariable1.equals(typeVariable2));
        }
@@ -239,10 +239,10 @@ public class DefaultTypeVariableTest
        @Test
        public void equalsWithDifferentNames()
        {
-               TypeVariable<Constructor<?>> typeVariable1 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable1 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class});
                
-               TypeVariable<Constructor<?>> typeVariable2 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "U",
+               TypeVariable<Constructor<?>> typeVariable2 = 
Types.<Constructor<?>>typeVariable(constructor, "U",
                        new Type[] {Number.class});
                
                assertFalse(typeVariable1.equals(typeVariable2));
@@ -251,10 +251,10 @@ public class DefaultTypeVariableTest
        @Test
        public void equalsWithDifferentBounds()
        {
-               TypeVariable<Constructor<?>> typeVariable1 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable1 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class});
                
-               TypeVariable<Constructor<?>> typeVariable2 = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable2 = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Integer.class});
                
                assertFalse(typeVariable1.equals(typeVariable2));
@@ -263,7 +263,7 @@ public class DefaultTypeVariableTest
        @Test
        public void toStringWithNoBounds()
        {
-               TypeVariable<Constructor<?>> typeVariable = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T", null);
+               TypeVariable<Constructor<?>> typeVariable = 
Types.<Constructor<?>>typeVariable(constructor, "T", null);
                
                assertEquals("T", typeVariable.toString());
        }
@@ -271,7 +271,7 @@ public class DefaultTypeVariableTest
        @Test
        public void toStringWithSingleBound()
        {
-               TypeVariable<Constructor<?>> typeVariable = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class});
                
                assertEquals("T extends java.lang.Number", 
typeVariable.toString());
@@ -280,7 +280,7 @@ public class DefaultTypeVariableTest
        @Test
        public void toStringWithMultipleBounds()
        {
-               TypeVariable<Constructor<?>> typeVariable = new 
DefaultTypeVariable<Constructor<?>>(constructor, "T",
+               TypeVariable<Constructor<?>> typeVariable = 
Types.<Constructor<?>>typeVariable(constructor, "T",
                        new Type[] {Number.class, Comparable.class});
                
                assertEquals("T extends java.lang.Number & 
java.lang.Comparable", typeVariable.toString());
@@ -289,7 +289,7 @@ public class DefaultTypeVariableTest
        @Test
        public void serializable() throws IOException, ClassNotFoundException
        {
-               TypeVariable<Class<?>> type = new 
DefaultTypeVariable<Class<?>>(getClass(), "T",
+               TypeVariable<Class<?>> type = 
Types.<Class<?>>typeVariable(getClass(), "T",
                        new Type[] {Number.class, Comparable.class});
                
                assertSerializable(type);
@@ -299,7 +299,7 @@ public class DefaultTypeVariableTest
        
        private static <D extends GenericDeclaration> void assertConstructor(D 
declaration, String name, Type... bounds)
        {
-               TypeVariable<D> typeVariable = new 
DefaultTypeVariable<D>(declaration, name, bounds);
+               TypeVariable<D> typeVariable = 
Types.<D>typeVariable(declaration, name, bounds);
                
                assertEquals("Generic declaration", declaration, 
typeVariable.getGenericDeclaration());
                assertEquals("Name", name, typeVariable.getName());

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/libjtype-java.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to