Can be private: simplification

Related to KT-22030
This commit is contained in:
Mikhail Glukhikh
2018-06-06 15:16:44 +03:00
parent 7786896e9b
commit 88974ee32b
4 changed files with 23 additions and 7 deletions
@@ -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<KtQualifiedExpression>()?.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
}
@@ -0,0 +1,7 @@
open class A {
<caret>internal fun foo() {}
fun bar(a: A) {
a.foo()
}
}
@@ -0,0 +1,7 @@
open class A {
private fun foo() {}
fun bar(a: A) {
a.foo()
}
}
@@ -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");