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

