From 87cdc7635ac085026fde546d4ad4ebc2d43e68f4 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 31 Jul 2017 14:42:56 +0300 Subject: [PATCH] Do not suggest "can be private" for elements with given annotations So #KT-19272 Fixed --- .../inspections/MemberVisibilityCanPrivateInspection.kt | 7 +++++++ .../kotlin/idea/inspections/UnusedSymbolInspection.kt | 2 +- .../inspections/memberVisibilityCanBePrivate/_common.kt | 3 +++ .../inspections/memberVisibilityCanBePrivate/test.kt | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 idea/testData/inspections/memberVisibilityCanBePrivate/_common.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt index 7f3e77dbab8..23aa567aa4e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanPrivateInspection.kt @@ -19,6 +19,8 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeInspection.IntentionWrapper import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder +import com.intellij.codeInspection.ex.EntryPointsManager +import com.intellij.codeInspection.ex.EntryPointsManagerBase import com.intellij.psi.PsiElementVisitor import com.intellij.psi.PsiNameIdentifierOwner import com.intellij.psi.PsiReference @@ -84,6 +86,11 @@ class MemberVisibilityCanPrivateInspection : AbstractKotlinInspection() { if (declaration.isOverridable()) return false if (descriptor.hasJvmFieldAnnotation()) return false + val entryPointsManager = EntryPointsManager.getInstance(declaration.project) as EntryPointsManagerBase + if (UnusedSymbolInspection.checkAnnotatedUsingPatterns(descriptor, + with (entryPointsManager) { + additionalAnnotations + ADDITIONAL_ANNOTATIONS + })) return false val psiSearchHelper = PsiSearchHelper.SERVICE.getInstance(declaration.project) val useScope = declaration.useScope diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 79eb91c7400..927cbee795f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -113,7 +113,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { } // variation of IDEA's AnnotationUtil.checkAnnotatedUsingPatterns() - private fun checkAnnotatedUsingPatterns(annotated: Annotated, annotationPatterns: Collection): Boolean { + fun checkAnnotatedUsingPatterns(annotated: Annotated, annotationPatterns: Collection): Boolean { val annotationsPresent = annotated.annotations.mapNotNull { it.fqName?.asString() } if (annotationsPresent.isEmpty()) return false diff --git a/idea/testData/inspections/memberVisibilityCanBePrivate/_common.kt b/idea/testData/inspections/memberVisibilityCanBePrivate/_common.kt new file mode 100644 index 00000000000..0484e4c2f15 --- /dev/null +++ b/idea/testData/inspections/memberVisibilityCanBePrivate/_common.kt @@ -0,0 +1,3 @@ +package test.anno + +public annotation class EntryPoint \ No newline at end of file diff --git a/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt b/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt index 5371137015d..d47f5708439 100644 --- a/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt +++ b/idea/testData/inspections/memberVisibilityCanBePrivate/test.kt @@ -205,3 +205,7 @@ fun withLocal(): Int { val local = Local(42) return local.res() } + +class Math { + @test.anno.EntryPoint fun fact(n: Int) = if (n < 2) 1 else n * fact(n - 1) +}