UAST: override getFunctionalInterfaceType + test

This commit is contained in:
Vyacheslav Gerasimov
2017-07-14 16:12:52 +03:00
committed by Nikolay Krasko
parent 8eddb10870
commit 92c23aa0ed
3 changed files with 23 additions and 3 deletions
@@ -28,7 +28,7 @@ class KotlinULambdaExpression(
override val psi: KtLambdaExpression,
givenParent: UElement?
) : KotlinAbstractUExpression(givenParent), ULambdaExpression, KotlinUElementWithType {
val functionalInterfaceType: PsiType?
override val functionalInterfaceType: PsiType?
get() = getFunctionalInterfaceType()
override val body by lz { KotlinConverter.convertOrEmpty(psi.bodyExpression, this) }
@@ -27,8 +27,7 @@ private class KotlinLocalFunctionULambdaExpression(
override val psi: KtFunction,
givenParent: UElement?
): KotlinAbstractUExpression(givenParent), ULambdaExpression {
val functionalInterfaceType: PsiType?
get() = null
override val functionalInterfaceType: PsiType? = null
override val body by lz { KotlinConverter.convertOrEmpty(psi.bodyExpression, this) }
@@ -80,6 +80,27 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
}
}
@Test fun testSAM() {
doTest("SAM") { _, file ->
assertNull(file.findElementByText<ULambdaExpression>("{ /* Not SAM */ }").functionalInterfaceType)
assertEquals("java.lang.Runnable",
file.findElementByText<ULambdaExpression>("{/* Variable */}").functionalInterfaceType?.canonicalText)
assertEquals("java.lang.Runnable",
file.findElementByText<ULambdaExpression>("{/* Assignment */}").functionalInterfaceType?.canonicalText)
assertEquals("java.lang.Runnable",
file.findElementByText<ULambdaExpression>("{/* Type Cast */}").functionalInterfaceType?.canonicalText)
assertEquals("java.lang.Runnable",
file.findElementByText<ULambdaExpression>("{/* Argument */}").functionalInterfaceType?.canonicalText)
assertEquals("java.lang.Runnable",
file.findElementByText<ULambdaExpression>("{/* Return */}").functionalInterfaceType?.canonicalText)
}
}
@Test fun testParameterPropertyWithAnnotation() {
doTest("ParameterPropertyWithAnnotation") { _, file ->
val test1 = file.classes.find { it.name == "Test1" }!!