1
1
/*
2
- * Copyright 2002-2018 the original author or authors.
2
+ * Copyright 2002-2019 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
22
22
import java .lang .annotation .Target ;
23
23
import java .lang .reflect .Constructor ;
24
24
import java .lang .reflect .Method ;
25
+ import java .util .ArrayList ;
25
26
import java .util .concurrent .Callable ;
26
27
27
28
import org .junit .Before ;
@@ -148,6 +149,44 @@ public void genericConstructorParameterInInnerClass() throws Exception {
148
149
methodParameter .getGenericParameterType ());
149
150
}
150
151
152
+ @ Test
153
+ public void multipleResolveParameterTypeCalls () throws Exception {
154
+ Method method = ArrayList .class .getMethod ("get" , int .class );
155
+ MethodParameter methodParameter = MethodParameter .forExecutable (method , -1 );
156
+ assertEquals (Object .class , methodParameter .getParameterType ());
157
+ GenericTypeResolver .resolveParameterType (methodParameter , StringList .class );
158
+ assertEquals (String .class , methodParameter .getParameterType ());
159
+ GenericTypeResolver .resolveParameterType (methodParameter , IntegerList .class );
160
+ assertEquals (Integer .class , methodParameter .getParameterType ());
161
+ }
162
+
163
+ @ Test
164
+ public void equalsAndHashCodeConsidersContainingClass () throws Exception {
165
+ Method method = ArrayList .class .getMethod ("get" , int .class );
166
+ MethodParameter m1 = MethodParameter .forExecutable (method , -1 );
167
+ MethodParameter m2 = MethodParameter .forExecutable (method , -1 );
168
+ MethodParameter m3 = MethodParameter .forExecutable (method , -1 ).nested ();
169
+ assertEquals (m1 , m2 );
170
+ assertNotEquals (m1 , m3 );
171
+ assertEquals (m1 .hashCode (), m2 .hashCode ());
172
+ }
173
+
174
+ @ Test
175
+ public void equalsAndHashCodeConsidersNesting () throws Exception {
176
+ Method method = ArrayList .class .getMethod ("get" , int .class );
177
+ MethodParameter m1 = MethodParameter .forExecutable (method , -1 );
178
+ GenericTypeResolver .resolveParameterType (m1 , StringList .class );
179
+ MethodParameter m2 = MethodParameter .forExecutable (method , -1 );
180
+ GenericTypeResolver .resolveParameterType (m2 , StringList .class );
181
+ MethodParameter m3 = MethodParameter .forExecutable (method , -1 );
182
+ GenericTypeResolver .resolveParameterType (m3 , IntegerList .class );
183
+ MethodParameter m4 = MethodParameter .forExecutable (method , -1 );
184
+ assertEquals (m1 , m2 );
185
+ assertNotEquals (m1 , m3 );
186
+ assertNotEquals (m1 , m4 );
187
+ assertEquals (m1 .hashCode (), m2 .hashCode ());
188
+ }
189
+
151
190
152
191
public int method (String p1 , long p2 ) {
153
192
return 42 ;
@@ -172,4 +211,12 @@ public InnerClass(@Param String s, Callable<Integer> i) {
172
211
private @interface Param {
173
212
}
174
213
214
+ @ SuppressWarnings ("serial" )
215
+ private static class StringList extends ArrayList <String > {
216
+ }
217
+
218
+ @ SuppressWarnings ("serial" )
219
+ private static class IntegerList extends ArrayList <Integer > {
220
+ }
221
+
175
222
}
0 commit comments