asMemberOf() should always substitute type parameters for methods using the relevant substitutor
(cherry picked from commit dfadd17) (cherry picked from commit 49b07a7)
This commit is contained in:
committed by
Yan Zhulanow
parent
16a9941549
commit
8d2a4c3f91
+7
-4
@@ -25,8 +25,7 @@ import org.jetbrains.kotlin.incremental.SourceRetentionAnnotationHandlerImpl
|
||||
import org.jetbrains.kotlin.java.model.elements.JeAnnotationMirror
|
||||
import org.jetbrains.kotlin.java.model.elements.JeMethodExecutableElement
|
||||
import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||
import org.jetbrains.kotlin.modules.TargetId
|
||||
import org.jetbrains.kotlin.java.model.elements.JeVariableElement
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
@@ -152,8 +151,12 @@ abstract class AbstractProcessorTest : AbstractBytecodeTextTest() {
|
||||
parameterTypes.zip(it.parameters).all { it.first == it.second.asType().toString() }
|
||||
} as JeMethodExecutableElement
|
||||
}
|
||||
|
||||
protected fun ProcessingEnvironment.findClass(fqName: String) = elementUtils.getTypeElement(fqName) as JeTypeElement
|
||||
|
||||
protected fun TypeElement.findField(name: String): JeVariableElement {
|
||||
return enclosedElements.first { it is JeVariableElement && it.simpleName.toString() == name } as JeVariableElement
|
||||
}
|
||||
|
||||
protected fun ProcessingEnvironment.findClass(fqName: String) = elementUtils.getTypeElement(fqName) as JeTypeElement
|
||||
|
||||
protected fun assertEquals(expected: String, actual: Name) = assertEquals(expected, actual.toString())
|
||||
}
|
||||
+20
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.java.model.types.JeMethodExecutableTypeMirror
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
||||
import javax.lang.model.element.AnnotationMirror
|
||||
import javax.lang.model.element.Element
|
||||
import javax.lang.model.type.DeclaredType
|
||||
import javax.lang.model.type.TypeMirror
|
||||
import javax.lang.model.type.TypeVariable
|
||||
@@ -249,4 +250,23 @@ class ProcessorTests : AbstractProcessorTest() {
|
||||
check(true, "TestTrue")
|
||||
check(false, "TestFalse")
|
||||
}
|
||||
|
||||
fun testAsMemberOf() = test("AsMemberOf", "*") { set, roundEnv, env ->
|
||||
val f = env.findClass("Test").findField("f")
|
||||
val fType = f.asType() as JeDeclaredType
|
||||
|
||||
val base = env.findClass("Base")
|
||||
val baseF = base.findField("f")
|
||||
val baseM = base.findMethod("m", "T")
|
||||
|
||||
fun check(element: Element, expectedTypeSignature: String) {
|
||||
assertEquals(expectedTypeSignature, env.typeUtils.asMemberOf(fType, element).toString())
|
||||
}
|
||||
|
||||
assertEquals("(T)T", baseM.asType().toString())
|
||||
check(baseM, "(java.lang.String)java.lang.String")
|
||||
|
||||
assertEquals("T", baseF.asType().toString())
|
||||
check(baseF, "java.lang.String")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user