Implicit this inspection: minor cleanup

This commit is contained in:
Mikhail Glukhikh
2017-11-02 13:30:38 +03:00
parent 89c4196c06
commit 64a51fe0d1
2 changed files with 4 additions and 9 deletions
@@ -89,7 +89,7 @@ fun LexicalScope.getImplicitReceiversWithInstanceToExpression(): Map<ReceiverPar
val factory = if (expressionText != null)
object : ReceiverExpressionFactory {
override val isImmediate = isImmediateThis
override val expressionText get() = expressionText!!
override val expressionText: String get() = expressionText
override fun createExpression(psiFactory: KtPsiFactory, shortThis: Boolean): KtExpression {
return psiFactory.createExpression(if (shortThis && isImmediateThis) "this" else expressionText)
}
@@ -26,25 +26,20 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.util.getFactoryForImplicitReceiverWithSubtypeOf
import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
import org.jetbrains.kotlin.resolve.BindingContext
class ImplicitThisInspection : AbstractKotlinInspection() {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = object : KtVisitorVoid() {
override fun visitExpression(expression: KtExpression) {
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) {
if (expression !is KtNameReferenceExpression) return
if (expression.isSelectorOfDotQualifiedExpression()) return
val parent = expression.parent
if (parent is KtCallExpression && parent.isSelectorOfDotQualifiedExpression()) return
val referenceExpression = expression as? KtNameReferenceExpression
?: expression.getChildOfType()
?: return
val context = expression.analyzeFully()
val scope = expression.getResolutionScope(context) ?: return
val descriptor = context[BindingContext.REFERENCE_TARGET, referenceExpression] as? CallableDescriptor ?: return
val descriptor = context[BindingContext.REFERENCE_TARGET, expression] as? CallableDescriptor ?: return
val receiverDescriptor = descriptor.extensionReceiverParameter ?: descriptor.dispatchReceiverParameter ?: return
val receiverType = receiverDescriptor.type
@@ -68,7 +63,7 @@ class ImplicitThisInspection : AbstractKotlinInspection() {
val factory = KtPsiFactory(project)
val call = expression.parent as? KtCallExpression ?: expression
call.replace(factory.createExpressionByPattern("$0.$1", receiverText, call.text))
call.replace(factory.createExpressionByPattern("$0.$1", receiverText, call))
}
}
}