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.lang.jvm.source.JvmDeclarationSearcher
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiNamedElement import com.intellij.psi.PsiNamedElement
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.toLightElements import org.jetbrains.kotlin.asJava.toLightElements
import org.jetbrains.kotlin.asJava.toPsiParameters
import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtElement 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 { class KotlinDeclarationSearcher : JvmDeclarationSearcher {
override fun findDeclarations(declaringElement: PsiElement): Collection<JvmElement> = override fun findDeclarations(declaringElement: PsiElement): Collection<JvmElement> =
@@ -25,6 +30,13 @@ class KotlinDeclarationSearcher : JvmDeclarationSearcher {
else else
declaringElement.toLightElements() + primaryConstructor.toLightElements() declaringElement.toLightElements() + primaryConstructor.toLightElements()
} }
is KtParameter -> {
SmartList<PsiNamedElement>().apply {
addAll(declaringElement.toPsiParameters())
addIfNotNull(LightClassUtil.getLightClassBackingField(declaringElement))
addAll(LightClassUtil.getLightClassPropertyMethods(declaringElement))
}
}
is KtElement -> declaringElement.toLightElements() is KtElement -> declaringElement.toLightElements()
else -> emptyList() else -> emptyList()
} }
@@ -27,6 +27,8 @@ class KotlinJvmDeclarationSearcherTest : KotlinLightCodeInsightFixtureTestCase()
class SomeClass(val field: String) { class SomeClass(val field: String) {
private var privateField: Int = 1
lateinit var anotherField:String lateinit var anotherField:String
constructor(i: Int): this(i.toString()){} constructor(i: Int): this(i.toString()){}
@@ -41,8 +43,9 @@ class KotlinJvmDeclarationSearcherTest : KotlinLightCodeInsightFixtureTestCase()
""", """,
JvmDeclared("class SomeClass", JvmClass::class, JvmMethod::class), JvmDeclared("class SomeClass", JvmClass::class, JvmMethod::class),
JvmDeclared("(val field: String)", 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("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("constructor(i: Int)", JvmMethod::class),
JvmDeclared("i: Int", JvmParameter::class), JvmDeclared("i: Int", JvmParameter::class),
JvmDeclared("a: Long", JvmParameter::class, JvmParameter::class), JvmDeclared("a: Long", JvmParameter::class, JvmParameter::class),