"Convert lambda to reference": fix case with extension 'this'

#KT-21999 Fixed
This commit is contained in:
Toshiaki Kameyama
2018-08-02 08:21:06 +03:00
committed by Mikhail Glukhikh
parent 2bf3b435f2
commit 0a5aa2b60c
8 changed files with 73 additions and 6 deletions
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
import org.jetbrains.kotlin.resolve.descriptorUtil.isCompanionObject
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
import org.jetbrains.kotlin.types.isDynamic
@@ -234,7 +235,7 @@ open class ConvertLambdaToReferenceIntention(text: String) :
val descriptor by lazy { receiver?.type?.constructor?.declarationDescriptor }
val receiverText = when {
receiver == null || descriptor?.isCompanionObject() == true -> ""
lambdaExpression.getResolutionScope().getImplicitReceiversHierarchy().size == 1 -> "this"
receiver is ExtensionReceiver || lambdaExpression.getResolutionScope().getImplicitReceiversHierarchy().size == 1 -> "this"
else -> descriptor?.name?.let { "this@$it" } ?: return null
}
"$receiverText::${singleStatement.getCallReferencedName()}"