[FE] KT-50878 Prohibit using contextual declarations without -Xcontext-receivers
This commit is contained in:
committed by
teamcity
parent
c93594331b
commit
a86b4d767e
+5
-4
@@ -19,10 +19,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.*
|
||||
import org.jetbrains.kotlin.resolve.calls.model.*
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.getReceiverValueWithSmartCast
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.*
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.ContextReceiverAmbiguity
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.InfixCallNoInfixModifier
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.InvokeConventionCallNoOperatorModifier
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.VisibilityError
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.*
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isInsideInterface
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastInfo
|
||||
@@ -857,6 +854,10 @@ internal object ErrorDescriptorResolutionPart : ResolutionPart() {
|
||||
internal object CheckContextReceiversResolutionPart : ResolutionPart() {
|
||||
override fun ResolutionCandidate.process(workIndex: Int) {
|
||||
if (candidateDescriptor.contextReceiverParameters.isEmpty()) return
|
||||
if (!callComponents.languageVersionSettings.supportsFeature(LanguageFeature.ContextReceivers)) {
|
||||
addDiagnostic(UnsupportedContextualDeclarationCall())
|
||||
return
|
||||
}
|
||||
val parentLexicalScopes = scopeTower.lexicalScope.parentsWithSelf.filterIsInstance<LexicalScope>()
|
||||
val implicitReceiversGroups = mutableListOf<List<ReceiverValueWithSmartCastInfo>>()
|
||||
for (scope in parentLexicalScopes) {
|
||||
|
||||
@@ -120,6 +120,12 @@ class ContextReceiverAmbiguity : ResolutionDiagnostic(RESOLVED_WITH_ERROR) {
|
||||
}
|
||||
}
|
||||
|
||||
class UnsupportedContextualDeclarationCall : ResolutionDiagnostic(RESOLVED_WITH_ERROR) {
|
||||
override fun report(reporter: DiagnosticReporter) {
|
||||
reporter.onCall(this)
|
||||
}
|
||||
}
|
||||
|
||||
// todo error for this access from nested class
|
||||
class VisibilityError(val invisibleMember: DeclarationDescriptorWithVisibility) : ResolutionDiagnostic(RUNTIME_ERROR) {
|
||||
override fun report(reporter: DiagnosticReporter) {
|
||||
|
||||
Reference in New Issue
Block a user