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)
|
val node = MethodNode(access, name, desc, signature, exceptions)
|
||||||
if (name == "<init>") {
|
if (name == "<init>") {
|
||||||
if (constructor != null) {
|
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
|
constructor = node
|
||||||
} else {
|
} 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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||||
|
|||||||
+3
-2
@@ -229,8 +229,9 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle
|
|||||||
|
|
||||||
val constructedClass = constructedClass
|
val constructedClass = constructedClass
|
||||||
|
|
||||||
if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters)
|
if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isInline && hasMangledParameters &&
|
||||||
return true
|
!constructedClass.isAnonymousObject
|
||||||
|
) return true
|
||||||
|
|
||||||
if (visibility != DescriptorVisibilities.PUBLIC && constructedClass.modality == Modality.SEALED)
|
if (visibility != DescriptorVisibilities.PUBLIC && constructedClass.modality == Modality.SEALED)
|
||||||
return true
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
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);
|
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
|
@Test
|
||||||
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
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);
|
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")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
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);
|
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")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
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);
|
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")
|
@TestMetadata("inlineClassWithInlineValReturningInlineClass.kt")
|
||||||
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
public void testInlineClassWithInlineValReturningInlineClass() throws Exception {
|
||||||
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
runTest("compiler/testData/codegen/boxInline/inlineClasses/inlineClassWithInlineValReturningInlineClass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user