JVM IR: do not hide constructor with inline class in anonymous object
#KT-45131 Fixed
This commit is contained in:
+4
-1
@@ -90,7 +90,10 @@ class AnonymousObjectTransformer(
|
||||
val node = MethodNode(access, name, desc, signature, exceptions)
|
||||
if (name == "<init>") {
|
||||
if (constructor != null) {
|
||||
throw RuntimeException("Lambda, SAM or anonymous object should have only one constructor")
|
||||
throw RuntimeException(
|
||||
"Lambda, SAM or anonymous object should have only one constructor.\n" +
|
||||
"First:\n${constructor.nodeText}\n\nSecond:\n${node.nodeText}\n"
|
||||
)
|
||||
}
|
||||
constructor = node
|
||||
} else {
|
||||
|
||||
+6
@@ -2244,6 +2244,12 @@ public class FirBlackBoxInlineCodegenTestGenerated extends AbstractFirBlackBoxIn
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+3
-2
@@ -229,8 +229,9 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
||||
|
||||
val constructedClass = constructedClass
|
||||
|
||||
if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters)
|
||||
return true
|
||||
if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters &&
|
||||
!constructedClass.isAnonymousObject
|
||||
) return true
|
||||
|
||||
if (visibility != DescriptorVisibilities.PUBLIC && constructedClass.modality == Modality.SEALED)
|
||||
return true
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
// NO_CHECK_LAMBDA_INLINING
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
inline class IC(val value: Any)
|
||||
|
||||
inline fun <reified T> f(a: IC): () -> T = {
|
||||
a.value as T
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String = f<String>(IC("OK"))()
|
||||
+6
@@ -2244,6 +2244,12 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+6
@@ -2244,6 +2244,12 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+6
@@ -2244,6 +2244,12 @@ public class IrBlackBoxInlineCodegenTestGenerated extends AbstractIrBlackBoxInli
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+6
@@ -2244,6 +2244,12 @@ public class IrCompileKotlinAgainstInlineKotlinTestGenerated extends AbstractIrC
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+6
@@ -2244,6 +2244,12 @@ public class JvmIrAgainstOldBoxInlineTestGenerated extends AbstractJvmIrAgainstO
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+6
@@ -2244,6 +2244,12 @@ public class JvmOldAgainstIrBoxInlineTestGenerated extends AbstractJvmOldAgainst
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
|
||||
+5
@@ -1795,6 +1795,11 @@ public class IrJsCodegenInlineES6TestGenerated extends AbstractIrJsCodegenInline
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
|
||||
}
|
||||
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
||||
|
||||
Generated
+5
@@ -1795,6 +1795,11 @@ public class IrJsCodegenInlineTestGenerated extends AbstractIrJsCodegenInlineTes
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
||||
}
|
||||
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
||||
|
||||
Generated
+5
@@ -1795,6 +1795,11 @@ public class JsCodegenInlineTestGenerated extends AbstractJsCodegenInlineTest {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/boxInline/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
|
||||
}
|
||||
|
||||
@TestMetadata("anonymousObject.kt")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/anonymousObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
||||
|
||||
Reference in New Issue
Block a user