Uast: unifying resolve to two methods resolveToDeclaration and resolveToPsiMethod
This commit is contained in:
@@ -63,7 +63,9 @@ abstract class KotlinUAnnotationBase<T : KtCallElement>(
|
|||||||
|
|
||||||
protected abstract fun computeClassDescriptor(): ClassDescriptor?
|
protected abstract fun computeClassDescriptor(): ClassDescriptor?
|
||||||
|
|
||||||
override fun resolve(): PsiClass? = computeClassDescriptor()?.toSource()?.getMaybeLightElement() as? PsiClass
|
override fun resolve(): PsiClass? = computeClassDescriptor()?.let {
|
||||||
|
sourcePsi.calleeExpression?.let { ktExpression -> resolveToDeclaration(ktExpression, it) }
|
||||||
|
} as? PsiClass
|
||||||
|
|
||||||
override fun findAttributeValue(name: String?): UExpression? =
|
override fun findAttributeValue(name: String?): UExpression? =
|
||||||
findDeclaredAttributeValue(name) ?: findAttributeDefaultValue(name ?: "value")
|
findDeclaredAttributeValue(name) ?: findAttributeDefaultValue(name ?: "value")
|
||||||
|
|||||||
+1
-4
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.psi.KtExpression
|
|||||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||||
import org.jetbrains.kotlin.psi.KtReferenceExpression
|
import org.jetbrains.kotlin.psi.KtReferenceExpression
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
|
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
import org.jetbrains.uast.UElement
|
import org.jetbrains.uast.UElement
|
||||||
import org.jetbrains.uast.UImportStatement
|
import org.jetbrains.uast.UImportStatement
|
||||||
import org.jetbrains.uast.USimpleNameReferenceExpression
|
import org.jetbrains.uast.USimpleNameReferenceExpression
|
||||||
@@ -63,9 +62,7 @@ class KotlinUImportStatement(
|
|||||||
|
|
||||||
override fun resolve(): PsiElement? {
|
override fun resolve(): PsiElement? {
|
||||||
val reference = psi.getQualifiedElementSelector() as? KtReferenceExpression ?: return null
|
val reference = psi.getQualifiedElementSelector() as? KtReferenceExpression ?: return null
|
||||||
val bindingContext = reference.analyze()
|
return resolveToDeclaration(reference)
|
||||||
val referenceTarget = bindingContext[BindingContext.REFERENCE_TARGET, reference] ?: return null
|
|
||||||
return referenceTarget.toSource()?.getMaybeLightElement()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-1
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiNamedElement
|
import com.intellij.psi.PsiNamedElement
|
||||||
import com.intellij.psi.ResolveResult
|
import com.intellij.psi.ResolveResult
|
||||||
import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
||||||
@@ -45,7 +46,7 @@ class KotlinUCallableReferenceExpression(
|
|||||||
override val resolvedName: String?
|
override val resolvedName: String?
|
||||||
get() = (resolve() as? PsiNamedElement)?.name
|
get() = (resolve() as? PsiNamedElement)?.name
|
||||||
|
|
||||||
override fun resolve() = sourcePsi.callableReference.resolveCallToDeclaration()
|
override fun resolve(): PsiElement? = resolveToDeclaration(sourcePsi.callableReference)
|
||||||
|
|
||||||
override fun multiResolve(): Iterable<ResolveResult> = getResolveResultVariants(sourcePsi.callableReference)
|
override fun multiResolve(): Iterable<ResolveResult> = getResolveResultVariants(sourcePsi.callableReference)
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -16,8 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiNamedElement
|
import com.intellij.psi.PsiNamedElement
|
||||||
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
|
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.uast.UCallExpression
|
import org.jetbrains.uast.UCallExpression
|
||||||
import org.jetbrains.uast.UElement
|
import org.jetbrains.uast.UElement
|
||||||
import org.jetbrains.uast.UQualifiedReferenceExpression
|
import org.jetbrains.uast.UQualifiedReferenceExpression
|
||||||
@@ -33,7 +35,7 @@ class KotlinUQualifiedReferenceExpression(
|
|||||||
override val selector by lz { KotlinConverter.convertOrEmpty(sourcePsi.selectorExpression, this) }
|
override val selector by lz { KotlinConverter.convertOrEmpty(sourcePsi.selectorExpression, this) }
|
||||||
override val accessType = UastQualifiedExpressionAccessType.SIMPLE
|
override val accessType = UastQualifiedExpressionAccessType.SIMPLE
|
||||||
|
|
||||||
override fun resolve() = sourcePsi.selectorExpression?.resolveCallToDeclaration()
|
override fun resolve(): PsiElement? = sourcePsi.selectorExpression?.let { resolveToDeclaration(it) }
|
||||||
|
|
||||||
override val resolvedName: String?
|
override val resolvedName: String?
|
||||||
get() = (resolve() as? PsiNamedElement)?.name
|
get() = (resolve() as? PsiNamedElement)?.name
|
||||||
|
|||||||
+2
-1
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiNamedElement
|
import com.intellij.psi.PsiNamedElement
|
||||||
import com.intellij.psi.ResolveResult
|
import com.intellij.psi.ResolveResult
|
||||||
import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression
|
import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression
|
||||||
@@ -36,6 +37,6 @@ class KotlinUSafeQualifiedExpression(
|
|||||||
override val resolvedName: String?
|
override val resolvedName: String?
|
||||||
get() = (resolve() as? PsiNamedElement)?.name
|
get() = (resolve() as? PsiNamedElement)?.name
|
||||||
|
|
||||||
override fun resolve() = sourcePsi.selectorExpression?.resolveCallToDeclaration()
|
override fun resolve(): PsiElement? = sourcePsi.selectorExpression?.let { resolveToDeclaration(it) }
|
||||||
override fun multiResolve(): Iterable<ResolveResult> = getResolveResultVariants(sourcePsi.selectorExpression)
|
override fun multiResolve(): Iterable<ResolveResult> = getResolveResultVariants(sourcePsi.selectorExpression)
|
||||||
}
|
}
|
||||||
+9
-61
@@ -16,22 +16,20 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.PsiClassType
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import com.intellij.psi.PsiElement
|
||||||
|
import com.intellij.psi.PsiMethod
|
||||||
|
import com.intellij.psi.PsiNamedElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor
|
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.tower.NewResolvedCallImpl
|
import org.jetbrains.kotlin.resolve.calls.tower.NewResolvedCallImpl
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
|
||||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.constant
|
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.internal.acceptList
|
import org.jetbrains.uast.internal.acceptList
|
||||||
import org.jetbrains.uast.internal.log
|
import org.jetbrains.uast.internal.log
|
||||||
@@ -43,31 +41,7 @@ open class KotlinUSimpleReferenceExpression(
|
|||||||
override val sourcePsi: KtSimpleNameExpression,
|
override val sourcePsi: KtSimpleNameExpression,
|
||||||
givenParent: UElement?
|
givenParent: UElement?
|
||||||
) : KotlinAbstractUExpression(givenParent), USimpleNameReferenceExpression, KotlinUElementWithType, KotlinEvaluatableUElement {
|
) : KotlinAbstractUExpression(givenParent), USimpleNameReferenceExpression, KotlinUElementWithType, KotlinEvaluatableUElement {
|
||||||
private val resolvedDeclaration: PsiElement? by lz {
|
private val resolvedDeclaration: PsiElement? by lz { resolveToDeclaration(sourcePsi) }
|
||||||
sourcePsi.resolveCallToDeclaration()?.let { return@lz it }
|
|
||||||
|
|
||||||
var declarationDescriptor = sourcePsi.analyze()[BindingContext.REFERENCE_TARGET, sourcePsi] ?: return@lz null
|
|
||||||
if (declarationDescriptor is ImportedFromObjectCallableDescriptor<*>) {
|
|
||||||
declarationDescriptor = declarationDescriptor.callableFromObject
|
|
||||||
}
|
|
||||||
if (declarationDescriptor is SyntheticJavaPropertyDescriptor) {
|
|
||||||
declarationDescriptor = when (sourcePsi.readWriteAccess()) {
|
|
||||||
ReferenceAccess.WRITE, ReferenceAccess.READ_WRITE ->
|
|
||||||
declarationDescriptor.setMethod ?: declarationDescriptor.getMethod
|
|
||||||
ReferenceAccess.READ -> declarationDescriptor.getMethod
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (declarationDescriptor is PackageViewDescriptor) {
|
|
||||||
return@lz JavaPsiFacade.getInstance(sourcePsi.project).findPackage(declarationDescriptor.fqName.asString())
|
|
||||||
}
|
|
||||||
|
|
||||||
resolveToPsiClass(this, declarationDescriptor, sourcePsi)?.let { return@lz it }
|
|
||||||
if (declarationDescriptor is DeclarationDescriptorWithSource) {
|
|
||||||
declarationDescriptor.source.getPsi()?.let { it.getMaybeLightElement() ?: it }?.let { return@lz it }
|
|
||||||
}
|
|
||||||
return@lz resolveDeserialized(sourcePsi, declarationDescriptor, sourcePsi.readWriteAccess())
|
|
||||||
}
|
|
||||||
|
|
||||||
override val identifier get() = sourcePsi.getReferencedName()
|
override val identifier get() = sourcePsi.getReferencedName()
|
||||||
|
|
||||||
@@ -190,31 +164,6 @@ open class KotlinUSimpleReferenceExpression(
|
|||||||
override fun resolve(): PsiMethod? = resolveToPsiMethod(sourcePsi, accessorDescriptor)
|
override fun resolve(): PsiMethod? = resolveToPsiMethod(sourcePsi, accessorDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun KtExpression.readWriteAccess(): ReferenceAccess {
|
|
||||||
var expression = getQualifiedExpressionForSelectorOrThis()
|
|
||||||
loop@ while (true) {
|
|
||||||
val parent = expression.parent
|
|
||||||
when (parent) {
|
|
||||||
is KtParenthesizedExpression, is KtAnnotatedExpression, is KtLabeledExpression -> expression = parent as KtExpression
|
|
||||||
else -> break@loop
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val assignment = expression.getAssignmentByLHS()
|
|
||||||
if (assignment != null) {
|
|
||||||
return when (assignment.operationToken) {
|
|
||||||
KtTokens.EQ -> ReferenceAccess.WRITE
|
|
||||||
else -> ReferenceAccess.READ_WRITE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return if ((expression.parent as? KtUnaryExpression)?.operationToken
|
|
||||||
in constant { setOf(KtTokens.PLUSPLUS, KtTokens.MINUSMINUS) }
|
|
||||||
)
|
|
||||||
ReferenceAccess.READ_WRITE
|
|
||||||
else
|
|
||||||
ReferenceAccess.READ
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinClassViaConstructorUSimpleReferenceExpression(
|
class KotlinClassViaConstructorUSimpleReferenceExpression(
|
||||||
@@ -228,8 +177,7 @@ class KotlinClassViaConstructorUSimpleReferenceExpression(
|
|||||||
private val resolved by lazy {
|
private val resolved by lazy {
|
||||||
when (val resultingDescriptor = sourcePsi.getResolvedCall(sourcePsi.analyze())?.descriptorForResolveViaConstructor()) {
|
when (val resultingDescriptor = sourcePsi.getResolvedCall(sourcePsi.analyze())?.descriptorForResolveViaConstructor()) {
|
||||||
is ConstructorDescriptor -> {
|
is ConstructorDescriptor -> {
|
||||||
resultingDescriptor.constructedClass.toSource()?.getMaybeLightElement()
|
sourcePsi.calleeExpression?.let { resolveToDeclaration(it, resultingDescriptor) }
|
||||||
?: (resultingDescriptor as? DeserializedCallableMemberDescriptor)?.let { resolveContainingDeserializedClass(sourcePsi, it) }
|
|
||||||
}
|
}
|
||||||
is SamConstructorDescriptor ->
|
is SamConstructorDescriptor ->
|
||||||
(resultingDescriptor.returnType?.getFunctionalInterfaceType(this, sourcePsi) as? PsiClassType)?.resolve()
|
(resultingDescriptor.returnType?.getFunctionalInterfaceType(this, sourcePsi) as? PsiClassType)?.resolve()
|
||||||
|
|||||||
+80
-18
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype
|
|||||||
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.synthetic.SyntheticMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.synthetic.SyntheticMemberDescriptor
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment
|
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment
|
||||||
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
|
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor
|
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor
|
||||||
@@ -48,10 +49,13 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature
|
|||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||||
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.getAssignmentByLHS
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.TypeVariableTypeConstructor
|
import org.jetbrains.kotlin.resolve.calls.inference.model.TypeVariableTypeConstructor
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch
|
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch
|
||||||
@@ -60,14 +64,17 @@ import org.jetbrains.kotlin.resolve.calls.tower.NewResolvedCallImpl
|
|||||||
import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor
|
import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor
|
||||||
import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstructor
|
import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstructor
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||||
import org.jetbrains.kotlin.synthetic.SamAdapterExtensionFunctionDescriptor
|
import org.jetbrains.kotlin.synthetic.SamAdapterExtensionFunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||||
import org.jetbrains.kotlin.type.MapPsiToAsmDesc
|
import org.jetbrains.kotlin.type.MapPsiToAsmDesc
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.typeUtil.builtIns
|
import org.jetbrains.kotlin.types.typeUtil.builtIns
|
||||||
import org.jetbrains.kotlin.types.typeUtil.contains
|
import org.jetbrains.kotlin.types.typeUtil.contains
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isInterface
|
import org.jetbrains.kotlin.types.typeUtil.isInterface
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.constant
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
@@ -132,7 +139,7 @@ internal fun resolveToPsiMethod(
|
|||||||
internal fun getContainingLightClass(original: KtDeclaration): KtLightClass? =
|
internal fun getContainingLightClass(original: KtDeclaration): KtLightClass? =
|
||||||
(original.containingClassOrObject?.toLightClass() ?: original.containingKtFile.findFacadeClass())
|
(original.containingClassOrObject?.toLightClass() ?: original.containingKtFile.findFacadeClass())
|
||||||
|
|
||||||
internal fun resolveContainingDeserializedClass(context: KtElement, memberDescriptor: DeserializedCallableMemberDescriptor): PsiClass? {
|
private fun resolveContainingDeserializedClass(context: KtElement, memberDescriptor: DeserializedCallableMemberDescriptor): PsiClass? {
|
||||||
val containingDeclaration = memberDescriptor.containingDeclaration
|
val containingDeclaration = memberDescriptor.containingDeclaration
|
||||||
return when (containingDeclaration) {
|
return when (containingDeclaration) {
|
||||||
is LazyJavaPackageFragment -> {
|
is LazyJavaPackageFragment -> {
|
||||||
@@ -142,24 +149,24 @@ internal fun resolveContainingDeserializedClass(context: KtElement, memberDescri
|
|||||||
JavaPsiFacade.getInstance(context.project).findClass(containingClassQualifiedName, context.resolveScope) ?: return null
|
JavaPsiFacade.getInstance(context.project).findClass(containingClassQualifiedName, context.resolveScope) ?: return null
|
||||||
}
|
}
|
||||||
is DeserializedClassDescriptor -> {
|
is DeserializedClassDescriptor -> {
|
||||||
val declaredPsiType = containingDeclaration.defaultType.toPsiType(null, context, false)
|
val declaredPsiType = containingDeclaration.defaultType.toPsiType(null as PsiModifierListOwner?, context, false)
|
||||||
(declaredPsiType as? PsiClassType)?.resolve() ?: return null
|
(declaredPsiType as? PsiClassType)?.resolve() ?: return null
|
||||||
}
|
}
|
||||||
else -> return null
|
else -> return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun resolveToPsiClass(uElement: UElement, declarationDescriptor: DeclarationDescriptor, context: KtElement): PsiClass? =
|
private fun resolveToPsiClass(uElement: () -> UElement?, declarationDescriptor: DeclarationDescriptor, context: KtElement): PsiClass? =
|
||||||
when (declarationDescriptor) {
|
when (declarationDescriptor) {
|
||||||
is ConstructorDescriptor -> declarationDescriptor.returnType
|
is ConstructorDescriptor -> declarationDescriptor.returnType
|
||||||
is ClassDescriptor -> declarationDescriptor.defaultType
|
is ClassDescriptor -> declarationDescriptor.defaultType
|
||||||
is TypeParameterDescriptor -> declarationDescriptor.defaultType
|
is TypeParameterDescriptor -> declarationDescriptor.defaultType
|
||||||
is TypeAliasDescriptor -> declarationDescriptor.expandedType
|
is TypeAliasDescriptor -> declarationDescriptor.expandedType
|
||||||
else -> null
|
else -> null
|
||||||
}?.toPsiType(uElement, context, true).let { PsiTypesUtil.getPsiClass(it) }
|
}?.toPsiType(uElement.invoke(), context, true).let { PsiTypesUtil.getPsiClass(it) }
|
||||||
|
|
||||||
|
|
||||||
internal fun resolveDeserialized(
|
private fun resolveDeserialized(
|
||||||
context: KtElement,
|
context: KtElement,
|
||||||
descriptor: DeclarationDescriptor,
|
descriptor: DeclarationDescriptor,
|
||||||
accessHint: ReferenceAccess? = null
|
accessHint: ReferenceAccess? = null
|
||||||
@@ -236,7 +243,7 @@ private fun PsiMethod.matchesDesc(desc: String) = desc == buildString {
|
|||||||
|
|
||||||
private fun getMethodSignatureFromDescriptor(context: KtElement, descriptor: CallableDescriptor): JvmMemberSignature? {
|
private fun getMethodSignatureFromDescriptor(context: KtElement, descriptor: CallableDescriptor): JvmMemberSignature? {
|
||||||
fun PsiType.raw() = (this as? PsiClassType)?.rawType() ?: PsiPrimitiveType.getUnboxedType(this) ?: this
|
fun PsiType.raw() = (this as? PsiClassType)?.rawType() ?: PsiPrimitiveType.getUnboxedType(this) ?: this
|
||||||
fun KotlinType.toPsiType() = toPsiType(null, context, false).raw()
|
fun KotlinType.toPsiType() = toPsiType(null as PsiModifierListOwner?, context, false).raw()
|
||||||
|
|
||||||
val originalDescriptor = descriptor.original
|
val originalDescriptor = descriptor.original
|
||||||
val receiverType = originalDescriptor.extensionReceiverParameter?.type?.toPsiType()
|
val receiverType = originalDescriptor.extensionReceiverParameter?.type?.toPsiType()
|
||||||
@@ -251,8 +258,8 @@ private fun getMethodSignatureFromDescriptor(context: KtElement, descriptor: Cal
|
|||||||
|
|
||||||
internal fun <T> lz(initializer: () -> T) = lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer)
|
internal fun <T> lz(initializer: () -> T) = lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer)
|
||||||
|
|
||||||
internal fun KotlinType.toPsiType(source: UElement, element: KtElement, boxed: Boolean): PsiType =
|
internal fun KotlinType.toPsiType(source: UElement?, element: KtElement, boxed: Boolean): PsiType =
|
||||||
toPsiType(source.getParentOfType<UDeclaration>(false)?.javaPsi as? PsiModifierListOwner, element, boxed)
|
toPsiType(source?.getParentOfType<UDeclaration>(false)?.javaPsi as? PsiModifierListOwner, element, boxed)
|
||||||
|
|
||||||
internal fun KotlinType.toPsiType(lightDeclaration: PsiModifierListOwner?, context: KtElement, boxed: Boolean): PsiType {
|
internal fun KotlinType.toPsiType(lightDeclaration: PsiModifierListOwner?, context: KtElement, boxed: Boolean): PsiType {
|
||||||
if (this.isError) return UastErrorType
|
if (this.isError) return UastErrorType
|
||||||
@@ -351,7 +358,7 @@ internal fun KtClassOrObject.toPsiType(): PsiType {
|
|||||||
return PsiTypesUtil.getClassType(lightClass)
|
return PsiTypesUtil.getClassType(lightClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun PsiElement.getMaybeLightElement(): PsiElement? {
|
private fun PsiElement.getMaybeLightElement(): PsiElement? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is KtDeclaration -> {
|
is KtDeclaration -> {
|
||||||
val lightElement = toLightElements().firstOrNull()
|
val lightElement = toLightElements().firstOrNull()
|
||||||
@@ -374,15 +381,6 @@ internal fun PsiElement.getMaybeLightElement(): PsiElement? {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun KtElement.resolveCallToDeclaration(resultingDescriptor: DeclarationDescriptor? = null): PsiElement? {
|
|
||||||
val descriptor = resultingDescriptor ?: run {
|
|
||||||
val resolvedCall = getResolvedCall(analyze()) ?: return null
|
|
||||||
resolvedCall.resultingDescriptor
|
|
||||||
}
|
|
||||||
|
|
||||||
return descriptor.toSource()?.getMaybeLightElement()
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun KtExpression.unwrapBlockOrParenthesis(): KtExpression {
|
internal fun KtExpression.unwrapBlockOrParenthesis(): KtExpression {
|
||||||
val innerExpression = KtPsiUtil.safeDeparenthesize(this)
|
val innerExpression = KtPsiUtil.safeDeparenthesize(this)
|
||||||
if (innerExpression is KtBlockExpression) {
|
if (innerExpression is KtBlockExpression) {
|
||||||
@@ -473,4 +471,68 @@ internal enum class ReferenceAccess(val isRead: Boolean, val isWrite: Boolean) {
|
|||||||
READ(true, false), WRITE(false, true), READ_WRITE(true, true)
|
READ(true, false), WRITE(false, true), READ_WRITE(true, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun resolveToDeclaration(sourcePsi: KtExpression): PsiElement? =
|
||||||
|
when (sourcePsi) {
|
||||||
|
is KtSimpleNameExpression ->
|
||||||
|
sourcePsi.analyze()[BindingContext.REFERENCE_TARGET, sourcePsi]
|
||||||
|
?.let { resolveToDeclaration(sourcePsi, it) }
|
||||||
|
else ->
|
||||||
|
sourcePsi.getResolvedCall(sourcePsi.analyze())?.resultingDescriptor
|
||||||
|
?.let { descriptor -> resolveToDeclaration(sourcePsi, descriptor) }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
internal fun resolveToDeclaration(sourcePsi: KtExpression, declarationDescriptor: DeclarationDescriptor): PsiElement? {
|
||||||
|
declarationDescriptor.toSource()?.getMaybeLightElement()?.let { return it }
|
||||||
|
|
||||||
|
var declarationDescriptor = declarationDescriptor
|
||||||
|
if (declarationDescriptor is ImportedFromObjectCallableDescriptor<*>) {
|
||||||
|
declarationDescriptor = declarationDescriptor.callableFromObject
|
||||||
|
}
|
||||||
|
if (declarationDescriptor is SyntheticJavaPropertyDescriptor) {
|
||||||
|
declarationDescriptor = when (sourcePsi.readWriteAccess()) {
|
||||||
|
ReferenceAccess.WRITE, ReferenceAccess.READ_WRITE ->
|
||||||
|
declarationDescriptor.setMethod ?: declarationDescriptor.getMethod
|
||||||
|
ReferenceAccess.READ -> declarationDescriptor.getMethod
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (declarationDescriptor is PackageViewDescriptor) {
|
||||||
|
return JavaPsiFacade.getInstance(sourcePsi.project).findPackage(declarationDescriptor.fqName.asString())
|
||||||
|
}
|
||||||
|
|
||||||
|
resolveToPsiClass({ sourcePsi.toUElement() }, declarationDescriptor, sourcePsi)?.let { return it }
|
||||||
|
if (declarationDescriptor is DeclarationDescriptorWithSource) {
|
||||||
|
declarationDescriptor.source.getPsi()?.let { it.getMaybeLightElement() ?: it }?.let { return it }
|
||||||
|
}
|
||||||
|
return resolveDeserialized(sourcePsi, declarationDescriptor, sourcePsi.readWriteAccess())
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun KtExpression.readWriteAccess(): ReferenceAccess {
|
||||||
|
var expression = getQualifiedExpressionForSelectorOrThis()
|
||||||
|
loop@ while (true) {
|
||||||
|
val parent = expression.parent
|
||||||
|
when (parent) {
|
||||||
|
is KtParenthesizedExpression, is KtAnnotatedExpression, is KtLabeledExpression -> expression = parent as KtExpression
|
||||||
|
else -> break@loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val assignment = expression.getAssignmentByLHS()
|
||||||
|
if (assignment != null) {
|
||||||
|
return when (assignment.operationToken) {
|
||||||
|
KtTokens.EQ -> ReferenceAccess.WRITE
|
||||||
|
else -> ReferenceAccess.READ_WRITE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return if ((expression.parent as? KtUnaryExpression)?.operationToken
|
||||||
|
in constant { setOf(KtTokens.PLUSPLUS, KtTokens.MINUSMINUS) }
|
||||||
|
)
|
||||||
|
ReferenceAccess.READ_WRITE
|
||||||
|
else
|
||||||
|
ReferenceAccess.READ
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -18,8 +18,7 @@ import org.jetbrains.uast.UElement
|
|||||||
import org.jetbrains.uast.UMultiResolvable
|
import org.jetbrains.uast.UMultiResolvable
|
||||||
import org.jetbrains.uast.UResolvable
|
import org.jetbrains.uast.UResolvable
|
||||||
import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService
|
import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService
|
||||||
import org.jetbrains.uast.kotlin.getMaybeLightElement
|
import org.jetbrains.uast.kotlin.resolveToDeclaration
|
||||||
import org.jetbrains.uast.kotlin.toSource
|
|
||||||
|
|
||||||
|
|
||||||
internal fun getReferenceVariants(ktElement: KtElement, nameHint: String): Sequence<DeclarationDescriptor> =
|
internal fun getReferenceVariants(ktElement: KtElement, nameHint: String): Sequence<DeclarationDescriptor> =
|
||||||
@@ -31,7 +30,7 @@ internal fun UElement.getResolveResultVariants(ktExpression: KtExpression?): Ite
|
|||||||
val referenceVariants = getReferenceVariants(ktExpression, ktExpression.name ?: ktExpression.text)
|
val referenceVariants = getReferenceVariants(ktExpression, ktExpression.name ?: ktExpression.text)
|
||||||
|
|
||||||
fun asCandidateInfo(descriptor: DeclarationDescriptor): CandidateInfo? =
|
fun asCandidateInfo(descriptor: DeclarationDescriptor): CandidateInfo? =
|
||||||
descriptor.toSource()?.getMaybeLightElement()?.let { CandidateInfo(it, PsiSubstitutor.EMPTY) }
|
resolveToDeclaration(ktExpression, descriptor)?.let { CandidateInfo(it, PsiSubstitutor.EMPTY) }
|
||||||
|
|
||||||
return referenceVariants.mapNotNull(::asCandidateInfo).asIterable()
|
return referenceVariants.mapNotNull(::asCandidateInfo).asIterable()
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -1,10 +1,10 @@
|
|||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiClass:Closeable: Closeable
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.io: io
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = io) -> PsiPackage:java.io: io
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = io) -> PsiPackage:java.io: io
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Closeable) -> PsiClass:Closeable: Closeable
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Closeable) -> PsiClass:Closeable: Closeable
|
||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiClass:InputStream: InputStream
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.io: io
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = io) -> PsiPackage:java.io: io
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = io) -> PsiPackage:java.io: io
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = InputStream) -> PsiClass:InputStream: InputStream
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = InputStream) -> PsiClass:InputStream: InputStream
|
||||||
|
|||||||
+1
-1
@@ -50,6 +50,6 @@ UBlockExpression -> UCallExpression (kind = UastCallKind(name='constructor_call'
|
|||||||
UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s
|
UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s
|
||||||
UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String
|
UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String
|
||||||
ULocalVariable (name = local) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s
|
ULocalVariable (name = local) -> USimpleNameReferenceExpression (identifier = s) -> Light Parameter: s
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:toString: toString
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = local) -> LightVariableBuilder:local: local
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = local) -> LightVariableBuilder:local: local
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:toString) -> USimpleNameReferenceExpression (identifier = toString) -> PsiMethod:toString: toString
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:toString) -> USimpleNameReferenceExpression (identifier = toString) -> PsiMethod:toString: toString
|
||||||
|
|||||||
+16
-16
@@ -1,39 +1,39 @@
|
|||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiMethod:currentThread: currentThread
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = currentThread) -> PsiMethod:currentThread: currentThread
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = currentThread) -> PsiMethod:currentThread: currentThread
|
||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiField:NORM_PRIORITY: NORM_PRIORITY
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = NORM_PRIORITY) -> PsiField:NORM_PRIORITY: NORM_PRIORITY
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = NORM_PRIORITY) -> PsiField:NORM_PRIORITY: NORM_PRIORITY
|
||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiClass:UncaughtExceptionHandler: UncaughtExceptionHandler
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = UncaughtExceptionHandler) -> PsiClass:UncaughtExceptionHandler: UncaughtExceptionHandler
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = UncaughtExceptionHandler) -> PsiClass:UncaughtExceptionHandler: UncaughtExceptionHandler
|
||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = lang) -> PsiPackage:java.lang: lang
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Thread) -> PsiClass:Thread: Thread
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = sleep) -> null: null
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = sleep) -> null: null
|
||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiMethod:emptyList: emptyList
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:kotlin.collections: collections
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = kotlin) -> PsiPackage:kotlin: kotlin
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = kotlin) -> PsiPackage:kotlin: kotlin
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = collections) -> PsiPackage:kotlin.collections: collections
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = collections) -> PsiPackage:kotlin.collections: collections
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = emptyList) -> PsiMethod:emptyList: emptyList
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = emptyList) -> PsiMethod:emptyList: emptyList
|
||||||
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> null: null
|
UImportStatement (isOnDemand = false) -> UQualifiedReferenceExpression -> PsiField:SIZE_BYTES: SIZE_BYTES
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiClass:IntCompanionObject: IntCompanionObject
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiClass:Integer: Integer
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = kotlin) -> PsiPackage:kotlin: kotlin
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = kotlin) -> PsiPackage:kotlin: kotlin
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Int) -> PsiClass:Integer: Integer
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Companion) -> PsiClass:IntCompanionObject: IntCompanionObject
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = Companion) -> PsiClass:IntCompanionObject: IntCompanionObject
|
||||||
|
|||||||
+11
-11
@@ -14,7 +14,7 @@ UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo
|
|||||||
}
|
}
|
||||||
}: A
|
}: A
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:inlineFoo) -> USimpleNameReferenceExpression (identifier = inlineFoo) -> KtLightMethodImpl:inlineFoo: inlineFoo
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to KtLightMethodImpl:inlineFoo) -> USimpleNameReferenceExpression (identifier = inlineFoo) -> KtLightMethodImpl:inlineFoo: inlineFoo
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:forEach: forEach
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
||||||
UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to KtLightMethodImpl:A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A {
|
UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to KtLightMethodImpl:A) -> USimpleNameReferenceExpression (identifier = A) -> KtLightClassImpl:open class A {
|
||||||
fun foo() {}
|
fun foo() {}
|
||||||
@@ -25,32 +25,32 @@ UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo
|
|||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:forEach) -> USimpleNameReferenceExpression (identifier = forEach) -> PsiMethod:forEach: forEach
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:forEach) -> USimpleNameReferenceExpression (identifier = forEach) -> PsiMethod:forEach: forEach
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = println) -> PsiMethod:println: println
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = it) -> null: null
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:println) -> USimpleNameReferenceExpression (identifier = it) -> null: null
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:joinToString: joinToString
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:joinToString) -> USimpleNameReferenceExpression (identifier = joinToString) -> PsiMethod:joinToString: joinToString
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:joinToString) -> USimpleNameReferenceExpression (identifier = joinToString) -> PsiMethod:joinToString: joinToString
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:size: size
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = size) -> PsiMethod:size: size
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = size) -> PsiMethod:size: size
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:getIndices: getIndices
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = indices) -> PsiMethod:getIndices: getIndices
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = indices) -> PsiMethod:getIndices: getIndices
|
||||||
UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = util) -> PsiPackage:java.util: util
|
UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = util) -> PsiPackage:java.util: util
|
||||||
UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = Date) -> PsiClass:Date: Date
|
UTypeReferenceExpression (name = java.util.Date) -> USimpleNameReferenceExpression (identifier = Date) -> PsiClass:Date: Date
|
||||||
ULocalVariable (name = date) -> UQualifiedReferenceExpression -> PsiMethod:Date: Date
|
ULocalVariable (name = date) -> UQualifiedReferenceExpression -> PsiMethod:Date: Date
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiPackage:java.util: util
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = java) -> PsiPackage:java: java
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = util) -> PsiPackage:java.util: util
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = util) -> PsiPackage:java.util: util
|
||||||
UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to PsiMethod:Date) -> USimpleNameReferenceExpression (identifier = Date) -> PsiMethod:Date: Date
|
UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 0))(resolves to PsiMethod:Date) -> USimpleNameReferenceExpression (identifier = Date) -> PsiMethod:Date: Date
|
||||||
UBinaryExpression (operator = =) -> UQualifiedReferenceExpression -> null: null
|
UBinaryExpression (operator = =) -> UQualifiedReferenceExpression -> PsiMethod:setTime: setTime
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = date) -> LightVariableBuilder:date: date
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = date) -> LightVariableBuilder:date: date
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = time) -> PsiMethod:setTime: setTime
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = time) -> PsiMethod:setTime: setTime
|
||||||
UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null
|
UBinaryExpression (operator = =) -> USimpleNameReferenceExpression (identifier = =) -> null: null
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:last: last
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = listOf) -> PsiMethod:listOf: listOf
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:last) -> USimpleNameReferenceExpression (identifier = last) -> PsiMethod:last: last
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:last) -> USimpleNameReferenceExpression (identifier = last) -> PsiMethod:last: last
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:setValue: setValue
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> PsiMethod:first: first
|
||||||
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
UQualifiedReferenceExpression -> UQualifiedReferenceExpression -> null: null
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:mutableMapOf) -> USimpleNameReferenceExpression (identifier = mutableMapOf) -> PsiMethod:mutableMapOf: mutableMapOf
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:mutableMapOf) -> USimpleNameReferenceExpression (identifier = mutableMapOf) -> PsiMethod:mutableMapOf: mutableMapOf
|
||||||
UBinaryExpression (operator = <other>) -> USimpleNameReferenceExpression (identifier = to) -> PsiMethod:to: to
|
UBinaryExpression (operator = <other>) -> USimpleNameReferenceExpression (identifier = to) -> PsiMethod:to: to
|
||||||
@@ -58,7 +58,7 @@ UBlockExpression -> UQualifiedReferenceExpression -> KtLightMethodImpl:foo: foo
|
|||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:first) -> USimpleNameReferenceExpression (identifier = first) -> PsiMethod:first: first
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:first) -> USimpleNameReferenceExpression (identifier = first) -> PsiMethod:first: first
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:setValue) -> USimpleNameReferenceExpression (identifier = setValue) -> PsiMethod:setValue: setValue
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:setValue) -> USimpleNameReferenceExpression (identifier = setValue) -> PsiMethod:setValue: setValue
|
||||||
UBinaryExpression (operator = ..) -> USimpleNameReferenceExpression (identifier = ..) -> null: null
|
UBinaryExpression (operator = ..) -> USimpleNameReferenceExpression (identifier = ..) -> null: null
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:longRangeContains: longRangeContains
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = intRange) -> LightVariableBuilder:intRange: intRange
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = intRange) -> LightVariableBuilder:intRange: intRange
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:longRangeContains) -> USimpleNameReferenceExpression (identifier = contains) -> PsiMethod:longRangeContains: longRangeContains
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:longRangeContains) -> USimpleNameReferenceExpression (identifier = contains) -> PsiMethod:longRangeContains: longRangeContains
|
||||||
UBinaryExpressionWithType -> USimpleNameReferenceExpression (identifier = as) -> null: null
|
UBinaryExpressionWithType -> USimpleNameReferenceExpression (identifier = as) -> null: null
|
||||||
@@ -82,7 +82,7 @@ UTypeReferenceExpression (name = A) -> USimpleNameReferenceExpression (identifie
|
|||||||
}
|
}
|
||||||
}: A
|
}: A
|
||||||
UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T
|
UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifier = T) -> KotlinLightTypeParameter:T: T
|
||||||
UBlockExpression -> UQualifiedReferenceExpression -> null: null
|
UBlockExpression -> UQualifiedReferenceExpression -> PsiMethod:isEmpty: isEmpty
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = listT) -> Light Parameter: listT
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = listT) -> Light Parameter: listT
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:isEmpty) -> USimpleNameReferenceExpression (identifier = isEmpty) -> PsiMethod:isEmpty: isEmpty
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0))(resolves to PsiMethod:isEmpty) -> USimpleNameReferenceExpression (identifier = isEmpty) -> PsiMethod:isEmpty: isEmpty
|
||||||
UForEachExpression -> USimpleNameReferenceExpression (identifier = listT) -> Light Parameter: listT
|
UForEachExpression -> USimpleNameReferenceExpression (identifier = listT) -> Light Parameter: listT
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ UTypeReferenceExpression (name = T) -> USimpleNameReferenceExpression (identifie
|
|||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = at) -> LightVariableBuilder:at: at
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:listOf) -> USimpleNameReferenceExpression (identifier = at) -> LightVariableBuilder:at: at
|
||||||
UTypeReferenceExpression (name = java.util.List<? extends java.lang.String>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
|
UTypeReferenceExpression (name = java.util.List<? extends java.lang.String>) -> USimpleNameReferenceExpression (identifier = List) -> PsiClass:List: List
|
||||||
UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String
|
UTypeReferenceExpression (name = java.lang.String) -> USimpleNameReferenceExpression (identifier = String) -> PsiClass:String: String
|
||||||
ULocalVariable (name = tsl) -> UQualifiedReferenceExpression -> null: null
|
ULocalVariable (name = tsl) -> UQualifiedReferenceExpression -> PsiMethod:map: map
|
||||||
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = tl) -> LightVariableBuilder:tl: tl
|
UQualifiedReferenceExpression -> USimpleNameReferenceExpression (identifier = tl) -> LightVariableBuilder:tl: tl
|
||||||
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:map) -> USimpleNameReferenceExpression (identifier = map) -> PsiMethod:map: map
|
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1))(resolves to PsiMethod:map) -> USimpleNameReferenceExpression (identifier = map) -> PsiMethod:map: map
|
||||||
UReturnExpression -> UQualifiedReferenceExpression -> null: null
|
UReturnExpression -> UQualifiedReferenceExpression -> null: null
|
||||||
|
|||||||
Reference in New Issue
Block a user