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 ;
@@ -130,6 +131,44 @@ public void genericConstructorParameterInInnerClass() throws Exception {
130
131
methodParameter .getGenericParameterType ());
131
132
}
132
133
134
+ @ Test
135
+ public void multipleResolveParameterTypeCalls () throws Exception {
136
+ Method method = ArrayList .class .getMethod ("get" , int .class );
137
+ MethodParameter methodParameter = MethodParameter .forMethodOrConstructor (method , -1 );
138
+ assertEquals (Object .class , methodParameter .getParameterType ());
139
+ GenericTypeResolver .resolveParameterType (methodParameter , StringList .class );
140
+ assertEquals (String .class , methodParameter .getParameterType ());
141
+ GenericTypeResolver .resolveParameterType (methodParameter , IntegerList .class );
142
+ assertEquals (Integer .class , methodParameter .getParameterType ());
143
+ }
144
+
145
+ @ Test
146
+ public void equalsAndHashCodeConsidersContainingClass () throws Exception {
147
+ Method method = ArrayList .class .getMethod ("get" , int .class );
148
+ MethodParameter m1 = MethodParameter .forMethodOrConstructor (method , -1 );
149
+ MethodParameter m2 = MethodParameter .forMethodOrConstructor (method , -1 );
150
+ MethodParameter m3 = MethodParameter .forMethodOrConstructor (method , -1 ).nested ();
151
+ assertEquals (m1 , m2 );
152
+ assertNotEquals (m1 , m3 );
153
+ assertEquals (m1 .hashCode (), m2 .hashCode ());
154
+ }
155
+
156
+ @ Test
157
+ public void equalsAndHashCodeConsidersNesting () throws Exception {
158
+ Method method = ArrayList .class .getMethod ("get" , int .class );
159
+ MethodParameter m1 = MethodParameter .forMethodOrConstructor (method , -1 );
160
+ GenericTypeResolver .resolveParameterType (m1 , StringList .class );
161
+ MethodParameter m2 = MethodParameter .forMethodOrConstructor (method , -1 );
162
+ GenericTypeResolver .resolveParameterType (m2 , StringList .class );
163
+ MethodParameter m3 = MethodParameter .forMethodOrConstructor (method , -1 );
164
+ GenericTypeResolver .resolveParameterType (m3 , IntegerList .class );
165
+ MethodParameter m4 = MethodParameter .forMethodOrConstructor (method , -1 );
166
+ assertEquals (m1 , m2 );
167
+ assertNotEquals (m1 , m3 );
168
+ assertNotEquals (m1 , m4 );
169
+ assertEquals (m1 .hashCode (), m2 .hashCode ());
170
+ }
171
+
133
172
134
173
public int method (String p1 , long p2 ) {
135
174
return 42 ;
@@ -154,4 +193,12 @@ public InnerClass(@Param String s, Callable<Integer> i) {
154
193
private @interface Param {
155
194
}
156
195
196
+ @ SuppressWarnings ("serial" )
197
+ private static class StringList extends ArrayList <String > {
198
+ }
199
+
200
+ @ SuppressWarnings ("serial" )
201
+ private static class IntegerList extends ArrayList <Integer > {
202
+ }
203
+
157
204
}
0 commit comments