Fix presence of Deprecated hidden annotation for reference arguments

#KT-40234 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2020-07-13 01:42:19 +03:00
parent c2e0cd60d7
commit 678b76cab1
16 changed files with 217 additions and 13 deletions
@@ -70,6 +70,18 @@ class KotlinResolutionStatelessCallbacksImpl(
kotlinCall is PSIKotlinCallImpl && kotlinCall.psiCall.isCallWithSuperReceiver(),
)
override fun isHiddenInResolution(
descriptor: DeclarationDescriptor,
kotlinCallArgument: KotlinCallArgument,
resolutionCallbacks: KotlinResolutionCallbacks
): Boolean =
deprecationResolver.isHiddenInResolution(
descriptor,
kotlinCallArgument.psiCallArgument.psiExpression,
(resolutionCallbacks as? KotlinResolutionCallbacksImpl)?.trace?.bindingContext,
isSuperCall = false,
)
override fun isSuperExpression(receiver: SimpleKotlinCallArgument?): Boolean =
receiver?.psiExpression is KtSuperExpression
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.Call
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.SinceKotlinAccessibility
import org.jetbrains.kotlin.resolve.calls.checkers.isOperatorMod
@@ -64,6 +65,14 @@ class DeprecationResolver(
call: Call? = null,
bindingContext: BindingContext? = null,
isSuperCall: Boolean = false
): Boolean =
isHiddenInResolution(descriptor, call?.callElement, bindingContext, isSuperCall)
fun isHiddenInResolution(
descriptor: DeclarationDescriptor,
callElement: KtElement?,
bindingContext: BindingContext?,
isSuperCall: Boolean
): Boolean {
if (descriptor is FunctionDescriptor) {
if (descriptor.isHiddenToOvercomeSignatureClash) return true
@@ -74,10 +83,10 @@ class DeprecationResolver(
if (sinceKotlinAccessibility is SinceKotlinAccessibility.NotAccessible) return true
if (sinceKotlinAccessibility is SinceKotlinAccessibility.NotAccessibleButWasExperimental) {
if (call != null && bindingContext != null) {
if (callElement != null && bindingContext != null) {
return with(ExperimentalUsageChecker) {
sinceKotlinAccessibility.markerClasses.any { classDescriptor ->
!call.callElement.isExperimentalityAccepted(classDescriptor.fqNameSafe, languageVersionSettings, bindingContext)
!callElement.isExperimentalityAccepted(classDescriptor.fqNameSafe, languageVersionSettings, bindingContext)
}
}
}