Effective visibility is now considered private for invisible fake #KT-14469 Fixed
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
// KT-14469: SOE during effective visibility evaluation
|
||||
|
||||
abstract class Base(private val v: String)
|
||||
|
||||
fun bar(arg: String) = arg
|
||||
|
||||
class Derived : Base("123") {
|
||||
|
||||
private <!NOTHING_TO_INLINE!>inline<!> fun foo() {
|
||||
bar(<!INVISIBLE_MEMBER!>v<!>)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package
|
||||
|
||||
public fun bar(/*0*/ arg: kotlin.String): kotlin.String
|
||||
|
||||
public abstract class Base {
|
||||
public constructor Base(/*0*/ v: kotlin.String)
|
||||
private final val v: kotlin.String
|
||||
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 final class Derived : Base {
|
||||
public constructor Derived()
|
||||
invisible_fake final override /*1*/ /*fake_override*/ val v: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
private final inline fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -7198,6 +7198,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("exceptionOnFakeInvisible.kt")
|
||||
public void testExceptionOnFakeInvisible() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/exposed/exceptionOnFakeInvisible.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("functional.kt")
|
||||
public void testFunctional() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/exposed/functional.kt");
|
||||
|
||||
@@ -233,12 +233,13 @@ private fun lowerBound(args: List<EffectiveVisibility>) =
|
||||
if (args.isEmpty()) Public else lowerBound(args.first(), args.subList(1, args.size))
|
||||
|
||||
private fun Visibility.forVisibility(descriptor: ClassDescriptor? = null): EffectiveVisibility = when (this) {
|
||||
Visibilities.PRIVATE, Visibilities.PRIVATE_TO_THIS -> Private
|
||||
Visibilities.PRIVATE, Visibilities.PRIVATE_TO_THIS, Visibilities.INVISIBLE_FAKE -> Private
|
||||
Visibilities.PROTECTED -> Protected(descriptor)
|
||||
Visibilities.INTERNAL -> Internal
|
||||
Visibilities.PUBLIC -> Public
|
||||
Visibilities.LOCAL -> Local
|
||||
else -> this.effectiveVisibility(descriptor)
|
||||
// NB: visibility must be already normalized here, so e.g. no JavaVisibilities are possible at this point
|
||||
else -> throw AssertionError("Visibility $name is not allowed in forVisibility")
|
||||
}
|
||||
|
||||
fun effectiveVisibility(visibility: Visibility, descriptor: ClassDescriptor?) = visibility.forVisibility(descriptor)
|
||||
|
||||
Reference in New Issue
Block a user