KotlinDeclarationSearcher: return backing fields for parameters (KT-29034)
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user