From 78d07492350c5a3d3b0dbd3ef68151a2bd18f315 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 17 Feb 2023 18:33:16 +0100 Subject: [PATCH] [Analysis API FIR] implement SyntheticPropertyAccessorReference.canBeReferenceTo for fir reference it might improve find usages performance ^KTIJ-24696 --- .../fe10/Fe10SyntheticPropertyAccessorReference.kt | 13 ------------- .../SyntheticPropertyAccessorReference.kt | 11 +++++++++++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/Fe10SyntheticPropertyAccessorReference.kt b/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/Fe10SyntheticPropertyAccessorReference.kt index c994452553a..cc910643e4a 100644 --- a/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/Fe10SyntheticPropertyAccessorReference.kt +++ b/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/Fe10SyntheticPropertyAccessorReference.kt @@ -5,22 +5,16 @@ package org.jetbrains.kotlin.references.fe10 -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiMethod import com.intellij.util.SmartList import org.jetbrains.kotlin.references.fe10.base.KtFe10Reference -import org.jetbrains.kotlin.asJava.canHaveSyntheticGetter -import org.jetbrains.kotlin.asJava.canHaveSyntheticSetter import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.references.SyntheticPropertyAccessorReference -import org.jetbrains.kotlin.idea.references.readWriteAccess import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtImportAlias import org.jetbrains.kotlin.psi.KtNameReferenceExpression import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.getReferenceTargets -import org.jetbrains.kotlin.resolve.references.ReferenceAccess import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor import org.jetbrains.kotlin.utils.addIfNotNull @@ -29,13 +23,6 @@ class Fe10SyntheticPropertyAccessorReference( getter: Boolean ) : SyntheticPropertyAccessorReference(expression, getter), KtFe10Reference { - override fun canBeReferenceTo(candidateTarget: PsiElement): Boolean { - if (candidateTarget !is PsiMethod || !isAccessorName(candidateTarget.name)) return false - if (getter && !candidateTarget.canHaveSyntheticGetter || !getter && !candidateTarget.canHaveSyntheticSetter) return false - if (!getter && expression.readWriteAccess(true) == ReferenceAccess.READ) return false - return true - } - override fun getTargetDescriptors(context: BindingContext): Collection { val descriptors = expression.getReferenceTargets(context) if (descriptors.none { it is SyntheticJavaPropertyDescriptor }) return emptyList() diff --git a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/SyntheticPropertyAccessorReference.kt b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/SyntheticPropertyAccessorReference.kt index edaabaeb701..7e05dff5a34 100644 --- a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/SyntheticPropertyAccessorReference.kt +++ b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/SyntheticPropertyAccessorReference.kt @@ -7,8 +7,12 @@ package org.jetbrains.kotlin.idea.references import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtNameReferenceExpression +import org.jetbrains.kotlin.resolve.references.ReferenceAccess +import org.jetbrains.kotlin.asJava.canHaveSyntheticSetter +import org.jetbrains.kotlin.asJava.canHaveSyntheticGetter abstract class SyntheticPropertyAccessorReference( expression: KtNameReferenceExpression, @@ -21,6 +25,13 @@ abstract class SyntheticPropertyAccessorReference( return name.startsWith("set") } + override fun canBeReferenceTo(candidateTarget: PsiElement): Boolean { + if (candidateTarget !is PsiMethod || !isAccessorName(candidateTarget.name)) return false + if (getter && !candidateTarget.canHaveSyntheticGetter || !getter && !candidateTarget.canHaveSyntheticSetter) return false + if (!getter && expression.readWriteAccess(true) == ReferenceAccess.READ) return false + return true + } + override fun getRangeInElement() = TextRange(0, expression.textLength) override fun canRename() = true