Minor: cover negative cases with test +m

Add case without reported diagnostic on public companion.
Only report diagnostic if @JvmStatic annotation has source in code.

KT-25114
This commit is contained in:
Pavel Kirpichenkov
2020-10-15 18:29:29 +03:00
parent 9669ab1468
commit 04a4f9cde6
4 changed files with 83 additions and 6 deletions
@@ -18,14 +18,16 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class JvmStaticInPrivateCompanionChecker : DeclarationChecker {
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
val containingDeclaration = descriptor.containingDeclaration
descriptor.containingDeclaration.safeAs<ClassDescriptor>()?.takeIf {
it.isCompanionObject && Visibilities.isPrivate(it.visibility.delegate)
} ?: return
if (containingDeclaration !is ClassDescriptor
|| !containingDeclaration.isCompanionObject
|| !Visibilities.isPrivate(containingDeclaration.visibility.delegate)
) return
val jvmStaticAnnotation = descriptor.annotations.findAnnotation(JVM_STATIC_ANNOTATION_FQ_NAME) ?: return
val reportTarget = jvmStaticAnnotation.source.safeAs<KotlinSourceElement>()?.psi ?: declaration
val reportTarget = jvmStaticAnnotation.source.safeAs<KotlinSourceElement>()?.psi ?: return
context.trace.report(JVM_STATIC_IN_PRIVATE_COMPANION.on(reportTarget))
}
}