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))
}
}
@@ -26,4 +26,31 @@ class WithPrivateCompanion {
@JvmStatic
fun staticFunction() {}
}
}
}
class WithPublicCompanion {
companion object {
@JvmStatic
val staticVal1: Int = 42
val staticVal2: Int
@JvmStatic get() = 42
@get:JvmStatic
val staticVal3: Int = 42
@JvmStatic
var staticVar1: Int = 42
var staticVar2: Int
@JvmStatic get() = 42
@JvmStatic set(value) {}
@get: JvmStatic
@set: JvmStatic
var staticVar3: Int = 42
@JvmStatic
fun staticFunction() {}
}
}
@@ -26,4 +26,31 @@ class WithPrivateCompanion {
<!JVM_STATIC_IN_PRIVATE_COMPANION!>@JvmStatic<!>
fun staticFunction() {}
}
}
}
class WithPublicCompanion {
companion object {
@JvmStatic
val staticVal1: Int = 42
val staticVal2: Int
@JvmStatic get() = 42
@get:JvmStatic
val staticVal3: Int = 42
@JvmStatic
var staticVar1: Int = 42
var staticVar2: Int
@JvmStatic get() = 42
@JvmStatic set(value) {}
@get: JvmStatic
@set: JvmStatic
var staticVar3: Int = 42
@JvmStatic
fun staticFunction() {}
}
}
@@ -20,3 +20,24 @@ public final class WithPrivateCompanion {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class WithPublicCompanion {
public constructor WithPublicCompanion()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmStatic public final val staticVal1: kotlin.Int = 42
@get:kotlin.jvm.JvmStatic public final val staticVal2: kotlin.Int
@get:kotlin.jvm.JvmStatic public final val staticVal3: kotlin.Int = 42
@kotlin.jvm.JvmStatic public final var staticVar1: kotlin.Int
@get:kotlin.jvm.JvmStatic @set:kotlin.jvm.JvmStatic public final var staticVar2: kotlin.Int
@get:kotlin.jvm.JvmStatic @set:kotlin.jvm.JvmStatic public final var staticVar3: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmStatic public final fun staticFunction(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}