Transform VisibilityError diagnostic for callable references to further report it on the corresponding argument of a base call

^KT-46437 Fixed
This commit is contained in:
Victor Petukhov
2021-10-04 19:45:20 +03:00
parent e34b2d1850
commit 02d06b6390
10 changed files with 76 additions and 0 deletions
@@ -8,6 +8,8 @@ package org.jetbrains.kotlin.resolve.calls.components
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder
import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstitutor
import org.jetbrains.kotlin.resolve.calls.model.*
import org.jetbrains.kotlin.resolve.calls.tower.VisibilityError
import org.jetbrains.kotlin.resolve.calls.tower.VisibilityErrorOnArgument
import org.jetbrains.kotlin.resolve.calls.tower.isInapplicable
class CallableReferenceArgumentResolver(val callableReferenceOverloadConflictResolver: CallableReferenceOverloadConflictResolver) {
@@ -43,6 +45,7 @@ class CallableReferenceArgumentResolver(val callableReferenceOverloadConflictRes
chosenCandidate.diagnostics.forEach {
val transformedDiagnostic = when (it) {
is CompatibilityWarning -> CompatibilityWarningOnArgument(argument, it.candidate)
is VisibilityError -> VisibilityErrorOnArgument(argument, it.invisibleMember)
else -> it
}
diagnosticsHolder.addDiagnostic(transformedDiagnostic)
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintSystemError
import org.jetbrains.kotlin.resolve.calls.model.DiagnosticReporter
import org.jetbrains.kotlin.resolve.calls.model.KotlinCallArgument
import org.jetbrains.kotlin.resolve.calls.model.KotlinCallDiagnostic
import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability.*
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
@@ -111,6 +112,15 @@ class VisibilityError(val invisibleMember: DeclarationDescriptorWithVisibility)
}
}
class VisibilityErrorOnArgument(
val argument: KotlinCallArgument,
val invisibleMember: DeclarationDescriptorWithVisibility
) : ResolutionDiagnostic(RUNTIME_ERROR) {
override fun report(reporter: DiagnosticReporter) {
reporter.onCallArgument(argument, this)
}
}
class NestedClassViaInstanceReference(val classDescriptor: ClassDescriptor) : ResolutionDiagnostic(IMPOSSIBLE_TO_GENERATE)
class InnerClassViaStaticReference(val classDescriptor: ClassDescriptor) : ResolutionDiagnostic(IMPOSSIBLE_TO_GENERATE)
class UnsupportedInnerClassCall(val message: String) : ResolutionDiagnostic(IMPOSSIBLE_TO_GENERATE)