UAST: Fix for unsafe cast for class initializer (EA-109918)

This commit is contained in:
Nicolay Mitropolsky
2017-10-24 19:08:11 +03:00
committed by Dmitry Jemerov
parent 1a8be635b9
commit 1fa5152cb7
2 changed files with 18 additions and 1 deletions
@@ -103,7 +103,7 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? {
if (parent is KtClassInitializer) {
val containingClass = parent.containingClassOrObject
if (containingClass != null) {
val containingUClass = KotlinUastLanguagePlugin().convertElementWithParent(containingClass, null) as KotlinUClass?
val containingUClass = KotlinUastLanguagePlugin().convertElementWithParent(containingClass, null) as? KotlinUClass
containingUClass?.methods?.filterIsInstance<KotlinPrimaryConstructorUMethod>()?.firstOrNull()?.let {
return it.uastBody
}
@@ -74,6 +74,23 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() {
}
fun testLiteralInClassInitializerFromFactory() {
val detachedClass = KtPsiFactory(project).createClass("""
class MyAnnotation(){
init {
"default"
}
}
""")
val literalInside = detachedClass.findUElementByTextFromPsi<UElement>("default")
generateSequence(literalInside, { it.uastParent }).count().let {
TestCase.assertTrue("it should have some parents $it actually", it > 1)
}
}
}
fun <T> T?.orFail(msg: String): T = this ?: error(msg)