KotlinDeclarationSearcher: return backing fields for parameters (KT-29034)

This commit is contained in:
Nicolay Mitropolsky
2019-02-14 13:08:22 +03:00
parent 6aff53204f
commit a3bd70a76e
2 changed files with 16 additions and 1 deletions
@@ -9,9 +9,14 @@ import com.intellij.lang.jvm.JvmElement
import com.intellij.lang.jvm.source.JvmDeclarationSearcher
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiNamedElement
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightElements
import org.jetbrains.kotlin.asJava.toPsiParameters
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.utils.SmartList
import org.jetbrains.kotlin.utils.addIfNotNull
class KotlinDeclarationSearcher : JvmDeclarationSearcher {
override fun findDeclarations(declaringElement: PsiElement): Collection<JvmElement> =
@@ -25,6 +30,13 @@ class KotlinDeclarationSearcher : JvmDeclarationSearcher {
else
declaringElement.toLightElements() + primaryConstructor.toLightElements()
}
is KtParameter -> {
SmartList<PsiNamedElement>().apply {
addAll(declaringElement.toPsiParameters())
addIfNotNull(LightClassUtil.getLightClassBackingField(declaringElement))
addAll(LightClassUtil.getLightClassPropertyMethods(declaringElement))
}
}
is KtElement -> declaringElement.toLightElements()
else -> emptyList()
}
@@ -27,6 +27,8 @@ class KotlinJvmDeclarationSearcherTest : KotlinLightCodeInsightFixtureTestCase()
class SomeClass(val field: String) {
private var privateField: Int = 1
lateinit var anotherField:String
constructor(i: Int): this(i.toString()){}
@@ -41,8 +43,9 @@ class KotlinJvmDeclarationSearcherTest : KotlinLightCodeInsightFixtureTestCase()
""",
JvmDeclared("class SomeClass", JvmClass::class, JvmMethod::class),
JvmDeclared("(val field: String)", JvmMethod::class),
JvmDeclared("private var privateField", com.intellij.lang.jvm.JvmField::class),
JvmDeclared("lateinit var anotherField", JvmMethod::class, JvmMethod::class, com.intellij.lang.jvm.JvmField::class),
JvmDeclared("val field: String", JvmParameter::class, JvmMethod::class),
JvmDeclared("val field: String", JvmParameter::class, JvmMethod::class, com.intellij.lang.jvm.JvmField::class),
JvmDeclared("constructor(i: Int)", JvmMethod::class),
JvmDeclared("i: Int", JvmParameter::class),
JvmDeclared("a: Long", JvmParameter::class, JvmParameter::class),