Skip to content

Commit 0107925

Browse files
authored
Merge pull request #686 from graphql-java-kickstart/bugfix-676
Reimplement ParameterizedType
2 parents 27273c2 + 43488ce commit 0107925

File tree

4 files changed

+54
-209
lines changed

4 files changed

+54
-209
lines changed

src/main/kotlin/graphql/kickstart/tools/GenericType.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,14 @@ internal open class GenericType(protected val mostSpecificType: JavaType, protec
141141
return when (type) {
142142
is ParameterizedType -> {
143143
val actualTypeArguments = type.actualTypeArguments.map { replaceTypeVariable(it) }.toTypedArray()
144-
ParameterizedTypeImpl.make(type.rawType as Class<*>?, actualTypeArguments, type.ownerType)
144+
ParameterizedTypeImpl(type.rawType as Class<*>, actualTypeArguments, type.ownerType)
145145
}
146146
is ResolvedType -> {
147147
if (type.typeParameters.isEmpty()) {
148148
type.erasedType
149149
} else {
150150
val actualTypeArguments = type.typeParameters.map { replaceTypeVariable(it) }.toTypedArray()
151-
ParameterizedTypeImpl.make(type.erasedType, actualTypeArguments, null)
151+
ParameterizedTypeImpl(type.erasedType, actualTypeArguments, null)
152152
}
153153
}
154154
is TypeVariable<*> -> {

src/main/kotlin/graphql/kickstart/tools/SchemaParserOptions.kt

+3-6
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,9 @@ data class SchemaParserOptions internal constructor(
250250
index: Int,
251251
transformer: (T) -> Any?
252252
): GenericWrapper where T : Any {
253-
return withTransformer(
254-
type,
255-
index,
256-
transformer,
257-
{ innerType -> ParameterizedTypeImpl.make(List::class.java, arrayOf(innerType), null) }
258-
)
253+
return withTransformer(type, index, transformer) { innerType ->
254+
ParameterizedTypeImpl(List::class.java, arrayOf(innerType), null)
255+
}
259256
}
260257

261258
fun <T> listCollectionWithTransformer(

src/main/kotlin/graphql/kickstart/tools/util/ParameterizedTypeImpl.java

-201
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package graphql.kickstart.tools.util
2+
3+
import java.lang.reflect.ParameterizedType
4+
import java.lang.reflect.Type
5+
6+
class ParameterizedTypeImpl(
7+
private val rawType: Class<*>,
8+
private val actualTypeArguments: Array<Type>,
9+
private val ownerType: Type?
10+
) : ParameterizedType {
11+
override fun getActualTypeArguments(): Array<Type> = actualTypeArguments.clone()
12+
13+
override fun getRawType(): Type = rawType
14+
15+
override fun getOwnerType(): Type? = ownerType
16+
17+
override fun equals(other: Any?): Boolean {
18+
if (this === other) return true
19+
if (javaClass != other?.javaClass) return false
20+
21+
other as ParameterizedTypeImpl
22+
23+
if (rawType != other.rawType) return false
24+
if (ownerType != other.ownerType) return false
25+
if (!actualTypeArguments.contentEquals(other.actualTypeArguments)) return false
26+
27+
return true
28+
}
29+
30+
override fun hashCode(): Int {
31+
var result = rawType.hashCode()
32+
result = 31 * result + (ownerType?.hashCode() ?: 0)
33+
result = 31 * result + actualTypeArguments.contentHashCode()
34+
return result
35+
}
36+
37+
override fun toString(): String = buildString {
38+
if (ownerType != null) {
39+
append(ownerType.typeName)
40+
append("$")
41+
append(rawType.simpleName)
42+
} else {
43+
append(rawType.name)
44+
}
45+
if (actualTypeArguments.isNotEmpty()) {
46+
actualTypeArguments.joinTo(this, ",", "<", ">", transform = Type::getTypeName)
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)