[FIR] Properly calculate visibilities
`testIntersectionOfPrimitiveBasedFunctions` is fine, because we deprecate this already in ^KT-63243. `CANNOT_INFER_VISIBILITY` is positioned as `DECLARATION_NAME`, just in case we decide for some reason that we do want to report it along with `MANY_*_NOT_IMPLEMENTED`. In that case, we'd get a problem that their bounds overlap, but not completely contain one another. ^KT-63741 Fixed ^KT-59400 Fixed
This commit is contained in:
committed by
Space Team
parent
7056ad5325
commit
8f8c7fe7cf
+7
@@ -2718,6 +2718,13 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
|||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
add(FirErrors.CANNOT_INFER_VISIBILITY) { firDiagnostic ->
|
||||||
|
CannotInferVisibilityImpl(
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a),
|
||||||
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesImpl(
|
MultipleDefaultsInheritedFromSupertypesImpl(
|
||||||
firDiagnostic.a,
|
firDiagnostic.a,
|
||||||
|
|||||||
+5
@@ -1927,6 +1927,11 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
|||||||
val containingClassName: Name
|
val containingClassName: Name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface CannotInferVisibility : KtFirDiagnostic<KtDeclaration> {
|
||||||
|
override val diagnosticClass get() = CannotInferVisibility::class
|
||||||
|
val callable: KtCallableSymbol
|
||||||
|
}
|
||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class
|
||||||
val name: Name
|
val name: Name
|
||||||
|
|||||||
+6
@@ -2315,6 +2315,12 @@ internal class CannotChangeAccessPrivilegeImpl(
|
|||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege
|
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege
|
||||||
|
|
||||||
|
internal class CannotInferVisibilityImpl(
|
||||||
|
override val callable: KtCallableSymbol,
|
||||||
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
|
token: KtLifetimeToken,
|
||||||
|
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.CannotInferVisibility
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesImpl(
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
|||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
@@ -18,11 +18,11 @@ public open [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|F
|
|||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: R|T & Any|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: R|T & Any|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverrideFunctionSymbol second/B.foo), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverrideFunctionSymbol second/B.foo), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): <implicit>
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirNamedFunctionSymbol second/B.foo, FirNamedFunctionSymbol second/B.foo]), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirNamedFunctionSymbol second/B.foo, FirNamedFunctionSymbol second/B.foo]), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> T}, baseSymbol=FirNamedFunctionSymbol second/C.foo), SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> T}, baseSymbol=FirNamedFunctionSymbol second/C.foo), SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
||||||
|
|
||||||
@@ -14,11 +14,11 @@ public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalcula
|
|||||||
|
|
||||||
public open [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] x: R|F| = LAZY_EXPRESSION): <implicit> { LAZY_BLOCK }
|
public open [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] x: R|F| = LAZY_EXPRESSION): <implicit> { LAZY_BLOCK }
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverridePropertySymbol second/B.bar), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverridePropertySymbol second/B.bar), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: <implicit>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirPropertySymbol second/B.bar, FirPropertySymbol second/B.bar]), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirPropertySymbol second/B.bar, FirPropertySymbol second/B.bar]), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: <implicit>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
@@ -18,11 +18,11 @@ public open [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|F
|
|||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: R|T & Any|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: R|T & Any|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverrideFunctionSymbol second/B.foo), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverrideFunctionSymbol second/B.foo), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String|): <implicit>
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirNamedFunctionSymbol second/B.foo, FirNamedFunctionSymbol second/B.foo]), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirNamedFunctionSymbol second/B.foo, FirNamedFunctionSymbol second/B.foo]), IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> T}, baseSymbol=FirNamedFunctionSymbol second/C.foo), SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> T}, baseSymbol=FirNamedFunctionSymbol second/C.foo), SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): <implicit>
|
||||||
|
|
||||||
@@ -14,11 +14,11 @@ public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalcula
|
|||||||
|
|
||||||
public open [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] x: R|F| = LAZY_EXPRESSION): <implicit> { LAZY_BLOCK }
|
public open [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] x: R|F| = LAZY_EXPRESSION): <implicit> { LAZY_BLOCK }
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverridePropertySymbol second/B.bar), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopySubstitution(substitutor={T -> @R|second/Anno|(str = <strcat>(String(object ), R|second/constant|)) kotlin/String}, baseSymbol=FirIntersectionOverridePropertySymbol second/B.bar), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/B.bar] var bar: <implicit>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirPropertySymbol second/B.bar, FirPropertySymbol second/B.bar]), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: <implicit>
|
public? open override [ResolvedTo(STATUS)] [CallableCopyDeferredReturnTypeCalculationKey=CallableCopyIntersection(mostSpecific=[FirPropertySymbol second/B.bar, FirPropertySymbol second/B.bar]), IntersectionOverrideOriginalKey=second/B.bar, SubstitutedOverrideOriginalKey=second/C.bar] var bar: <implicit>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
public? open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
public? open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
public open override [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public? open override [ResolvedTo(BODY_RESOLVE)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
public open override [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
public open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
public? open override [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
^foo Q|kotlin/Unit|
|
^foo Q|kotlin/Unit|
|
||||||
}
|
}
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
public? open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/B.foo] fun foo([ResolvedTo(STATUS)] x: R|@R|second/Anno|(str = <strcat>(String(super ), R|second/constant|)) kotlin/String|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
public? open override [ResolvedTo(STATUS)] [IntersectionOverrideOriginalKey=second/B.foo, SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
public open override [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
public open override [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=second/C.foo] fun foo([ResolvedTo(STATUS)] x: R|T|): R|kotlin/Unit|
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -1059,6 +1059,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("phantomIntersections.kt")
|
||||||
|
public void testPhantomIntersections() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/phantomIntersections.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("prefixIncReturnType.kt")
|
@TestMetadata("prefixIncReturnType.kt")
|
||||||
public void testPrefixIncReturnType() throws Exception {
|
public void testPrefixIncReturnType() throws Exception {
|
||||||
@@ -28954,12 +28960,6 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@TestMetadata("kt2491.kt")
|
|
||||||
public void testKt2491() throws Exception {
|
|
||||||
runTest("compiler/testData/diagnostics/tests/override/kt2491.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt4763.kt")
|
@TestMetadata("kt4763.kt")
|
||||||
public void testKt4763() throws Exception {
|
public void testKt4763() throws Exception {
|
||||||
|
|||||||
+6
-6
@@ -1059,6 +1059,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("phantomIntersections.kt")
|
||||||
|
public void testPhantomIntersections() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/phantomIntersections.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("prefixIncReturnType.kt")
|
@TestMetadata("prefixIncReturnType.kt")
|
||||||
public void testPrefixIncReturnType() throws Exception {
|
public void testPrefixIncReturnType() throws Exception {
|
||||||
@@ -28954,12 +28960,6 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@TestMetadata("kt2491.kt")
|
|
||||||
public void testKt2491() throws Exception {
|
|
||||||
runTest("compiler/testData/diagnostics/tests/override/kt2491.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt4763.kt")
|
@TestMetadata("kt4763.kt")
|
||||||
public void testKt4763() throws Exception {
|
public void testKt4763() throws Exception {
|
||||||
|
|||||||
+6
-6
@@ -1059,6 +1059,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("phantomIntersections.kt")
|
||||||
|
public void testPhantomIntersections() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/phantomIntersections.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("prefixIncReturnType.kt")
|
@TestMetadata("prefixIncReturnType.kt")
|
||||||
public void testPrefixIncReturnType() throws Exception {
|
public void testPrefixIncReturnType() throws Exception {
|
||||||
@@ -26700,12 +26706,6 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@TestMetadata("kt2491.kt")
|
|
||||||
public void testKt2491() throws Exception {
|
|
||||||
runTest("compiler/testData/diagnostics/tests/override/kt2491.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt4763.kt")
|
@TestMetadata("kt4763.kt")
|
||||||
public void testKt4763() throws Exception {
|
public void testKt4763() throws Exception {
|
||||||
|
|||||||
+6
-6
@@ -1059,6 +1059,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("phantomIntersections.kt")
|
||||||
|
public void testPhantomIntersections() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/phantomIntersections.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("prefixIncReturnType.kt")
|
@TestMetadata("prefixIncReturnType.kt")
|
||||||
public void testPrefixIncReturnType() throws Exception {
|
public void testPrefixIncReturnType() throws Exception {
|
||||||
@@ -26706,12 +26712,6 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@TestMetadata("kt2491.kt")
|
|
||||||
public void testKt2491() throws Exception {
|
|
||||||
runTest("compiler/testData/diagnostics/tests/override/kt2491.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt4763.kt")
|
@TestMetadata("kt4763.kt")
|
||||||
public void testKt4763() throws Exception {
|
public void testKt4763() throws Exception {
|
||||||
|
|||||||
+3
@@ -926,6 +926,9 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
parameter<FirCallableSymbol<*>>("overridden")
|
parameter<FirCallableSymbol<*>>("overridden")
|
||||||
parameter<Name>("containingClassName")
|
parameter<Name>("containingClassName")
|
||||||
}
|
}
|
||||||
|
val CANNOT_INFER_VISIBILITY by error<KtDeclaration>(PositioningStrategy.DECLARATION_NAME) {
|
||||||
|
parameter<FirCallableSymbol<*>>("callable")
|
||||||
|
}
|
||||||
|
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
||||||
parameter<Name>("name")
|
parameter<Name>("name")
|
||||||
|
|||||||
@@ -517,6 +517,7 @@ object FirErrors {
|
|||||||
val DATA_CLASS_OVERRIDE_DEFAULT_VALUES: KtDiagnosticFactory2<FirCallableSymbol<*>, FirClassSymbol<*>> by error2<KtElement, FirCallableSymbol<*>, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
val DATA_CLASS_OVERRIDE_DEFAULT_VALUES: KtDiagnosticFactory2<FirCallableSymbol<*>, FirClassSymbol<*>> by error2<KtElement, FirCallableSymbol<*>, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
||||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val CANNOT_WEAKEN_ACCESS_PRIVILEGE: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val CANNOT_CHANGE_ACCESS_PRIVILEGE: KtDiagnosticFactory3<Visibility, FirCallableSymbol<*>, Name> by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
|
val CANNOT_INFER_VISIBILITY: KtDiagnosticFactory1<FirCallableSymbol<*>> by error1<KtDeclaration, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES: KtDiagnosticFactory3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES: KtDiagnosticFactory3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE: KtDiagnosticFactory3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE: KtDiagnosticFactory3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION: KtDiagnosticFactoryForDeprecation3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by deprecationError3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION: KtDiagnosticFactoryForDeprecation3<Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>> by deprecationError3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||||
|
|||||||
+1
@@ -335,6 +335,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
|
|||||||
"DATA_CLASS_OVERRIDE_DEFAULT_VALUES",
|
"DATA_CLASS_OVERRIDE_DEFAULT_VALUES",
|
||||||
"CANNOT_WEAKEN_ACCESS_PRIVILEGE",
|
"CANNOT_WEAKEN_ACCESS_PRIVILEGE",
|
||||||
"CANNOT_CHANGE_ACCESS_PRIVILEGE",
|
"CANNOT_CHANGE_ACCESS_PRIVILEGE",
|
||||||
|
"CANNOT_INFER_VISIBILITY",
|
||||||
"MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES",
|
"MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES",
|
||||||
"MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE",
|
"MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE",
|
||||||
"TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS",
|
"TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS",
|
||||||
|
|||||||
+10
-5
@@ -25,10 +25,6 @@ import org.jetbrains.kotlin.fir.declarations.CallToPotentiallyHiddenSymbolResult
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.originalOrSelf
|
import org.jetbrains.kotlin.fir.originalOrSelf
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isOverride
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
@@ -46,7 +42,6 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
|||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.fir.types.typeContext
|
import org.jetbrains.kotlin.fir.types.typeContext
|
||||||
import org.jetbrains.kotlin.fir.visibilityChecker
|
import org.jetbrains.kotlin.fir.visibilityChecker
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||||
import org.jetbrains.kotlin.resolve.deprecation.SimpleDeprecationInfo
|
import org.jetbrains.kotlin.resolve.deprecation.SimpleDeprecationInfo
|
||||||
@@ -183,6 +178,16 @@ sealed class FirOverrideChecker(mppKind: MppCheckerKind) : FirAbstractOverrideCh
|
|||||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
) {
|
) {
|
||||||
|
if (visibility == Visibilities.Unknown) {
|
||||||
|
// MANY_*_NOT_IMPLEMENTED implies CANNOT_INFER_VISIBILITY as per KT-63741
|
||||||
|
val isManyNotImplementedDiagnosticReported = overriddenSymbols.count { !it.isAbstract } != 1
|
||||||
|
val isSimpleToReasonAboutSituation = overriddenSymbols.none { it.isIntersectionOverride }
|
||||||
|
if (!(isManyNotImplementedDiagnosticReported && isSimpleToReasonAboutSituation)) {
|
||||||
|
reporter.reportOn(source, FirErrors.CANNOT_INFER_VISIBILITY, this, context)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (overriddenSymbols.isEmpty()) return
|
if (overriddenSymbols.isEmpty()) return
|
||||||
val visibilities = overriddenSymbols.map {
|
val visibilities = overriddenSymbols.map {
|
||||||
it to it.visibility
|
it to it.visibility
|
||||||
|
|||||||
+6
@@ -124,6 +124,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_BE_IMPORTE
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHECK_FOR_ERASED
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_CHECK_FOR_ERASED
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_INFER_PARAMETER_TYPE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_INFER_PARAMETER_TYPE
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_INFER_VISIBILITY
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_OVERRIDE_INVISIBLE_MEMBER
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_OVERRIDE_INVISIBLE_MEMBER
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT
|
||||||
@@ -1652,6 +1653,11 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
|||||||
DECLARATION_NAME,
|
DECLARATION_NAME,
|
||||||
TO_STRING
|
TO_STRING
|
||||||
)
|
)
|
||||||
|
map.put(
|
||||||
|
CANNOT_INFER_VISIBILITY,
|
||||||
|
"Cannot infer visibility for ''{0}''. Please specify it explicitly",
|
||||||
|
DECLARATION_NAME,
|
||||||
|
)
|
||||||
|
|
||||||
map.put(
|
map.put(
|
||||||
ABSTRACT_MEMBER_NOT_IMPLEMENTED,
|
ABSTRACT_MEMBER_NOT_IMPLEMENTED,
|
||||||
|
|||||||
+40
-4
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
|
|||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
import kotlin.contracts.ExperimentalContracts
|
import kotlin.contracts.ExperimentalContracts
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
||||||
@@ -321,17 +322,52 @@ class FirTypeIntersectionScopeContext(
|
|||||||
|
|
||||||
private fun <D : FirCallableSymbol<*>> chooseIntersectionVisibility(
|
private fun <D : FirCallableSymbol<*>> chooseIntersectionVisibility(
|
||||||
extractedOverrides: Collection<MemberWithBaseScope<D>>
|
extractedOverrides: Collection<MemberWithBaseScope<D>>
|
||||||
): Visibility {
|
): Visibility = chooseIntersectionVisibilityOrNull(extractedOverrides) ?: Visibilities.Unknown
|
||||||
|
|
||||||
|
private fun <D : FirCallableSymbol<*>> chooseIntersectionVisibilityOrNull(
|
||||||
|
extractedOverrides: Collection<MemberWithBaseScope<D>>
|
||||||
|
): Visibility? {
|
||||||
|
val overridesWithoutIntersections = extractedOverrides.flatMap { it.flattenIntersectionsRecursively() }
|
||||||
|
val nonSubsumed = overridesWithoutIntersections.nonSubsumed().filterOutDuplicates()
|
||||||
|
val nonAbstract = nonSubsumed.filter {
|
||||||
|
require(it.member.rawStatus is FirResolvedDeclarationStatus) {
|
||||||
|
"We expect that to be true already, but we can't yet call resolvedStatus"
|
||||||
|
}
|
||||||
|
// Kotlin's Cloneable interface contains phantom `protected open fun clone()`.
|
||||||
|
it.member.rawStatus.modality != Modality.ABSTRACT && it.member.callableId != StandardClassIds.Callables.clone
|
||||||
|
}
|
||||||
|
val allAreAbstract = nonAbstract.isEmpty()
|
||||||
|
|
||||||
|
if (allAreAbstract) {
|
||||||
|
return findMaxVisibilityOrNull(nonSubsumed)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nonAbstract.size >= 2) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return nonAbstract.single().member.rawStatus.visibility
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun <D : FirCallableSymbol<*>> List<MemberWithBaseScope<D>>.filterOutDuplicates(): List<MemberWithBaseScope<D>> {
|
||||||
|
val uniqueSymbols = mutableSetOf<FirCallableSymbol<*>>()
|
||||||
|
return filter { uniqueSymbols.add(it.member.fir.unwrapSubstitutionOverrides().symbol) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun <D : FirCallableSymbol<*>> findMaxVisibilityOrNull(
|
||||||
|
extractedOverrides: Collection<MemberWithBaseScope<D>>
|
||||||
|
): Visibility? {
|
||||||
var maxVisibility: Visibility = Visibilities.Private
|
var maxVisibility: Visibility = Visibilities.Private
|
||||||
|
|
||||||
for ((override) in extractedOverrides) {
|
for ((override) in extractedOverrides) {
|
||||||
val visibility = (override.fir as FirMemberDeclaration).visibility
|
val visibility = (override.fir as FirMemberDeclaration).visibility
|
||||||
// TODO: There is more complex logic at org.jetbrains.kotlin.resolve.OverridingUtil.resolveUnknownVisibilityForMember
|
val compare = Visibilities.compare(visibility, maxVisibility) ?: return null
|
||||||
// TODO: and org.jetbrains.kotlin.resolve.OverridingUtil.findMaxVisibility
|
|
||||||
val compare = Visibilities.compare(visibility, maxVisibility) ?: return Visibilities.DEFAULT_VISIBILITY
|
|
||||||
if (compare > 0) {
|
if (compare > 0) {
|
||||||
maxVisibility = visibility
|
maxVisibility = visibility
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return maxVisibility
|
return maxVisibility
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ fun Visibility.toEffectiveVisibility(
|
|||||||
}
|
}
|
||||||
Visibilities.Public -> EffectiveVisibility.Public
|
Visibilities.Public -> EffectiveVisibility.Public
|
||||||
Visibilities.Local -> EffectiveVisibility.Local
|
Visibilities.Local -> EffectiveVisibility.Local
|
||||||
|
// Unknown visibility should not provoke errors,
|
||||||
|
// because they can naturally appear when intersection
|
||||||
|
// overrides' bases have inconsistent forms.
|
||||||
|
Visibilities.Unknown -> EffectiveVisibility.Unknown
|
||||||
else -> errorWithAttachment("Unknown visibility: $this") {
|
else -> errorWithAttachment("Unknown visibility: $this") {
|
||||||
withFirLookupTagEntry("owner", owner)
|
withFirLookupTagEntry("owner", owner)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
E:
|
E:
|
||||||
[IntersectionOverride]: public open override fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /E [id: 0]
|
[IntersectionOverride]: public? open override fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /E [id: 0]
|
||||||
[SubstitutionOverride(DeclarationSite)]: public open override fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1]
|
[SubstitutionOverride(DeclarationSite)]: public open override fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1]
|
||||||
[SubstitutionOverride(DeclarationSite)]: public open override fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1]
|
[SubstitutionOverride(DeclarationSite)]: public open override fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1]
|
||||||
[Enhancement]: public open fun foo(x: R|ft<T & Any, T?>|): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
|
[Enhancement]: public open fun foo(x: R|ft<T & Any, T?>|): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
interface T {
|
|
||||||
public fun foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
open class C {
|
|
||||||
protected fun foo() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
class D : C(), T
|
|
||||||
|
|
||||||
val obj: C = object : C(), T {}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
interface T {
|
|
||||||
public fun foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
open class C {
|
|
||||||
protected fun foo() {}
|
|
||||||
}
|
|
||||||
|
|
||||||
class <!CANNOT_INFER_VISIBILITY!>D<!> : C(), T
|
|
||||||
|
|
||||||
val obj: C = <!CANNOT_INFER_VISIBILITY!>object<!> : C(), T {}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package
|
|
||||||
|
|
||||||
public val obj: C
|
|
||||||
|
|
||||||
public open class C {
|
|
||||||
public constructor C()
|
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
||||||
protected final fun foo(): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
|
|
||||||
public final class D : C, T {
|
|
||||||
public constructor D()
|
|
||||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
||||||
public final override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit
|
|
||||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
||||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface T {
|
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
||||||
public abstract fun foo(): kotlin.Unit
|
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// ISSUES: KT-2491, KT-4785, KT-63741, KT-59400
|
||||||
|
|
||||||
interface T {
|
interface T {
|
||||||
fun foo()
|
fun foo()
|
||||||
}
|
}
|
||||||
@@ -6,6 +8,6 @@ open class C {
|
|||||||
protected fun foo() {}
|
protected fun foo() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class E : C(), T
|
class <!CANNOT_WEAKEN_ACCESS_PRIVILEGE!>E<!> : C(), T
|
||||||
|
|
||||||
val z: T = object : C(), T {}
|
val z: T = <!CANNOT_WEAKEN_ACCESS_PRIVILEGE!>object<!> : C(), T {}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// ISSUES: KT-2491, KT-4785, KT-63741, KT-59400
|
||||||
|
|
||||||
interface T {
|
interface T {
|
||||||
fun foo()
|
fun foo()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
|
// ISSUE: KT-63741
|
||||||
|
|
||||||
|
interface AreaInstance {
|
||||||
|
fun getExtensionArea(): Int
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ComponentManager : AreaInstance {
|
||||||
|
override fun getExtensionArea() = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Project : ComponentManager, AreaInstance
|
||||||
|
|
||||||
|
class MockProject : ComponentManager, Project
|
||||||
Generated
+6
-6
@@ -1059,6 +1059,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
runTest("compiler/testData/diagnostics/tests/PackageQualified.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("phantomIntersections.kt")
|
||||||
|
public void testPhantomIntersections() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/phantomIntersections.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("prefixIncReturnType.kt")
|
@TestMetadata("prefixIncReturnType.kt")
|
||||||
public void testPrefixIncReturnType() throws Exception {
|
public void testPrefixIncReturnType() throws Exception {
|
||||||
@@ -28954,12 +28960,6 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
runTest("compiler/testData/diagnostics/tests/override/kt2052.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@TestMetadata("kt2491.kt")
|
|
||||||
public void testKt2491() throws Exception {
|
|
||||||
runTest("compiler/testData/diagnostics/tests/override/kt2491.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt4763.kt")
|
@TestMetadata("kt4763.kt")
|
||||||
public void testKt4763() throws Exception {
|
public void testKt4763() throws Exception {
|
||||||
|
|||||||
@@ -14,18 +14,18 @@ import org.jetbrains.kotlin.types.model.TypeConstructorMarker
|
|||||||
sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = false, val privateApi: Boolean = false) {
|
sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = false, val privateApi: Boolean = false) {
|
||||||
override fun toString() = name
|
override fun toString() = name
|
||||||
|
|
||||||
// Public
|
// Public Unknown
|
||||||
// /--/ | \-------------\
|
// /--/ | \-------------\ /
|
||||||
// Protected(Base) | \
|
// Protected(Base) | \ /
|
||||||
// | Protected(Other) Internal = PackagePrivate
|
// | Protected(Other) Internal = PackagePrivate /
|
||||||
// Protected(Derived) | / \
|
// Protected(Derived) | / \ /
|
||||||
// | | / InternalProtected(Base)
|
// | | / InternalProtected(Base) /
|
||||||
// ProtectedBound / \
|
// ProtectedBound / \ /
|
||||||
// \ / /InternalProtected(Derived)
|
// \ / /InternalProtected(Derived) /
|
||||||
// \InternalProtectedBound/
|
// \InternalProtectedBound/ /
|
||||||
// |
|
// | /
|
||||||
// PrivateInFile
|
// PrivateInFile /
|
||||||
// |
|
// |--------------------------------------/
|
||||||
// PrivateInClass = Local
|
// PrivateInClass = Local
|
||||||
|
|
||||||
// Private class (interface) member
|
// Private class (interface) member
|
||||||
@@ -44,6 +44,17 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
override fun toVisibility(): Visibility = Visibilities.Local
|
override fun toVisibility(): Visibility = Visibilities.Local
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reflects CANNOT_INFER_VISIBILITY
|
||||||
|
object Unknown : EffectiveVisibility("unknown") {
|
||||||
|
override fun relation(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): Permissiveness =
|
||||||
|
if (other == Unknown)
|
||||||
|
Permissiveness.SAME
|
||||||
|
else
|
||||||
|
Permissiveness.UNKNOWN
|
||||||
|
|
||||||
|
override fun toVisibility(): Visibility = Visibilities.Unknown
|
||||||
|
}
|
||||||
|
|
||||||
// Private with File container
|
// Private with File container
|
||||||
object PrivateInFile : EffectiveVisibility("private-in-file", privateApi = true) {
|
object PrivateInFile : EffectiveVisibility("private-in-file", privateApi = true) {
|
||||||
override fun relation(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): Permissiveness =
|
override fun relation(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): Permissiveness =
|
||||||
@@ -58,7 +69,11 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
|
|
||||||
object Public : EffectiveVisibility("public", publicApi = true) {
|
object Public : EffectiveVisibility("public", publicApi = true) {
|
||||||
override fun relation(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): Permissiveness =
|
override fun relation(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): Permissiveness =
|
||||||
if (this == other) Permissiveness.SAME else Permissiveness.MORE
|
when (other) {
|
||||||
|
this -> Permissiveness.SAME
|
||||||
|
Unknown -> Permissiveness.UNKNOWN
|
||||||
|
else -> Permissiveness.MORE
|
||||||
|
}
|
||||||
|
|
||||||
override fun toVisibility(): Visibility = Visibilities.Public
|
override fun toVisibility(): Visibility = Visibilities.Public
|
||||||
}
|
}
|
||||||
@@ -71,7 +86,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Public -> Permissiveness.LESS
|
Public -> Permissiveness.LESS
|
||||||
PrivateInClass, PrivateInFile, Local, InternalProtectedBound, is InternalProtected -> Permissiveness.MORE
|
PrivateInClass, PrivateInFile, Local, InternalProtectedBound, is InternalProtected -> Permissiveness.MORE
|
||||||
is InternalOrPackage -> Permissiveness.SAME
|
is InternalOrPackage -> Permissiveness.SAME
|
||||||
ProtectedBound, is Protected -> Permissiveness.UNKNOWN
|
ProtectedBound, is Protected, Unknown -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
||||||
@@ -79,6 +94,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Public -> this
|
Public -> this
|
||||||
PrivateInClass, PrivateInFile, Local, InternalProtectedBound, is InternalOrPackage, is InternalProtected -> other
|
PrivateInClass, PrivateInFile, Local, InternalProtectedBound, is InternalOrPackage, is InternalProtected -> other
|
||||||
is Protected -> InternalProtected(other.containerTypeConstructor)
|
is Protected -> InternalProtected(other.containerTypeConstructor)
|
||||||
|
is Unknown -> Local
|
||||||
ProtectedBound -> InternalProtectedBound
|
ProtectedBound -> InternalProtectedBound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,7 +129,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Permissiveness.SAME, Permissiveness.MORE -> Permissiveness.MORE
|
Permissiveness.SAME, Permissiveness.MORE -> Permissiveness.MORE
|
||||||
Permissiveness.UNKNOWN, Permissiveness.LESS -> Permissiveness.UNKNOWN
|
Permissiveness.UNKNOWN, Permissiveness.LESS -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
is InternalOrPackage -> Permissiveness.UNKNOWN
|
is InternalOrPackage, is Unknown -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
||||||
@@ -130,6 +146,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
else -> InternalProtectedBound
|
else -> InternalProtectedBound
|
||||||
}
|
}
|
||||||
is InternalOrPackage -> InternalProtected(containerTypeConstructor)
|
is InternalOrPackage -> InternalProtected(containerTypeConstructor)
|
||||||
|
is Unknown -> Local
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toVisibility(): Visibility = Visibilities.Protected
|
override fun toVisibility(): Visibility = Visibilities.Protected
|
||||||
@@ -142,7 +159,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Public, is Protected -> Permissiveness.LESS
|
Public, is Protected -> Permissiveness.LESS
|
||||||
PrivateInClass, PrivateInFile, Local, InternalProtectedBound -> Permissiveness.MORE
|
PrivateInClass, PrivateInFile, Local, InternalProtectedBound -> Permissiveness.MORE
|
||||||
ProtectedBound -> Permissiveness.SAME
|
ProtectedBound -> Permissiveness.SAME
|
||||||
is InternalOrPackage, is InternalProtected -> Permissiveness.UNKNOWN
|
is InternalOrPackage, is InternalProtected, is Unknown -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
||||||
@@ -150,6 +167,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Public, is Protected -> this
|
Public, is Protected -> this
|
||||||
PrivateInClass, PrivateInFile, Local, ProtectedBound, InternalProtectedBound -> other
|
PrivateInClass, PrivateInFile, Local, ProtectedBound, InternalProtectedBound -> other
|
||||||
is InternalOrPackage, is InternalProtected -> InternalProtectedBound
|
is InternalOrPackage, is InternalProtected -> InternalProtectedBound
|
||||||
|
is Unknown -> Local
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toVisibility(): Visibility = Visibilities.Protected
|
override fun toVisibility(): Visibility = Visibilities.Protected
|
||||||
@@ -184,7 +202,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Permissiveness.SAME, Permissiveness.LESS -> Permissiveness.LESS
|
Permissiveness.SAME, Permissiveness.LESS -> Permissiveness.LESS
|
||||||
Permissiveness.UNKNOWN, Permissiveness.MORE -> Permissiveness.UNKNOWN
|
Permissiveness.UNKNOWN, Permissiveness.MORE -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
ProtectedBound -> Permissiveness.UNKNOWN
|
ProtectedBound, Unknown -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
override fun lowerBound(other: EffectiveVisibility, typeCheckerContextProvider: TypeCheckerProviderContext): EffectiveVisibility =
|
||||||
@@ -197,6 +215,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Permissiveness.UNKNOWN -> InternalProtectedBound
|
Permissiveness.UNKNOWN -> InternalProtectedBound
|
||||||
}
|
}
|
||||||
ProtectedBound -> InternalProtectedBound
|
ProtectedBound -> InternalProtectedBound
|
||||||
|
Unknown -> Local
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toVisibility(): Visibility = Visibilities.Private
|
override fun toVisibility(): Visibility = Visibilities.Private
|
||||||
@@ -209,6 +228,7 @@ sealed class EffectiveVisibility(val name: String, val publicApi: Boolean = fals
|
|||||||
Public, is Protected, is InternalProtected, ProtectedBound, is InternalOrPackage -> Permissiveness.LESS
|
Public, is Protected, is InternalProtected, ProtectedBound, is InternalOrPackage -> Permissiveness.LESS
|
||||||
PrivateInClass, PrivateInFile, Local -> Permissiveness.MORE
|
PrivateInClass, PrivateInFile, Local -> Permissiveness.MORE
|
||||||
InternalProtectedBound -> Permissiveness.SAME
|
InternalProtectedBound -> Permissiveness.SAME
|
||||||
|
Unknown -> Permissiveness.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toVisibility(): Visibility = Visibilities.Private
|
override fun toVisibility(): Visibility = Visibilities.Private
|
||||||
|
|||||||
Reference in New Issue
Block a user