From 88974ee32b70e9bc1d5c7a07a1fe83d9d21c072a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 6 Jun 2018 15:16:44 +0300 Subject: [PATCH] Can be private: simplification Related to KT-22030 --- .../MemberVisibilityCanBePrivateInspection.kt | 11 ++++------- .../sameClassFunctionCall.kt | 7 +++++++ .../sameClassFunctionCall.kt.after | 7 +++++++ .../inspections/LocalInspectionTestGenerated.java | 5 +++++ 4 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt create mode 100644 idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt index 22e88ac2b67..e149617221d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt @@ -32,13 +32,12 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.effectiveVisibility +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.isInheritable import org.jetbrains.kotlin.idea.core.isOverridable import org.jetbrains.kotlin.idea.core.toDescriptor -import org.jetbrains.kotlin.idea.intentions.getCallableDescriptor import org.jetbrains.kotlin.idea.quickfix.AddModifierFix import org.jetbrains.kotlin.idea.refactoring.isConstructorDeclaredProperty -import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.search.isCheapEnoughToSearchConsideringOperators import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor @@ -47,7 +46,6 @@ import org.jetbrains.kotlin.idea.util.isExpectDeclaration import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* -import org.jetbrains.kotlin.resolve.DescriptorUtils class MemberVisibilityCanBePrivateInspection : AbstractKotlinInspection() { @@ -126,10 +124,9 @@ class MemberVisibilityCanBePrivateInspection : AbstractKotlinInspection() { } val classOrObjectDescriptor = classOrObject.descriptor as? ClassDescriptor if (classOrObjectDescriptor != null) { - val receiver = usage.getStrictParentOfType()?.receiverExpression - val receiverDescriptor = (receiver?.getCallableDescriptor()?.returnType?.constructor?.declarationDescriptor - ?: (receiver?.mainReference?.resolve() as? KtClassOrObject)?.descriptor) as? ClassDescriptor - if (receiverDescriptor != null && DescriptorUtils.isSubclass(receiverDescriptor, classOrObjectDescriptor)) { + val receiverType = (usage as? KtElement)?.resolveToCall()?.dispatchReceiver?.type + val receiverDescriptor = receiverType?.constructor?.declarationDescriptor + if (receiverDescriptor != null && receiverDescriptor != classOrObjectDescriptor) { otherUsageFound = true return@Processor false } diff --git a/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt new file mode 100644 index 00000000000..8fb2663d18a --- /dev/null +++ b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt @@ -0,0 +1,7 @@ +open class A { + internal fun foo() {} + + fun bar(a: A) { + a.foo() + } +} diff --git a/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt.after b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt.after new file mode 100644 index 00000000000..15288b9d991 --- /dev/null +++ b/idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt.after @@ -0,0 +1,7 @@ +open class A { + private fun foo() {} + + fun bar(a: A) { + a.foo() + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 7bde00b60ac..412f24ae908 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -2549,6 +2549,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/JvmFieldOnProperty.kt"); } + @TestMetadata("sameClassFunctionCall.kt") + public void testSameClassFunctionCall() throws Exception { + runTest("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/sameClassFunctionCall.kt"); + } + @TestMetadata("subClassFunctionCall.kt") public void testSubClassFunctionCall() throws Exception { runTest("idea/testData/inspectionsLocal/memberVisibilityCanBePrivate/subClassFunctionCall.kt");