191: Uast: KtParameter can be converted to field

This commit is contained in:
Nicolay Mitropolsky
2019-01-29 12:35:34 +03:00
parent 529d0b8326
commit 114c3be632
2 changed files with 13 additions and 5 deletions
@@ -223,10 +223,14 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin {
}
is KtParameter -> el<UParameter> {
val ownerFunction = original.ownerFunction as? KtFunction ?: return null
val lightMethod = LightClassUtil.getLightClassMethod(ownerFunction) ?: return null
val lightParameter = lightMethod.parameterList.parameters.find { it.name == original.name } ?: return null
val ownerFunction = original.ownerFunction as? KtFunction ?: return@el null
val lightMethod = LightClassUtil.getLightClassMethod(ownerFunction) ?: return@el null
val lightParameter = lightMethod.parameterList.parameters.find { it.name == original.name } ?: return@el null
KotlinUParameter(lightParameter, original, givenParent)
} ?: el<UField> {
if (!original.hasValOrVar()) return@el null
val lightField = LightClassUtil.getLightClassBackingField(original) ?: return@el null
KotlinUField(lightField, original, givenParent)
}
is KtFile -> el<UFile> { KotlinUFile(original, this@KotlinUastLanguagePlugin) }
@@ -7,6 +7,7 @@ package org.jetbrains.uast.test.kotlin
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementVisitor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.uast.*
import org.jetbrains.uast.test.env.kotlin.assertEqualsToFile
@@ -23,13 +24,16 @@ class MultiplesRequiredTypesTest : AbstractKotlinUastTest() {
}
private fun UFile.asMultiplesTargetConversionResult(): String {
val plugin = UastLanguagePlugin.byLanguage(KotlinLanguage.INSTANCE)!!
val builder = StringBuilder()
var level = 0
(this.psi as KtFile).accept(object : PsiElementVisitor() {
override fun visitElement(element: PsiElement) {
val uElement =
element.toUElementOfExpectedTypes(UFile::class.java, UClass::class.java, UField::class.java, UMethod::class.java)
plugin.convertElementWithParent(
element,
arrayOf(UFile::class.java, UClass::class.java, UField::class.java, UMethod::class.java)
)
if (uElement != null) {
builder.append(" ".repeat(level))
builder.append(uElement.asLogString())