Skip to content

Commit fecf425

Browse files
authored
Merge pull request #34 from web-online/master
test and fix for issue #33: "ghost" type parameter in field
2 parents de71348 + ca608eb commit fecf425

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

Diff for: src/main/java/com/fasterxml/classmate/TypeResolver.java

+7
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,13 @@ private ResolvedType _constructType(ClassStack context, Class<?> rawType, TypeBi
410410
_resolveSuperInterfaces(context, rawType, typeBindings));
411411

412412
}
413+
// for issue 33: if the type has no type parameters,
414+
// don't include typeBindings in the ResolvedType
415+
if (rawType.getTypeParameters().length == 0) {
416+
return new ResolvedObjectType(rawType, null,
417+
_resolveSuperClass(context, rawType, typeBindings),
418+
_resolveSuperInterfaces(context, rawType, typeBindings));
419+
}
413420
return new ResolvedObjectType(rawType, typeBindings,
414421
_resolveSuperClass(context, rawType, typeBindings),
415422
_resolveSuperInterfaces(context, rawType, typeBindings));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.fasterxml.classmate.members;
2+
3+
import java.util.List;
4+
5+
import junit.framework.TestCase;
6+
7+
import com.fasterxml.classmate.*;
8+
9+
// for issue "ghost" type parameter in field:
10+
public class GhostTypeParameterInFieldTest
11+
extends TestCase
12+
{
13+
public static class A<T extends Number> {
14+
public List<T> listOfT;
15+
public T t;
16+
public Integer i;
17+
}
18+
19+
public void testGhostTypeParameterInField()
20+
{
21+
TypeResolver resolver = new TypeResolver();
22+
ResolvedType resolvedType = resolver.resolve(A.class, Integer.class);
23+
MemberResolver memberResolver = new MemberResolver(resolver);
24+
ResolvedTypeWithMembers resolvedTypeWithMembers = memberResolver.resolve(resolvedType, null, null);
25+
ResolvedField[] fields = resolvedTypeWithMembers.getMemberFields();
26+
27+
// test fields
28+
assertEquals(3, fields.length);
29+
30+
// field List<T> listOfT
31+
ResolvedField listOfT_Field = fields[0];
32+
assertEquals("listOfT", listOfT_Field.getName());
33+
ResolvedType listOfT_Type = listOfT_Field.getType();
34+
assertEquals(List.class, listOfT_Type.getErasedType());
35+
List<ResolvedType> listOfT_TypeParams = listOfT_Type.getTypeParameters();
36+
assertEquals("Expected 1 type paramter for listOfT, got " + listOfT_TypeParams.size() + ": " + listOfT_TypeParams, 1, listOfT_TypeParams.size());
37+
assertEquals(Integer.class, listOfT_TypeParams.get(0).getErasedType());
38+
39+
// field t
40+
ResolvedField t_Field = fields[1];
41+
assertEquals("t", t_Field.getName());
42+
ResolvedType t_Type = t_Field.getType();
43+
assertEquals(Integer.class, t_Type.getErasedType());
44+
List<ResolvedType> t_TypeParams = t_Type.getTypeParameters();
45+
assertEquals("Expected 0 type paramter for t, got " + t_TypeParams.size() + ": " + t_TypeParams, 0, t_TypeParams.size());
46+
47+
// field i
48+
ResolvedField i_Field = fields[2];
49+
assertEquals("i", i_Field.getName());
50+
ResolvedType i_Type = i_Field.getType();
51+
assertEquals(Integer.class, i_Type.getErasedType());
52+
List<ResolvedType> i_TypeParams = i_Type.getTypeParameters();
53+
assertEquals("Expected 0 type paramter for i, got " + i_TypeParams.size() + ": " + i_TypeParams, 0, i_TypeParams.size());
54+
}
55+
56+
}

0 commit comments

Comments
 (0)