Faster replacement of get/set to synthetic extensions in converter - don't search for extension property again
This commit is contained in:
@@ -20,7 +20,6 @@ import com.intellij.openapi.editor.Editor
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
||||||
@@ -41,17 +40,14 @@ class UsePropertyAccessSyntaxInspection : IntentionBasedInspection<JetCallExpres
|
|||||||
|
|
||||||
class UsePropertyAccessSyntaxIntention : JetSelfTargetingOffsetIndependentIntention<JetCallExpression>(javaClass(), "Use property access syntax") {
|
class UsePropertyAccessSyntaxIntention : JetSelfTargetingOffsetIndependentIntention<JetCallExpression>(javaClass(), "Use property access syntax") {
|
||||||
override fun isApplicableTo(element: JetCallExpression): Boolean {
|
override fun isApplicableTo(element: JetCallExpression): Boolean {
|
||||||
if (element.getQualifiedExpressionForSelector()?.getReceiverExpression() is JetSuperExpression) return false // cannot call extensions on "super"
|
return detectPropertyNameToUse(element) != null
|
||||||
|
|
||||||
return findExtensionPropertyToUse(element) != null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyTo(element: JetCallExpression, editor: Editor) {
|
override fun applyTo(element: JetCallExpression, editor: Editor) {
|
||||||
applyTo(element)
|
applyTo(element, detectPropertyNameToUse(element)!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun applyTo(element: JetCallExpression) {
|
public fun applyTo(element: JetCallExpression, propertyName: Name) {
|
||||||
val propertyName = findExtensionPropertyToUse(element)!!.getName()
|
|
||||||
val arguments = element.getValueArguments()
|
val arguments = element.getValueArguments()
|
||||||
when (arguments.size()) {
|
when (arguments.size()) {
|
||||||
0 -> replaceWithPropertyGet(element, propertyName)
|
0 -> replaceWithPropertyGet(element, propertyName)
|
||||||
@@ -60,7 +56,9 @@ class UsePropertyAccessSyntaxIntention : JetSelfTargetingOffsetIndependentIntent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findExtensionPropertyToUse(callExpression: JetCallExpression): PropertyDescriptor? {
|
public fun detectPropertyNameToUse(callExpression: JetCallExpression): Name? {
|
||||||
|
if (callExpression.getQualifiedExpressionForSelector()?.getReceiverExpression() is JetSuperExpression) return null // cannot call extensions on "super"
|
||||||
|
|
||||||
val callee = callExpression.getCalleeExpression() as? JetSimpleNameExpression ?: return null
|
val callee = callExpression.getCalleeExpression() as? JetSimpleNameExpression ?: return null
|
||||||
|
|
||||||
val bindingContext = callExpression.analyze(BodyResolveMode.PARTIAL)
|
val bindingContext = callExpression.analyze(BodyResolveMode.PARTIAL)
|
||||||
@@ -87,7 +85,7 @@ class UsePropertyAccessSyntaxIntention : JetSelfTargetingOffsetIndependentIntent
|
|||||||
.map { it.original }
|
.map { it.original }
|
||||||
if (property !in accessibleVariables) return null // shadowed by something else
|
if (property !in accessibleVariables) return null // shadowed by something else
|
||||||
|
|
||||||
return property
|
return property.name
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findSyntheticProperty(function: FunctionDescriptor, resolutionScope: JetScope): SyntheticJavaPropertyDescriptor? {
|
private fun findSyntheticProperty(function: FunctionDescriptor, resolutionScope: JetScope): SyntheticJavaPropertyDescriptor? {
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ object J2KPostProcessingRegistrar {
|
|||||||
_processings.add(RemoveExplicitTypeArgumentsProcessing())
|
_processings.add(RemoveExplicitTypeArgumentsProcessing())
|
||||||
_processings.add(MoveLambdaOutsideParenthesesProcessing())
|
_processings.add(MoveLambdaOutsideParenthesesProcessing())
|
||||||
_processings.add(ConvertToStringTemplateProcessing())
|
_processings.add(ConvertToStringTemplateProcessing())
|
||||||
|
_processings.add(UsePropertyAccessSyntaxProcessing())
|
||||||
|
|
||||||
registerIntentionBasedProcessing(UsePropertyAccessSyntaxIntention()) { applyTo(it) }
|
|
||||||
registerIntentionBasedProcessing(IfThenToSafeAccessIntention()) { applyTo(it) }
|
registerIntentionBasedProcessing(IfThenToSafeAccessIntention()) { applyTo(it) }
|
||||||
registerIntentionBasedProcessing(IfThenToElvisIntention()) { applyTo(it) }
|
registerIntentionBasedProcessing(IfThenToElvisIntention()) { applyTo(it) }
|
||||||
registerIntentionBasedProcessing(IfNullToElvisIntention()) { applyTo(it) }
|
registerIntentionBasedProcessing(IfNullToElvisIntention()) { applyTo(it) }
|
||||||
@@ -143,4 +143,14 @@ object J2KPostProcessingRegistrar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class UsePropertyAccessSyntaxProcessing : J2kPostProcessing {
|
||||||
|
private val intention = UsePropertyAccessSyntaxIntention()
|
||||||
|
|
||||||
|
override fun createAction(element: JetElement, diagnostics: Diagnostics): (() -> Unit)? {
|
||||||
|
if (element !is JetCallExpression) return null
|
||||||
|
val propertyName = intention.detectPropertyNameToUse(element) ?: return null
|
||||||
|
return { intention.applyTo(element, propertyName) }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user