Kapt: Fix erasure() for immediate class types (KT-13748)

(cherry picked from commit 5fe01f6)
This commit is contained in:
Yan Zhulanow
2016-09-06 16:48:37 +03:00
parent ef375e66cd
commit fbf44aa9be
9 changed files with 156 additions and 56 deletions
@@ -167,25 +167,47 @@ class ProcessorTests : AbstractProcessorTest() {
}
fun testErasure2() = test("Erasure2", "*") { set, roundEnv, env ->
val test = env.findClass("Test")
val erasure = fun (t: JeMethodExecutableTypeMirror) = env.typeUtils.erasure(t)
fun check(methodName: String, toString: String, transform: (JeMethodExecutableTypeMirror) -> TypeMirror = { it }) {
val method = test.enclosedElements.first { it is JeMethodExecutableElement && it.simpleName.toString() == methodName }
fun JeTypeElement.check(methodName: String, toString: String, transform: (JeMethodExecutableTypeMirror) -> TypeMirror = { it }) {
val method = enclosedElements.first { it is JeMethodExecutableElement && it.simpleName.toString() == methodName }
assertEquals(toString, transform((method as JeMethodExecutableElement).asType()).toString())
}
with (env.findClass("Test")) {
val classType = asType() as DeclaredType
assertEquals(1, classType.typeArguments.size)
assertEquals("Test<T>", classType.toString())
val erasedType = env.typeUtils.erasure(asType()) as DeclaredType
assertEquals(0, erasedType.typeArguments.size)
assertEquals("Test", erasedType.toString())
check("a", "()java.lang.String")
check("b", "(java.lang.String,java.lang.CharSequence)void")
check("c", "()int")
check("d", "()T")
check("e", "<D>(D)D")
check("e", "(java.lang.Object)java.lang.Object", erasure)
check("f", "(java.util.List<? extends java.util.Map<java.lang.String,java.lang.Integer>>,int)void")
check("f", "(java.util.List,int)void", erasure)
check("g", "<D>(D)void")
check("g", "(java.lang.String)void", erasure)
check("h", "()java.util.List<java.lang.String>[]")
check("h", "()java.util.List[]", erasure)
check("i", "<T>()T")
check("i", "()java.lang.CharSequence", erasure)
}
check("a", "()java.lang.String")
check("b", "(java.lang.String,java.lang.CharSequence)void")
check("c", "()int")
check("d", "()T")
check("e", "<D>(D)D")
check("e", "(java.lang.Object)java.lang.Object", erasure)
check("f", "(java.util.List<? extends java.util.Map<java.lang.String,java.lang.Integer>>,int)void")
check("f", "(java.util.List,int)void", erasure)
check("g", "<D>(D)void")
check("g", "(java.lang.String)void", erasure)
with (env.findClass("Test2")) {
assertEquals("Test2<A,B>", asType().toString())
assertEquals("Test2", env.typeUtils.erasure(asType()).toString())
check("a", "(A)void")
check("a", "(java.util.List)void", erasure)
check("b", "()B")
check("b", "()java.util.List", erasure)
}
}
fun testIncrementalDataSimple() = incrementalDataTest(