private static Type[] parseTypes(String sig, List<String> genericTypeNames, Type target) throws ClassNotFoundException { List<Type> types = new ArrayList<Type>(); int genericLevel = 0; int currentStart = 0; for(int i = 0; i < sig.length(); i++) { char c = sig.charAt(i); switch(c) { case '<': genericLevel ++; break; case '>': genericLevel --; break; case ';' : if (genericLevel == 0) { types.add(toGenericType(sig.substring(currentStart, i), genericTypeNames, target)); currentStart = i + 1; } break; } } return types.toArray(EMPTY_TYPE_ARRAY); }
private static Type[] parseTypes(String sig, List<String> genericTypeNames, Type target) throws ClassNotFoundException { List<Type> types = new ArrayList<Type>(); int genericLevel = 0; int currentStart = 0; for(int i = 0; i < sig.length(); i++) { char c = sig.charAt(i); switch(c) { case '<': genericLevel ++; break; case '>': genericLevel --; break; case ';' : if (genericLevel == 0) { types.add(toGenericType(sig.substring(currentStart, i), genericTypeNames, target)); currentStart = i + 1; } break; } } return types.toArray(EMPTY_TYPE_ARRAY); }
Type componentType = toGenericType(sig.substring(1), genericTypeNames, target); Class<?> componentClass = TypeHelper.toClass(componentType); return Array.newInstance(componentClass, 0).getClass();
Type componentType = toGenericType(sig.substring(1), genericTypeNames, target); Class<?> componentClass = TypeHelper.toClass(componentType); return Array.newInstance(componentClass, 0).getClass();
@Test public void testToClass() throws Exception { assertEquals(int.class, AsmUtils.toGenericType("I", null, null)); assertEquals(String.class, AsmUtils.toGenericType("java/lang/String", null, null)); assertEquals(String.class, AsmUtils.toGenericType("Ljava/lang/String;", null, null)); }
if (descTypes.size() > 0) { try { final Type genericType = AsmUtils.toGenericType(descTypes.get(descTypes.size() - 1), genericTypeNames, target); if (!targetClass.isAssignableFrom(TypeHelper.toClass(genericType))) { return null;
if (descTypes.size() > 0) { try { final Type genericType = AsmUtils.toGenericType(descTypes.get(descTypes.size() - 1), genericTypeNames, target); if (!targetClass.isAssignableFrom(TypeHelper.toClass(genericType))) { return null;
@Test public void testToGenericTypeArray() throws ClassNotFoundException { assertEquals(String[].class, AsmUtils.toGenericType("[Ljava/lang/String;", Collections.<String>emptyList(), Object.class)); }
@Test public void testToClassFromGeneric() throws Exception { assertEquals(String.class, AsmUtils.toGenericType("TT1;", Arrays.asList("T0", "T1"), new ParameterizedType() { @Override public Type[] getActualTypeArguments() { return new Type[]{Long.class, String.class}; } @Override public Type getRawType() { return null; } @Override public Type getOwnerType() { return null; } })); }
@Test public void testToGenericType() throws ClassNotFoundException { ParameterizedType pt = (ParameterizedType) AsmUtils.toGenericType("java/util/List<Ljava/util/List<Ljava/lang/String;>;>", null, null); ParameterizedType pt2 = (ParameterizedType) pt.getActualTypeArguments()[0]; assertEquals(List.class, pt.getRawType()); assertEquals(List.class, pt2.getRawType()); assertEquals(String.class, pt2.getActualTypeArguments()[0]); assertEquals(pt, pt); assertEquals(pt.hashCode(), pt.hashCode()); assertNotEquals(pt, pt2); assertEquals("ParameterizedTypeImpl{rawType=interface java.util.List, types=[ParameterizedTypeImpl{rawType=interface java.util.List, types=[class java.lang.String]}]}", pt.toString()); }
@Test public void testToGenericTypeTuples() throws ClassNotFoundException { ParameterizedType pt = (ParameterizedType) AsmUtils.toGenericType("Lorg/simpleflatmapper/tuple/Tuple2<TT1;TT2;>;", Arrays.asList("T1", "T2"), new ParameterizedType() { @Override public Type[] getActualTypeArguments() { return new Type[] { String.class, Long.class}; } @Override public Type getRawType() { return Tuple2.class; } @Override public Type getOwnerType() { return null; } }); assertEquals(String.class, TypeHelper.toClass(pt.getActualTypeArguments()[0])); assertEquals(Long.class, TypeHelper.toClass(pt.getActualTypeArguments()[1])); }