Fix bridge generation for inline classes over Any type
This commit is contained in:
@@ -195,8 +195,11 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
|||||||
erasedInterfaceFunction = samType.getOriginalAbstractMethod();
|
erasedInterfaceFunction = samType.getOriginalAbstractMethod();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<KotlinType> bridgeParameterKotlinTypes = CollectionsKt.map(erasedInterfaceFunction.getValueParameters(), ValueDescriptor::getType);
|
||||||
|
|
||||||
generateBridge(
|
generateBridge(
|
||||||
typeMapper.mapAsmMethod(erasedInterfaceFunction),
|
typeMapper.mapAsmMethod(erasedInterfaceFunction),
|
||||||
|
bridgeParameterKotlinTypes,
|
||||||
erasedInterfaceFunction.getReturnType(),
|
erasedInterfaceFunction.getReturnType(),
|
||||||
typeMapper.mapAsmMethod(funDescriptor),
|
typeMapper.mapAsmMethod(funDescriptor),
|
||||||
funDescriptor.getReturnType(),
|
funDescriptor.getReturnType(),
|
||||||
@@ -269,6 +272,7 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
|||||||
|
|
||||||
protected void generateBridge(
|
protected void generateBridge(
|
||||||
@NotNull Method bridge,
|
@NotNull Method bridge,
|
||||||
|
@NotNull List<KotlinType> bridgeParameterKotlinTypes,
|
||||||
@Nullable KotlinType bridgeReturnType,
|
@Nullable KotlinType bridgeReturnType,
|
||||||
@NotNull Method delegate,
|
@NotNull Method delegate,
|
||||||
@Nullable KotlinType delegateReturnType,
|
@Nullable KotlinType delegateReturnType,
|
||||||
@@ -287,13 +291,16 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
|||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
MemberCodegen.markLineNumberForDescriptor(DescriptorUtils.getParentOfType(funDescriptor, ClassDescriptor.class), iv);
|
MemberCodegen.markLineNumberForDescriptor(DescriptorUtils.getParentOfType(funDescriptor, ClassDescriptor.class), iv);
|
||||||
|
|
||||||
Type[] myParameterTypes = bridge.getArgumentTypes();
|
Type[] bridgeParameterTypes = bridge.getArgumentTypes();
|
||||||
if (isVarargInvoke) {
|
if (isVarargInvoke) {
|
||||||
assert myParameterTypes.length == 1 && myParameterTypes[0].equals(AsmUtil.getArrayType(OBJECT_TYPE)) :
|
assert bridgeParameterTypes.length == 1 && bridgeParameterTypes[0].equals(AsmUtil.getArrayType(OBJECT_TYPE)) :
|
||||||
"Vararg invoke must have one parameter of type [Ljava/lang/Object;: " + bridge;
|
"Vararg invoke must have one parameter of type [Ljava/lang/Object;: " + bridge;
|
||||||
generateVarargInvokeArityAssert(iv, delegate.getArgumentTypes().length);
|
generateVarargInvokeArityAssert(iv, delegate.getArgumentTypes().length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert bridgeParameterTypes.length == bridgeParameterKotlinTypes.size() :
|
||||||
|
"Asm parameter types should be the same length as Kotlin parameter types";
|
||||||
|
|
||||||
iv.load(0, asmType);
|
iv.load(0, asmType);
|
||||||
|
|
||||||
List<ParameterDescriptor> calleeParameters = CollectionsKt.plus(
|
List<ParameterDescriptor> calleeParameters = CollectionsKt.plus(
|
||||||
@@ -308,12 +315,14 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
|||||||
StackValue value;
|
StackValue value;
|
||||||
if (isVarargInvoke) {
|
if (isVarargInvoke) {
|
||||||
value = StackValue.arrayElement(
|
value = StackValue.arrayElement(
|
||||||
OBJECT_TYPE, null, StackValue.local(1, myParameterTypes[0], parameterType), StackValue.constant(i)
|
OBJECT_TYPE, null,
|
||||||
|
StackValue.local(1, bridgeParameterTypes[0], bridgeParameterKotlinTypes.get(0)),
|
||||||
|
StackValue.constant(i)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Type type = myParameterTypes[i];
|
Type type = bridgeParameterTypes[i];
|
||||||
value = StackValue.local(slot, type, parameterType);
|
value = StackValue.local(slot, type, bridgeParameterKotlinTypes.get(i));
|
||||||
slot += type.getSize();
|
slot += type.getSize();
|
||||||
}
|
}
|
||||||
value.put(typeMapper.mapType(calleeParameter), parameterType, iv);
|
value.put(typeMapper.mapType(calleeParameter), parameterType, iv);
|
||||||
|
|||||||
@@ -224,10 +224,19 @@ class CoroutineCodegenForLambda private constructor(
|
|||||||
if (allFunctionParameters().size <= 1) {
|
if (allFunctionParameters().size <= 1) {
|
||||||
val delegate = typeMapper.mapSignatureSkipGeneric(createCoroutineDescriptor).asmMethod
|
val delegate = typeMapper.mapSignatureSkipGeneric(createCoroutineDescriptor).asmMethod
|
||||||
|
|
||||||
val bridgeParameters = (1 until delegate.argumentTypes.size).map { AsmTypes.OBJECT_TYPE } + delegate.argumentTypes.last()
|
val bridgeParameterAsmTypes =
|
||||||
val bridge = Method(delegate.name, delegate.returnType, bridgeParameters.toTypedArray())
|
List(delegate.argumentTypes.size - 1) { AsmTypes.OBJECT_TYPE } + delegate.argumentTypes.last()
|
||||||
|
|
||||||
generateBridge(bridge, createCoroutineDescriptor.returnType, delegate, createCoroutineDescriptor.returnType, false)
|
val bridgeParameterKotlinTypes =
|
||||||
|
List(delegate.argumentTypes.size - 1) { builtIns.nullableAnyType } + createCoroutineDescriptor.valueParameters.last().type
|
||||||
|
|
||||||
|
val bridge = Method(delegate.name, delegate.returnType, bridgeParameterAsmTypes.toTypedArray())
|
||||||
|
|
||||||
|
generateBridge(
|
||||||
|
bridge, bridgeParameterKotlinTypes, createCoroutineDescriptor.returnType,
|
||||||
|
delegate, createCoroutineDescriptor.returnType,
|
||||||
|
false
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
// IGNORE_BACKEND: JS_IR, JVM_IR
|
||||||
|
// WITH_COROUTINES
|
||||||
|
// COMMON_COROUTINES_TEST
|
||||||
|
|
||||||
|
import helpers.*
|
||||||
|
import COROUTINES_PACKAGE.*
|
||||||
|
|
||||||
|
fun builder(c: suspend () -> Unit) {
|
||||||
|
c.startCoroutine(EmptyContinuation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNSUPPORTED_FEATURE")
|
||||||
|
inline class SuccessOrFailure<T>(val a: Any?) {
|
||||||
|
fun getOrThrow(): T = a as T
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class SuccessOrFailureReceiver<T> {
|
||||||
|
abstract suspend fun receive(result: SuccessOrFailure<T>)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> SuccessOrFailureReceiver(f: (SuccessOrFailure<T>) -> Unit): SuccessOrFailureReceiver<T> =
|
||||||
|
object : SuccessOrFailureReceiver<T>() {
|
||||||
|
override suspend fun receive(result: SuccessOrFailure<T>) {
|
||||||
|
f(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
var invoked = false
|
||||||
|
val receiver = SuccessOrFailureReceiver<Int> { result ->
|
||||||
|
val intResult = result.getOrThrow()
|
||||||
|
invoked = true
|
||||||
|
}
|
||||||
|
|
||||||
|
builder {
|
||||||
|
receiver.receive(SuccessOrFailure(42))
|
||||||
|
}
|
||||||
|
if (!invoked) {
|
||||||
|
throw RuntimeException("Fail")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
test()
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// IGNORE_BACKEND: JVM_IR
|
||||||
|
|
||||||
|
inline class SuccessOrFailure<T>(val a: Any?) {
|
||||||
|
fun getOrThrow(): T = a as T
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class SuccessOrFailureReceiver<T> {
|
||||||
|
abstract fun receive(result: SuccessOrFailure<T>)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> SuccessOrFailureReceiver(f: (SuccessOrFailure<T>) -> Unit): SuccessOrFailureReceiver<T> =
|
||||||
|
object : SuccessOrFailureReceiver<T>() {
|
||||||
|
override fun receive(result: SuccessOrFailure<T>) {
|
||||||
|
f(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
var invoked = false
|
||||||
|
val receiver = SuccessOrFailureReceiver<Int> { result ->
|
||||||
|
val intResult = result.getOrThrow()
|
||||||
|
invoked = true
|
||||||
|
}
|
||||||
|
|
||||||
|
receiver.receive(SuccessOrFailure(42))
|
||||||
|
if (!invoked) {
|
||||||
|
throw RuntimeException("Fail")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
test()
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
Generated
+32
@@ -6578,6 +6578,33 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/codegen/box/coroutines/inlineClasses")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class InlineClasses extends AbstractIrBlackBoxCodegenTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runTestWithPackageReplacement(String testDataFilePath, String packageName) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(filePath -> doTestWithCoroutinesPackageReplacement(filePath, packageName), TargetBackend.JVM_IR, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInInlineClasses() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_2() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines.experimental");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_3() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
@@ -11069,6 +11096,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationWithInlineClassOverAny.kt")
|
||||||
|
public void testBridgeGenerationWithInlineClassOverAny() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgeGenerationWithInlineClassOverAny.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
||||||
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
||||||
|
|||||||
+32
@@ -6578,6 +6578,33 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/codegen/box/coroutines/inlineClasses")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class InlineClasses extends AbstractBlackBoxCodegenTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runTestWithPackageReplacement(String testDataFilePath, String packageName) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(filePath -> doTestWithCoroutinesPackageReplacement(filePath, packageName), TargetBackend.JVM, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInInlineClasses() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_2() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines.experimental");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_3() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
@@ -11069,6 +11096,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationWithInlineClassOverAny.kt")
|
||||||
|
public void testBridgeGenerationWithInlineClassOverAny() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgeGenerationWithInlineClassOverAny.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
||||||
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
||||||
|
|||||||
+32
@@ -6578,6 +6578,33 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/codegen/box/coroutines/inlineClasses")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class InlineClasses extends AbstractLightAnalysisModeTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runTestWithPackageReplacement(String testDataFilePath, String packageName) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(filePath -> doTestWithCoroutinesPackageReplacement(filePath, packageName), TargetBackend.JVM, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInInlineClasses() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_2() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines.experimental");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_3() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
@@ -11069,6 +11096,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationWithInlineClassOverAny.kt")
|
||||||
|
public void testBridgeGenerationWithInlineClassOverAny() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgeGenerationWithInlineClassOverAny.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
||||||
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
||||||
|
|||||||
+27
-10
@@ -1567,11 +1567,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/callableReference/bound/array.kt");
|
runTest("compiler/testData/codegen/box/callableReference/bound/array.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("boundJvmFieldInInterfaceCompanion.kt")
|
|
||||||
public void testBoundJvmFieldInInterfaceCompanion() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/callableReference/bound/boundJvmFieldInInterfaceCompanion.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("companionObjectReceiver.kt")
|
@TestMetadata("companionObjectReceiver.kt")
|
||||||
public void testCompanionObjectReceiver() throws Exception {
|
public void testCompanionObjectReceiver() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/bound/companionObjectReceiver.kt");
|
runTest("compiler/testData/codegen/box/callableReference/bound/companionObjectReceiver.kt");
|
||||||
@@ -5693,6 +5688,28 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/codegen/box/coroutines/inlineClasses")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class InlineClasses extends AbstractIrJsCodegenBoxTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS_IR, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runTestWithPackageReplacement(String testDataFilePath, String packageName) throws Exception {
|
||||||
|
KotlinTestUtils.runTest0(filePath -> doTestWithCoroutinesPackageReplacement(filePath, packageName), TargetBackend.JS_IR, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInInlineClasses() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_2() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines.experimental");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
@@ -9719,6 +9736,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationWithInlineClassOverAny.kt")
|
||||||
|
public void testBridgeGenerationWithInlineClassOverAny() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgeGenerationWithInlineClassOverAny.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
||||||
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
||||||
@@ -16561,11 +16583,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/reflection/properties/javaStaticField.kt");
|
runTest("compiler/testData/codegen/box/reflection/properties/javaStaticField.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("jvmFieldInInterfaceCompanion.kt")
|
|
||||||
public void testJvmFieldInInterfaceCompanion() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/reflection/properties/jvmFieldInInterfaceCompanion.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("kotlinPropertyInheritedInJava.kt")
|
@TestMetadata("kotlinPropertyInheritedInJava.kt")
|
||||||
public void testKotlinPropertyInheritedInJava() throws Exception {
|
public void testKotlinPropertyInheritedInJava() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/properties/kotlinPropertyInheritedInJava.kt");
|
runTest("compiler/testData/codegen/box/reflection/properties/kotlinPropertyInheritedInJava.kt");
|
||||||
|
|||||||
+32
-10
@@ -1587,11 +1587,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/callableReference/bound/array.kt");
|
runTest("compiler/testData/codegen/box/callableReference/bound/array.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("boundJvmFieldInInterfaceCompanion.kt")
|
|
||||||
public void testBoundJvmFieldInInterfaceCompanion() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/callableReference/bound/boundJvmFieldInInterfaceCompanion.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("companionObjectReceiver.kt")
|
@TestMetadata("companionObjectReceiver.kt")
|
||||||
public void testCompanionObjectReceiver() throws Exception {
|
public void testCompanionObjectReceiver() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/bound/companionObjectReceiver.kt");
|
runTest("compiler/testData/codegen/box/callableReference/bound/companionObjectReceiver.kt");
|
||||||
@@ -6308,6 +6303,33 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/codegen/box/coroutines/inlineClasses")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class InlineClasses extends AbstractJsCodegenBoxTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runTestWithPackageReplacement(String testDataFilePath, String packageName) throws Exception {
|
||||||
|
KotlinTestUtils.runTest0(filePath -> doTestWithCoroutinesPackageReplacement(filePath, packageName), TargetBackend.JS, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInInlineClasses() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/coroutines/inlineClasses"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_2() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines.experimental");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationNonInline.kt")
|
||||||
|
public void testBridgeGenerationNonInline_1_3() throws Exception {
|
||||||
|
runTestWithPackageReplacement("compiler/testData/codegen/box/coroutines/inlineClasses/bridgeGenerationNonInline.kt", "kotlin.coroutines");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
@TestMetadata("compiler/testData/codegen/box/coroutines/intLikeVarSpilling")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
@@ -10714,6 +10736,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/boxUnboxOfInlineClassForCapturedVars.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bridgeGenerationWithInlineClassOverAny.kt")
|
||||||
|
public void testBridgeGenerationWithInlineClassOverAny() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgeGenerationWithInlineClassOverAny.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
@TestMetadata("bridgesWhenInlineClassImplementsGenericInterface.kt")
|
||||||
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
public void testBridgesWhenInlineClassImplementsGenericInterface() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/bridgesWhenInlineClassImplementsGenericInterface.kt");
|
||||||
@@ -17556,11 +17583,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/reflection/properties/javaStaticField.kt");
|
runTest("compiler/testData/codegen/box/reflection/properties/javaStaticField.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("jvmFieldInInterfaceCompanion.kt")
|
|
||||||
public void testJvmFieldInInterfaceCompanion() throws Exception {
|
|
||||||
runTest("compiler/testData/codegen/box/reflection/properties/jvmFieldInInterfaceCompanion.kt");
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("kotlinPropertyInheritedInJava.kt")
|
@TestMetadata("kotlinPropertyInheritedInJava.kt")
|
||||||
public void testKotlinPropertyInheritedInJava() throws Exception {
|
public void testKotlinPropertyInheritedInJava() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/properties/kotlinPropertyInheritedInJava.kt");
|
runTest("compiler/testData/codegen/box/reflection/properties/kotlinPropertyInheritedInJava.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user