Unused receiver: optimization

This commit is contained in:
Mikhail Glukhikh
2018-06-07 18:13:33 +03:00
parent faa8d92560
commit 542f0a61d1
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.idea.MainFunctionDetector
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.core.isOverridable
import org.jetbrains.kotlin.idea.intentions.getCallableDescriptor
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureConfiguration
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor
import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify
@@ -41,7 +40,6 @@ import org.jetbrains.kotlin.idea.util.getThisReceiverOwner
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference
@@ -61,21 +59,21 @@ class UnusedReceiverParameterInspection : AbstractKotlinInspection() {
val receiverTypeReference = callableDeclaration.receiverTypeReference
if (receiverTypeReference == null || receiverTypeReference.textRange.isEmpty) return
if (callableDeclaration is KtProperty && callableDeclaration.accessors.isEmpty()) return
if (callableDeclaration is KtNamedFunction && !callableDeclaration.hasBody()) return
if (callableDeclaration.hasModifier(KtTokens.OVERRIDE_KEYWORD) ||
callableDeclaration.hasModifier(KtTokens.OPERATOR_KEYWORD) ||
callableDeclaration.hasModifier(KtTokens.INFIX_KEYWORD) ||
callableDeclaration.hasActualModifier() ||
callableDeclaration.isOverridable()
) return
val context = receiverTypeReference.analyze()
val receiverType = context[BindingContext.TYPE, receiverTypeReference] ?: return
val receiverTypeDeclaration = receiverType.constructor.declarationDescriptor
if (DescriptorUtils.isCompanionObject(receiverTypeDeclaration)) return
if (callableDeclaration.isOverridable() ||
callableDeclaration.hasModifier(KtTokens.OVERRIDE_KEYWORD) ||
callableDeclaration.hasModifier(KtTokens.OPERATOR_KEYWORD) ||
callableDeclaration.hasModifier(KtTokens.INFIX_KEYWORD) ||
callableDeclaration.hasActualModifier()
) return
if (callableDeclaration is KtProperty && callableDeclaration.accessors.isEmpty()) return
if (callableDeclaration is KtNamedFunction && !callableDeclaration.hasBody()) return
val callable = callableDeclaration.descriptor
if (callable != null && MainFunctionDetector.isMain(callable)) return