KT-30419 Box inline classes in return types of covariant overrides
Use boxed version of an inline class in return type position for covariant and generic-specialized overrides. Also fixes KT-35234 and KT-31585.
This commit is contained in:
+98
@@ -13889,6 +13889,104 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/whenWithSubject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class BoxReturnValueOnOverride extends AbstractBlackBoxCodegenTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInBoxReturnValueOnOverride() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToAny.kt")
|
||||
public void testCovariantOverrideErasedToAny() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToAny.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToInterface.kt")
|
||||
public void testCovariantOverrideErasedToInterface() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToInterface.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToPrimitive.kt")
|
||||
public void testCovariantOverrideErasedToPrimitive() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToPrimitive.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideListVsMutableList.kt")
|
||||
public void testCovariantOverrideListVsMutableList() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideListVsMutableList.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideUnrelatedInterfaces.kt")
|
||||
public void testCovariantOverrideUnrelatedInterfaces() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideUnrelatedInterfaces.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericOverride.kt")
|
||||
public void testGenericOverride() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/genericOverride.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericOverrideSpecialized.kt")
|
||||
public void testGenericOverrideSpecialized() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/genericOverrideSpecialized.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassInOverriddenReturnTypes.kt")
|
||||
public void testInlineClassInOverriddenReturnTypes() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/inlineClassInOverriddenReturnTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt28483.kt")
|
||||
public void testKt28483() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt28483.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt31585.kt")
|
||||
public void testKt31585() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt31585.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt35234.kt")
|
||||
public void testKt35234() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt35234a.kt")
|
||||
public void testKt35234a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes1a.kt")
|
||||
public void testRelatedReturnTypes1a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes1a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes1b.kt")
|
||||
public void testRelatedReturnTypes1b() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes1b.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes2a.kt")
|
||||
public void testRelatedReturnTypes2a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes2a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes2b.kt")
|
||||
public void testRelatedReturnTypes2b() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes2b.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("unrelatedGenerics.kt")
|
||||
public void testUnrelatedGenerics() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/unrelatedGenerics.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/box/inlineClasses/callableReferences")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
@@ -52,7 +52,7 @@ class BridgeTest : TestCase() {
|
||||
return Fun(text)
|
||||
}
|
||||
|
||||
private fun bridge(from: Fun, to: Fun): Bridge<Meth> = Bridge(Meth(from), Meth(to))
|
||||
private fun bridge(from: Fun, to: Fun): Bridge<Meth, Fun> = Bridge(Meth(from), Meth(to), emptySet())
|
||||
|
||||
/**
|
||||
* Constructs a graph out of the given pairs of vertices. First vertex should be a function in the derived class,
|
||||
@@ -125,13 +125,17 @@ class BridgeTest : TestCase() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun doTest(function: Fun, expectedBridges: Set<Bridge<Meth>>) {
|
||||
private fun doTest(function: Fun, expectedBridges: Set<Bridge<Meth, Fun>>) {
|
||||
val actualBridges = generateBridges(function, ::Meth)
|
||||
assert(actualBridges.firstOrNull { it.from == it.to } == null) {
|
||||
assert(actualBridges.all { it.from != it.to }) {
|
||||
"A bridge invoking itself was generated, which makes no sense, since it will result in StackOverflowError" +
|
||||
" once called: $actualBridges"
|
||||
}
|
||||
assertEquals(expectedBridges, actualBridges, "Expected and actual bridge sets differ for function $function")
|
||||
assertEquals(
|
||||
expectedBridges.map { it.from to it.to },
|
||||
actualBridges.map { it.from to it.to },
|
||||
"Expected and actual bridge sets differ for function $function"
|
||||
)
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
+98
@@ -13889,6 +13889,104 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/whenWithSubject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class BoxReturnValueOnOverride extends AbstractLightAnalysisModeTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInBoxReturnValueOnOverride() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToAny.kt")
|
||||
public void testCovariantOverrideErasedToAny() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToAny.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToInterface.kt")
|
||||
public void testCovariantOverrideErasedToInterface() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToInterface.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToPrimitive.kt")
|
||||
public void testCovariantOverrideErasedToPrimitive() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToPrimitive.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideListVsMutableList.kt")
|
||||
public void testCovariantOverrideListVsMutableList() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideListVsMutableList.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideUnrelatedInterfaces.kt")
|
||||
public void testCovariantOverrideUnrelatedInterfaces() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideUnrelatedInterfaces.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericOverride.kt")
|
||||
public void testGenericOverride() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/genericOverride.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericOverrideSpecialized.kt")
|
||||
public void testGenericOverrideSpecialized() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/genericOverrideSpecialized.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassInOverriddenReturnTypes.kt")
|
||||
public void testInlineClassInOverriddenReturnTypes() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/inlineClassInOverriddenReturnTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt28483.kt")
|
||||
public void testKt28483() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt28483.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt31585.kt")
|
||||
public void testKt31585() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt31585.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt35234.kt")
|
||||
public void testKt35234() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt35234a.kt")
|
||||
public void testKt35234a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes1a.kt")
|
||||
public void testRelatedReturnTypes1a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes1a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes1b.kt")
|
||||
public void testRelatedReturnTypes1b() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes1b.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes2a.kt")
|
||||
public void testRelatedReturnTypes2a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes2a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes2b.kt")
|
||||
public void testRelatedReturnTypes2b() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes2b.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("unrelatedGenerics.kt")
|
||||
public void testUnrelatedGenerics() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/unrelatedGenerics.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/box/inlineClasses/callableReferences")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
+98
@@ -12699,6 +12699,104 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/whenWithSubject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class BoxReturnValueOnOverride extends AbstractIrBlackBoxCodegenTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
|
||||
}
|
||||
|
||||
public void testAllFilesPresentInBoxReturnValueOnOverride() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToAny.kt")
|
||||
public void testCovariantOverrideErasedToAny() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToAny.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToInterface.kt")
|
||||
public void testCovariantOverrideErasedToInterface() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToInterface.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideErasedToPrimitive.kt")
|
||||
public void testCovariantOverrideErasedToPrimitive() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideErasedToPrimitive.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideListVsMutableList.kt")
|
||||
public void testCovariantOverrideListVsMutableList() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideListVsMutableList.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("covariantOverrideUnrelatedInterfaces.kt")
|
||||
public void testCovariantOverrideUnrelatedInterfaces() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/covariantOverrideUnrelatedInterfaces.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericOverride.kt")
|
||||
public void testGenericOverride() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/genericOverride.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericOverrideSpecialized.kt")
|
||||
public void testGenericOverrideSpecialized() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/genericOverrideSpecialized.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassInOverriddenReturnTypes.kt")
|
||||
public void testInlineClassInOverriddenReturnTypes() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/inlineClassInOverriddenReturnTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt28483.kt")
|
||||
public void testKt28483() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt28483.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt31585.kt")
|
||||
public void testKt31585() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt31585.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt35234.kt")
|
||||
public void testKt35234() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt35234a.kt")
|
||||
public void testKt35234a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes1a.kt")
|
||||
public void testRelatedReturnTypes1a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes1a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes1b.kt")
|
||||
public void testRelatedReturnTypes1b() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes1b.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes2a.kt")
|
||||
public void testRelatedReturnTypes2a() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes2a.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("relatedReturnTypes2b.kt")
|
||||
public void testRelatedReturnTypes2b() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/relatedReturnTypes2b.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("unrelatedGenerics.kt")
|
||||
public void testUnrelatedGenerics() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/unrelatedGenerics.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/box/inlineClasses/callableReferences")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user