Uast: buildLightMethodFake provides proper containing class and parent
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin.declarations
|
package org.jetbrains.uast.kotlin.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.PsiMethod
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.psi.PsiNameIdentifierOwner
|
import com.intellij.psi.PsiNameIdentifierOwner
|
||||||
@@ -26,6 +27,8 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.asJava.elements.isGetter
|
import org.jetbrains.kotlin.asJava.elements.isGetter
|
||||||
import org.jetbrains.kotlin.asJava.elements.isSetter
|
import org.jetbrains.kotlin.asJava.elements.isSetter
|
||||||
|
import org.jetbrains.kotlin.asJava.findFacadeClass
|
||||||
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
@@ -151,11 +154,18 @@ open class KotlinUAnnotationMethod(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildLightMethodFake(original: KtFunction): PsiMethod = LightMethodBuilder(
|
private fun buildLightMethodFake(original: KtFunction): PsiMethod = object : LightMethodBuilder(
|
||||||
original.manager, original.language, original.name,
|
original.manager, original.language, original.name,
|
||||||
LightParameterListBuilder(original.manager, original.language),
|
LightParameterListBuilder(original.manager, original.language),
|
||||||
LightModifierList(original.manager)
|
LightModifierList(original.manager)
|
||||||
)
|
) {
|
||||||
|
|
||||||
|
init {
|
||||||
|
containingClass = original.containingClassOrObject?.toLightClass() ?: original.containingKtFile.findFacadeClass()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getParent(): PsiElement? = containingClass
|
||||||
|
}
|
||||||
|
|
||||||
class KotlinUMethodWithFakeLightDelegate(val original: KtFunction, givenParent: UElement?) :
|
class KotlinUMethodWithFakeLightDelegate(val original: KtFunction, givenParent: UElement?) :
|
||||||
KotlinUMethod(buildLightMethodFake(original), original, givenParent) {
|
KotlinUMethod(buildLightMethodFake(original), original, givenParent) {
|
||||||
|
|||||||
+12
-2
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin.declarations
|
package org.jetbrains.uast.kotlin.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.PsiMethod
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.psi.PsiNameIdentifierOwner
|
import com.intellij.psi.PsiNameIdentifierOwner
|
||||||
@@ -27,6 +28,8 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
|||||||
import org.jetbrains.kotlin.asJava.elements.isGetter
|
import org.jetbrains.kotlin.asJava.elements.isGetter
|
||||||
import org.jetbrains.kotlin.asJava.elements.isSetter
|
import org.jetbrains.kotlin.asJava.elements.isSetter
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
import org.jetbrains.kotlin.asJava.findFacadeClass
|
||||||
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
@@ -149,11 +152,18 @@ open class KotlinUAnnotationMethod(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildLightMethodFake(original: KtFunction): PsiMethod = LightMethodBuilder(
|
private fun buildLightMethodFake(original: KtFunction): PsiMethod = object : LightMethodBuilder(
|
||||||
original.manager, original.language, original.name,
|
original.manager, original.language, original.name,
|
||||||
LightParameterListBuilder(original.manager, original.language),
|
LightParameterListBuilder(original.manager, original.language),
|
||||||
LightModifierList(original.manager)
|
LightModifierList(original.manager)
|
||||||
)
|
) {
|
||||||
|
|
||||||
|
init {
|
||||||
|
containingClass = original.containingClassOrObject?.toLightClass() ?: original.containingKtFile.findFacadeClass()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getParent(): PsiElement? = containingClass
|
||||||
|
}
|
||||||
|
|
||||||
class KotlinUMethodWithFakeLightDelegate(val original: KtFunction, givenParent: UElement?) :
|
class KotlinUMethodWithFakeLightDelegate(val original: KtFunction, givenParent: UElement?) :
|
||||||
KotlinUMethod(buildLightMethodFake(original), original, givenParent) {
|
KotlinUMethod(buildLightMethodFake(original), original, givenParent) {
|
||||||
|
|||||||
+13
-4
@@ -25,6 +25,8 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
|||||||
import org.jetbrains.kotlin.asJava.elements.isGetter
|
import org.jetbrains.kotlin.asJava.elements.isGetter
|
||||||
import org.jetbrains.kotlin.asJava.elements.isSetter
|
import org.jetbrains.kotlin.asJava.elements.isSetter
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
import org.jetbrains.kotlin.asJava.findFacadeClass
|
||||||
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
@@ -61,8 +63,8 @@ open class KotlinUMethod(
|
|||||||
|
|
||||||
override val annotations: List<UAnnotation> by lz {
|
override val annotations: List<UAnnotation> by lz {
|
||||||
psi.annotations
|
psi.annotations
|
||||||
.mapNotNull { (it as? KtLightElement<*, *>)?.kotlinOrigin as? KtAnnotationEntry }
|
.mapNotNull { (it as? KtLightElement<*, *>)?.kotlinOrigin as? KtAnnotationEntry }
|
||||||
.map { KotlinUAnnotation(it, this) }
|
.map { KotlinUAnnotation(it, this) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private val receiver by lz { (sourcePsi as? KtCallableDeclaration)?.receiverTypeReference }
|
private val receiver by lz { (sourcePsi as? KtCallableDeclaration)?.receiverTypeReference }
|
||||||
@@ -152,11 +154,18 @@ open class KotlinUAnnotationMethod(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildLightMethodFake(original: KtFunction): PsiMethod = LightMethodBuilder(
|
private fun buildLightMethodFake(original: KtFunction): PsiMethod = object : LightMethodBuilder(
|
||||||
original.manager, original.language, original.name,
|
original.manager, original.language, original.name,
|
||||||
LightParameterListBuilder(original.manager, original.language),
|
LightParameterListBuilder(original.manager, original.language),
|
||||||
LightModifierList(original.manager)
|
LightModifierList(original.manager)
|
||||||
)
|
) {
|
||||||
|
|
||||||
|
init {
|
||||||
|
containingClass = original.containingClassOrObject?.toLightClass() ?: original.containingKtFile.findFacadeClass()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getParent(): PsiElement? = containingClass
|
||||||
|
}
|
||||||
|
|
||||||
class KotlinUMethodWithFakeLightDelegate(val original: KtFunction, givenParent: UElement?) :
|
class KotlinUMethodWithFakeLightDelegate(val original: KtFunction, givenParent: UElement?) :
|
||||||
KotlinUMethod(buildLightMethodFake(original), original, givenParent) {
|
KotlinUMethod(buildLightMethodFake(original), original, givenParent) {
|
||||||
|
|||||||
Reference in New Issue
Block a user