[FE] Assume that effective visibility of sealed class constructor is internal
#KT-45033 Fixed #KT-45043
This commit is contained in:
committed by
TeamCityServer
parent
b08eb6cf4c
commit
88c43e7f7b
+12
@@ -24313,6 +24313,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/sealed/inheritorInDifferentModule.kt");
|
runTest("compiler/testData/diagnostics/tests/sealed/inheritorInDifferentModule.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("internalTypeInConstructor.kt")
|
||||||
|
public void testInternalTypeInConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt44316.kt")
|
@TestMetadata("kt44316.kt")
|
||||||
public void testKt44316() throws Exception {
|
public void testKt44316() throws Exception {
|
||||||
@@ -24433,6 +24439,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/sealed/OperationWhen.kt");
|
runTest("compiler/testData/diagnostics/tests/sealed/OperationWhen.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("privateTypeInConstructor.kt")
|
||||||
|
public void testPrivateTypeInConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("protectedConstructors_disabled.kt")
|
@TestMetadata("protectedConstructors_disabled.kt")
|
||||||
public void testProtectedConstructors_disabled() throws Exception {
|
public void testProtectedConstructors_disabled() throws Exception {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory3
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory3
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors.*
|
import org.jetbrains.kotlin.diagnostics.Errors.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.kotlin.types.isError
|
import org.jetbrains.kotlin.types.isError
|
||||||
|
|
||||||
@@ -80,7 +81,10 @@ class ExposedVisibilityChecker(private val trace: BindingTrace? = null) {
|
|||||||
// for checking situation with modified basic visibility
|
// for checking situation with modified basic visibility
|
||||||
visibility: DescriptorVisibility = functionDescriptor.visibility
|
visibility: DescriptorVisibility = functionDescriptor.visibility
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val functionVisibility = functionDescriptor.effectiveVisibility(visibility)
|
var functionVisibility = functionDescriptor.effectiveVisibility(visibility)
|
||||||
|
if (functionDescriptor is ConstructorDescriptor && functionDescriptor.constructedClass.isSealed() && function.visibilityModifier() == null) {
|
||||||
|
functionVisibility = EffectiveVisibility.Private
|
||||||
|
}
|
||||||
var result = true
|
var result = true
|
||||||
if (function !is KtConstructor<*>) {
|
if (function !is KtConstructor<*>) {
|
||||||
val restricting = functionDescriptor.returnType?.leastPermissiveDescriptor(functionVisibility)
|
val restricting = functionDescriptor.returnType?.leastPermissiveDescriptor(functionVisibility)
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// ISSUE: KT-45033
|
||||||
|
// DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
internal class Bar
|
||||||
|
|
||||||
|
sealed class Foo(
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>internal val x: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>y: Bar<!>
|
||||||
|
)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// ISSUE: KT-45033
|
||||||
|
// DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
internal class Bar
|
||||||
|
|
||||||
|
sealed class Foo(
|
||||||
|
internal val x: Bar,
|
||||||
|
y: Bar
|
||||||
|
)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
internal final class Bar {
|
||||||
|
public constructor Bar()
|
||||||
|
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 sealed class Foo {
|
||||||
|
protected constructor Foo(/*0*/ x: Bar, /*1*/ y: Bar)
|
||||||
|
internal final val x: Bar
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// ISSUE: KT-45043
|
||||||
|
// DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
private class Bar
|
||||||
|
|
||||||
|
sealed class SealedFoo(
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>val <!EXPOSED_PROPERTY_TYPE!>x<!>: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>private val y: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>z: Bar<!>
|
||||||
|
)
|
||||||
|
|
||||||
|
abstract class AbstractFoo(
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>val <!EXPOSED_PROPERTY_TYPE!>x<!>: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>private val y: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>z: Bar<!>
|
||||||
|
)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// ISSUE: KT-45043
|
||||||
|
// DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
private class Bar
|
||||||
|
|
||||||
|
sealed class SealedFoo(
|
||||||
|
<!EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR!>val x: Bar<!>,
|
||||||
|
private val y: Bar,
|
||||||
|
z: Bar
|
||||||
|
)
|
||||||
|
|
||||||
|
abstract class AbstractFoo(
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>val x: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>private val y: Bar<!>,
|
||||||
|
<!EXPOSED_PARAMETER_TYPE!>z: Bar<!>
|
||||||
|
)
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public abstract class AbstractFoo {
|
||||||
|
public constructor AbstractFoo(/*0*/ x: Bar, /*1*/ y: Bar, /*2*/ z: Bar)
|
||||||
|
public final val x: Bar
|
||||||
|
private final val y: Bar
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
private final class Bar {
|
||||||
|
public constructor Bar()
|
||||||
|
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 sealed class SealedFoo {
|
||||||
|
protected constructor SealedFoo(/*0*/ x: Bar, /*1*/ y: Bar, /*2*/ z: Bar)
|
||||||
|
public final val x: Bar
|
||||||
|
private final val y: Bar
|
||||||
|
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
|
||||||
|
}
|
||||||
Generated
+12
@@ -24403,6 +24403,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/sealed/inheritorInDifferentModule.kt");
|
runTest("compiler/testData/diagnostics/tests/sealed/inheritorInDifferentModule.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("internalTypeInConstructor.kt")
|
||||||
|
public void testInternalTypeInConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt44316.kt")
|
@TestMetadata("kt44316.kt")
|
||||||
public void testKt44316() throws Exception {
|
public void testKt44316() throws Exception {
|
||||||
@@ -24523,6 +24529,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/sealed/OperationWhen.kt");
|
runTest("compiler/testData/diagnostics/tests/sealed/OperationWhen.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("privateTypeInConstructor.kt")
|
||||||
|
public void testPrivateTypeInConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("protectedConstructors_disabled.kt")
|
@TestMetadata("protectedConstructors_disabled.kt")
|
||||||
public void testProtectedConstructors_disabled() throws Exception {
|
public void testProtectedConstructors_disabled() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user