From d1155070a7fa06eb1b8629c3b6db3cf0609737a5 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 6 Jun 2018 14:45:46 +0300 Subject: [PATCH] Do not report "can be private" on expect or actual declarations So #KT-24374 Fixed So #KT-24537 Fixed --- .../MemberVisibilityCanBePrivateInspection.kt | 8 ++++---- .../inspections/memberVisibilityCanBePrivate/test.kt | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt index bfe48458404..eceddea8eb6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt @@ -39,12 +39,11 @@ import org.jetbrains.kotlin.idea.refactoring.isConstructorDeclaredProperty import org.jetbrains.kotlin.idea.search.isCheapEnoughToSearchConsideringOperators import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope +import org.jetbrains.kotlin.idea.util.isEffectivelyActual +import org.jetbrains.kotlin.idea.util.isExpectDeclaration import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject -import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.psi.psiUtil.isPrivate -import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier +import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmFieldAnnotation class MemberVisibilityCanBePrivateInspection : AbstractKotlinInspection() { @@ -76,6 +75,7 @@ class MemberVisibilityCanBePrivateInspection : AbstractKotlinInspection() { private fun canBePrivate(declaration: KtNamedDeclaration): Boolean { if (declaration.hasModifier(KtTokens.PRIVATE_KEYWORD) || declaration.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return false + if (declaration.hasActualModifier() || declaration.isExpectDeclaration()) return false val descriptor = (declaration.toDescriptor() as? DeclarationDescriptorWithVisibility) ?: return false when (descriptor.effectiveVisibility()) { diff --git a/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt b/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt index d47f5708439..8c1a879bfed 100644 --- a/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt +++ b/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt @@ -209,3 +209,13 @@ fun withLocal(): Int { class Math { @test.anno.EntryPoint fun fact(n: Int) = if (n < 2) 1 else n * fact(n - 1) } + +expect class Expect { + fun foo() + val bar: Int +} + +actual class Actual { + actual fun foo() {} + actual val bar = 42 +}