From 6e01ec8dd3ca743d8c0e3bff9a522bce7714ea5b Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Thu, 26 Mar 2020 18:04:35 +0300 Subject: [PATCH] [IR] Fix translation of synthetic generic java properties - Compute substituted accessor descriptor to avoid unbound type parameters --- .../ir/FirBlackBoxCodegenTestGenerated.java | 10 +++ .../kotlin/fir/Fir2IrTextTestGenerated.java | 5 ++ .../psi2ir/generators/AssignmentGenerator.kt | 4 +- .../kotlin/psi2ir/generators/CallGenerator.kt | 4 +- .../kotlin/psi2ir/intermediate/IrUtils.kt | 56 +++++++++++- .../codegen/box/ir/genericCompanion.kt | 22 +++++ .../properties/javaGenericSynthProperty.kt | 88 +++++++++++++++++++ ...javaSyntheticGenericPropertyAccess.fir.txt | 23 +++++ .../javaSyntheticGenericPropertyAccess.txt | 39 ++++++++ .../javaSyntheticGenericPropretyAccess.kt | 15 ++++ .../stubs/jdkClassSyntheticProperty.txt | 3 +- .../codegen/BlackBoxCodegenTestGenerated.java | 10 +++ .../LightAnalysisModeTestGenerated.java | 10 +++ .../ir/IrBlackBoxCodegenTestGenerated.java | 10 +++ .../kotlin/ir/IrTextTestCaseGenerated.java | 5 ++ .../IrJsCodegenBoxTestGenerated.java | 5 ++ .../semantics/JsCodegenBoxTestGenerated.java | 5 ++ 17 files changed, 306 insertions(+), 8 deletions(-) create mode 100644 compiler/testData/codegen/box/ir/genericCompanion.kt create mode 100644 compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt create mode 100644 compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.fir.txt create mode 100644 compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.txt create mode 100644 compiler/testData/ir/irText/expressions/javaSyntheticGenericPropretyAccess.kt diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 073794d3541..64b2283c761 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -13665,6 +13665,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/ir/fileClassInitializers.kt"); } + @TestMetadata("genericCompanion.kt") + public void testGenericCompanion() throws Exception { + runTest("compiler/testData/codegen/box/ir/genericCompanion.kt"); + } + @TestMetadata("kt25405.kt") public void testKt25405() throws Exception { runTest("compiler/testData/codegen/box/ir/kt25405.kt"); @@ -18395,6 +18400,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/properties/initOrderMultiModule.kt"); } + @TestMetadata("javaGenericSynthProperty.kt") + public void testJavaGenericSynthProperty() throws Exception { + runTest("compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt"); + } + @TestMetadata("javaPropertyBoxedGetter.kt") public void testJavaPropertyBoxedGetter() throws Exception { runTest("compiler/testData/codegen/box/properties/javaPropertyBoxedGetter.kt"); diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java index 43b233ab5c9..91c95af4485 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/Fir2IrTextTestGenerated.java @@ -997,6 +997,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest { runTest("compiler/testData/ir/irText/expressions/interfaceThisRef.kt"); } + @TestMetadata("javaSyntheticGenericPropretyAccess.kt") + public void testJavaSyntheticGenericPropretyAccess() throws Exception { + runTest("compiler/testData/ir/irText/expressions/javaSyntheticGenericPropretyAccess.kt"); + } + @TestMetadata("javaSyntheticPropertyAccess.kt") public void testJavaSyntheticPropertyAccess() throws Exception { runTest("compiler/testData/ir/irText/expressions/javaSyntheticPropertyAccess.kt"); diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt index 8cca831e5fa..e84b1772233 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt @@ -330,9 +330,9 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, propertyIrType, getterSymbol, - getterDescriptor, + getterDescriptor?.let { computeSubstitutedSyntheticAccessor(unwrappedPropertyDescriptor, it) }, setterSymbol, - setterDescriptor, + setterDescriptor?.let { computeSubstitutedSyntheticAccessor(unwrappedPropertyDescriptor, it) }, typeArgumentsList, propertyReceiver, superQualifierSymbol diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt index 2c9482843c0..fb8db9c749b 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt @@ -35,7 +35,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType -import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.* import java.util.* class CallGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) { @@ -211,7 +211,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator IrStatementOrigin.GET_PROPERTY, superQualifierSymbol ).apply { - context.callToSubstitutedDescriptorMap[this] = getMethodDescriptor + context.callToSubstitutedDescriptorMap[this] = computeSubstitutedSyntheticAccessor(descriptor, getMethodDescriptor) putTypeArguments(call.typeArguments) { it.toIrType() } dispatchReceiver = dispatchReceiverValue?.load() extensionReceiver = extensionReceiverValue?.load() diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt index 307f3c1e3fa..25d26f30966 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt @@ -16,10 +16,13 @@ package org.jetbrains.kotlin.psi2ir.intermediate -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.typeParametersCount +import org.jetbrains.kotlin.types.TypeConstructor +import org.jetbrains.kotlin.types.TypeSubstitutor fun IrVariable.defaultLoad(): IrExpression = IrGetValueImpl(startOffset, endOffset, type, symbol) @@ -47,4 +50,53 @@ fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver } withDispatchAndExtensionReceivers(newDispatchReceiverValue, newExtensionReceiverValue) } - } \ No newline at end of file + } + + +fun computeSubstitutedSyntheticAccessor(propertyDescriptor: PropertyDescriptor, accessorFunctionDescriptor: FunctionDescriptor): FunctionDescriptor { + if (propertyDescriptor.original == propertyDescriptor) return accessorFunctionDescriptor + + // Compute substituted accessor descriptor in case of Synthetic Java property `Java: getFoo() -> Kotlin: foo` + if (propertyDescriptor !is SyntheticPropertyDescriptor) return accessorFunctionDescriptor + + if (propertyDescriptor.extensionReceiverParameter == null || propertyDescriptor.dispatchReceiverParameter != null) { + return accessorFunctionDescriptor + } + + if (accessorFunctionDescriptor !is SimpleFunctionDescriptor) return accessorFunctionDescriptor + + /** + * Consider java class like + * O.java + * class O { + * class I { + * public String getFoo() { ... } + * } + * } + * + * k.kt + * fun f(i: O.I) = i.foo + * + * + * for that case front end creates synthetic property foo + * private val O.I.foo get() = this.getFoo() + * + * So to get substituted descriptor for getFoo() we need to extract substitution from extension receiver type. + * To do so map Tx parameters onto Tx' arguments like + * T1' -> String + * T2' -> Int + * into + * T1 -> String + * T2 -> Int + */ + + val classDescriptor = accessorFunctionDescriptor.containingDeclaration as ClassDescriptor + val collectedTypeParameters = classDescriptor.typeConstructor.parameters.map { it.typeConstructor } + assert(collectedTypeParameters.size == propertyDescriptor.typeParametersCount) + + val typeArguments = propertyDescriptor.extensionReceiverParameter!!.type.arguments + assert(typeArguments.size == collectedTypeParameters.size) + + val typeSubstitutor = TypeSubstitutor.create(collectedTypeParameters.zip(typeArguments).toMap()) + return accessorFunctionDescriptor.substitute(typeSubstitutor) ?: error("Cannot substitute descriptor for $accessorFunctionDescriptor") +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/ir/genericCompanion.kt b/compiler/testData/codegen/box/ir/genericCompanion.kt new file mode 100644 index 00000000000..b2d00a6a0b7 --- /dev/null +++ b/compiler/testData/codegen/box/ir/genericCompanion.kt @@ -0,0 +1,22 @@ + + +// MODULE: lib +// FILE: lib.kt + + +class C { + fun foo(): String = "OK" + + companion object { + fun bar(): C<*> = C() + } +} + + + +// MODULE: main(lib) +// FILE: main.kt + +fun box(): String { + return C.bar().foo() +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt b/compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt new file mode 100644 index 00000000000..544b18674d1 --- /dev/null +++ b/compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt @@ -0,0 +1,88 @@ +// TARGET_BACKEND: JVM + +// FILE: Box.java + +class Box { + public B f; + public Box(B b) { + this.f = b; + } +} + +// FILE: JOuter.java + +public class JOuter { + + public O1 o1; + public O2 o2; + + public JOuter(O1 a1, O2 a2) { + this.o1 = a1; + this.o2 = a2; + } + + public JInner, ?> instance(O1 s1, O2 s2) { + return new JInner, O2>(new Box(s1), s2); + } + + public JStatic> staticInstance() { + return new JStatic>(o1, new Box(o2)); + } + + public class JInner { + + public I1 i1; + public I2 i2; + + public JInner(I1 a1, I2 a2) { + this.i1 = a1; + this.i2 = a2; + } + + public String getFoo() { + String s1 = (String)o1; + String s2 = ((Box)i1).f; + return s1 + s2; + } + + public String getBar() { + String s1 = (String)o2; + String s2 = (String)i2; + return s1 + s2; + } + } + + public static class JStatic { + public S1 ss1; + public S2 ss2; + + public JStatic(S1 a1, S2 a2) { + this.ss1 = a1; + this.ss2 = a2; + } + + public String getQux() { + String s1 = (String)ss1; + String s2 = ((Box)ss2).f; + return s1 + s2; + } + } +} + +// FILE: kotlin.kt + +fun box(): String { + + val o = JOuter("1", "2") + + val r1 = o.instance("3", "4").foo + if (r1 != "13") return "FAIL1: $r1" + + val r2 = o.instance("5", "6").bar + if (r2 != "26") return "FAIL2: $r2" + + val r3 = o.staticInstance().qux + if (r3 != "12") return "FAIL3: $r3" + + return "OK" +} diff --git a/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.fir.txt b/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.fir.txt new file mode 100644 index 00000000000..1263f562cd7 --- /dev/null +++ b/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.fir.txt @@ -0,0 +1,23 @@ +FILE fqName: fileName:/javaSyntheticGenericPropertyAccess.kt + FUN name:test visibility:public modality:FINAL (j:.J.test>) returnType:kotlin.Unit + TYPE_PARAMETER name:F index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:j index:0 type:.J.test> + BLOCK_BODY + CALL 'public open fun (): kotlin.Int declared in .J' type=kotlin.Int origin=GET_PROPERTY + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + CALL 'public open fun (x: kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=EQ + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + x: CONST Int type=kotlin.Int value=1 + VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Int [val] + CALL 'public open fun (): kotlin.Int declared in .J' type=kotlin.Int origin=GET_PROPERTY + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + CALL 'public open fun (x: kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=EQ + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + x: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null + $this: GET_VAR 'val tmp_0: kotlin.Int [val] declared in .test' type=kotlin.Int origin=null + GET_VAR 'val tmp_0: kotlin.Int [val] declared in .test' type=kotlin.Int origin=null + CALL 'public open fun (x: kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=EQ + x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null + $this: CALL 'public open fun (): kotlin.Int declared in .J' type=kotlin.Int origin=GET_PROPERTY + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + other: CONST Int type=kotlin.Int value=1 diff --git a/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.txt b/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.txt new file mode 100644 index 00000000000..aa5e639d0f5 --- /dev/null +++ b/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropertyAccess.txt @@ -0,0 +1,39 @@ +FILE fqName: fileName:/javaSyntheticGenericPropertyAccess.kt + FUN name:test visibility:public modality:FINAL (j:.J.test>) returnType:kotlin.Unit + TYPE_PARAMETER name:F index:0 variance: superTypes:[kotlin.Any?] + VALUE_PARAMETER name:j index:0 type:.J.test> + BLOCK_BODY + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + CALL 'public open fun getFoo (): kotlin.Int declared in .J' type=kotlin.Int origin=GET_PROPERTY + <1>: F of .test + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=EQ + <1>: F of .test + $this: GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + x: CONST Int type=kotlin.Int value=1 + TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit + BLOCK type=kotlin.Int origin=POSTFIX_INCR + VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:.J.test> [val] + GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + BLOCK type=kotlin.Int origin=POSTFIX_INCR + VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val] + CALL 'public open fun getFoo (): kotlin.Int declared in .J' type=kotlin.Int origin=POSTFIX_INCR + <1>: F of .test + $this: GET_VAR 'val tmp_0: .J.test> [val] declared in .test' type=.J.test> origin=null + CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=POSTFIX_INCR + <1>: F of .test + $this: GET_VAR 'val tmp_0: .J.test> [val] declared in .test' type=.J.test> origin=null + x: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_INCR + $this: GET_VAR 'val tmp_1: kotlin.Int [val] declared in .test' type=kotlin.Int origin=null + GET_VAR 'val tmp_1: kotlin.Int [val] declared in .test' type=kotlin.Int origin=null + BLOCK type=kotlin.Unit origin=PLUSEQ + VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:.J.test> [val] + GET_VAR 'j: .J.test> declared in .test' type=.J.test> origin=null + CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=PLUSEQ + <1>: F of .test + $this: GET_VAR 'val tmp_2: .J.test> [val] declared in .test' type=.J.test> origin=null + x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=PLUSEQ + $this: CALL 'public open fun getFoo (): kotlin.Int declared in .J' type=kotlin.Int origin=PLUSEQ + <1>: F of .test + $this: GET_VAR 'val tmp_2: .J.test> [val] declared in .test' type=.J.test> origin=null + other: CONST Int type=kotlin.Int value=1 diff --git a/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropretyAccess.kt b/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropretyAccess.kt new file mode 100644 index 00000000000..dd1ec1484ca --- /dev/null +++ b/compiler/testData/ir/irText/expressions/javaSyntheticGenericPropretyAccess.kt @@ -0,0 +1,15 @@ +// FILE: javaSyntheticGenericPropertyAccess.kt +fun test(j: J) { + j.foo + j.foo = 1 + j.foo++ + j.foo += 1 +} + +// FILE: J.java +public class J { + private int foo = 42; + + public int getFoo() { return foo; } + public void setFoo(int x) {} +} \ No newline at end of file diff --git a/compiler/testData/ir/irText/stubs/jdkClassSyntheticProperty.txt b/compiler/testData/ir/irText/stubs/jdkClassSyntheticProperty.txt index 19202e4c180..1134c1bfbee 100644 --- a/compiler/testData/ir/irText/stubs/jdkClassSyntheticProperty.txt +++ b/compiler/testData/ir/irText/stubs/jdkClassSyntheticProperty.txt @@ -7,5 +7,4 @@ FILE fqName: fileName:/jdkClassSyntheticProperty.kt RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array? declared in ' CALL 'public open fun getDeclaredFields (): kotlin.Array? declared in java.lang.Class' type=kotlin.Array? origin=GET_PROPERTY <1>: kotlin.Any? - $this: TYPE_OP type=java.lang.Class origin=IMPLICIT_CAST typeOperand=java.lang.Class - GET_VAR ': java.lang.Class<*> declared in .' type=java.lang.Class<*> origin=null + $this: GET_VAR ': java.lang.Class<*> declared in .' type=java.lang.Class<*> origin=null diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index a6365ea547c..c63557368db 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -14815,6 +14815,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/ir/fileClassInitializers.kt"); } + @TestMetadata("genericCompanion.kt") + public void testGenericCompanion() throws Exception { + runTest("compiler/testData/codegen/box/ir/genericCompanion.kt"); + } + @TestMetadata("kt25405.kt") public void testKt25405() throws Exception { runTest("compiler/testData/codegen/box/ir/kt25405.kt"); @@ -19916,6 +19921,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/properties/initOrderMultiModule.kt"); } + @TestMetadata("javaGenericSynthProperty.kt") + public void testJavaGenericSynthProperty() throws Exception { + runTest("compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt"); + } + @TestMetadata("javaPropertyBoxedGetter.kt") public void testJavaPropertyBoxedGetter() throws Exception { runTest("compiler/testData/codegen/box/properties/javaPropertyBoxedGetter.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index cdc7bbfe220..945b1cd0c1d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14815,6 +14815,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/ir/fileClassInitializers.kt"); } + @TestMetadata("genericCompanion.kt") + public void testGenericCompanion() throws Exception { + runTest("compiler/testData/codegen/box/ir/genericCompanion.kt"); + } + @TestMetadata("kt25405.kt") public void testKt25405() throws Exception { runTest("compiler/testData/codegen/box/ir/kt25405.kt"); @@ -19921,6 +19926,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/properties/initOrderMultiModule.kt"); } + @TestMetadata("javaGenericSynthProperty.kt") + public void testJavaGenericSynthProperty() throws Exception { + runTest("compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt"); + } + @TestMetadata("javaPropertyBoxedGetter.kt") public void testJavaPropertyBoxedGetter() throws Exception { runTest("compiler/testData/codegen/box/properties/javaPropertyBoxedGetter.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 36bbb98e8e3..5f18cec046d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -13665,6 +13665,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/ir/fileClassInitializers.kt"); } + @TestMetadata("genericCompanion.kt") + public void testGenericCompanion() throws Exception { + runTest("compiler/testData/codegen/box/ir/genericCompanion.kt"); + } + @TestMetadata("kt25405.kt") public void testKt25405() throws Exception { runTest("compiler/testData/codegen/box/ir/kt25405.kt"); @@ -18395,6 +18400,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/properties/initOrderMultiModule.kt"); } + @TestMetadata("javaGenericSynthProperty.kt") + public void testJavaGenericSynthProperty() throws Exception { + runTest("compiler/testData/codegen/box/properties/javaGenericSynthProperty.kt"); + } + @TestMetadata("javaPropertyBoxedGetter.kt") public void testJavaPropertyBoxedGetter() throws Exception { runTest("compiler/testData/codegen/box/properties/javaPropertyBoxedGetter.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java index e30aaac9db3..e7978c4d85f 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/ir/IrTextTestCaseGenerated.java @@ -996,6 +996,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase { runTest("compiler/testData/ir/irText/expressions/interfaceThisRef.kt"); } + @TestMetadata("javaSyntheticGenericPropretyAccess.kt") + public void testJavaSyntheticGenericPropretyAccess() throws Exception { + runTest("compiler/testData/ir/irText/expressions/javaSyntheticGenericPropretyAccess.kt"); + } + @TestMetadata("javaSyntheticPropertyAccess.kt") public void testJavaSyntheticPropertyAccess() throws Exception { runTest("compiler/testData/ir/irText/expressions/javaSyntheticPropertyAccess.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 98b2746ff3b..79ea0981276 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -11810,6 +11810,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/ir/fileClassInitializers.kt"); } + @TestMetadata("genericCompanion.kt") + public void testGenericCompanion() throws Exception { + runTest("compiler/testData/codegen/box/ir/genericCompanion.kt"); + } + @TestMetadata("kt25405.kt") public void testKt25405() throws Exception { runTest("compiler/testData/codegen/box/ir/kt25405.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index a6ddebdcef5..428dd97862e 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -11875,6 +11875,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/ir/fileClassInitializers.kt"); } + @TestMetadata("genericCompanion.kt") + public void testGenericCompanion() throws Exception { + runTest("compiler/testData/codegen/box/ir/genericCompanion.kt"); + } + @TestMetadata("kt25405.kt") public void testKt25405() throws Exception { runTest("compiler/testData/codegen/box/ir/kt25405.kt");