提交 b417786f 编写于 作者: A Alexander Udalov

JVM IR: do not hide constructor with inline class in anonymous object

 #KT-45131 Fixed
上级 b026de76
......@@ -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 {
......
......@@ -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 {
......
......@@ -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
......
// 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"))()
......@@ -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 {
......
......@@ -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 {
......
......@@ -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 {
......
......@@ -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 {
......
......@@ -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 {
......
......@@ -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 {
......
......@@ -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");
......
......@@ -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");
......
......@@ -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");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册