UAST: Fix for unsafe cast for annotation (EA-109738)
This commit is contained in:
committed by
Dmitry Jemerov
parent
c5fa7fb217
commit
299a4b7f69
@@ -143,7 +143,7 @@ private fun findAnnotationClassFromConstructorParameter(parameter: KtParameter):
|
||||
val primaryConstructor = parameter.getStrictParentOfType<KtPrimaryConstructor>() ?: return null
|
||||
val containingClass = primaryConstructor.getContainingClassOrObject()
|
||||
if (containingClass.isAnnotation()) {
|
||||
return KotlinUastLanguagePlugin().convertElementWithParent(containingClass, null) as UClass
|
||||
return KotlinUastLanguagePlugin().convertElementWithParent(containingClass, null) as? UClass
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -25,10 +25,10 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||
import org.jetbrains.kotlin.idea.core.copied
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||
import org.jetbrains.uast.UClass
|
||||
import org.jetbrains.uast.getParentOfType
|
||||
import org.jetbrains.uast.toUElement
|
||||
import org.jetbrains.uast.*
|
||||
import org.jetbrains.uast.test.env.findUElementByTextFromPsi
|
||||
|
||||
class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
|
||||
@@ -61,6 +61,19 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
copied.originalFile.virtualFile)
|
||||
}
|
||||
|
||||
fun testParameterInAnnotationClassFromFactory() {
|
||||
|
||||
val detachedClass = KtPsiFactory(project).createClass("""
|
||||
annotation class MyAnnotation(val myParam: String = "default")
|
||||
""")
|
||||
|
||||
detachedClass.findUElementByTextFromPsi<UElement>("default")
|
||||
.getParentOfType<UExpression>().let {
|
||||
TestCase.assertNotNull("it should return something at least", it)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun <T> T?.orFail(msg: String): T = this ?: error(msg)
|
||||
Reference in New Issue
Block a user