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.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),
|
||||||
|
|||||||
Reference in New Issue
Block a user