Kapt: Fix erasure() for executable types (KT-13629)

(cherry picked from commit 461c29d)
This commit is contained in:
Yan Zhulanow
2016-08-29 21:13:17 +03:00
committed by Yan Zhulanow
parent 941d016cef
commit 9127788f4a
5 changed files with 64 additions and 3 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.annotation.processing.test.processor
import org.jetbrains.kotlin.java.model.elements.*
import org.jetbrains.kotlin.java.model.types.JeDeclaredType
import org.jetbrains.kotlin.java.model.types.JeMethodExecutableTypeMirror
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
import javax.lang.model.element.AnnotationMirror
import javax.lang.model.type.DeclaredType
@@ -161,4 +162,26 @@ class ProcessorTests : AbstractProcessorTest() {
assertEquals(int, env.typeUtils.erasure(int))
assertEquals(void, env.typeUtils.erasure(void))
}
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 }
assertEquals(toString, transform((method as JeMethodExecutableElement).asType()).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)
}
}