UAST: Fix for unsafe cast for annotation (EA-109738)

This commit is contained in:
Nicolay Mitropolsky
2017-10-22 10:50:30 +03:00
committed by Dmitry Jemerov
parent c5fa7fb217
commit 299a4b7f69
2 changed files with 17 additions and 4 deletions
@@ -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)