From ecec87cbc75fb5727afe9a280bb876ed81cdf67f Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 22 Feb 2017 16:11:27 +0300 Subject: [PATCH] Refine signature calculation for methods with default parameters The problem was that he number of mask parameters for defaults when generating methods declaration was being calculated upon resulting signature (with additional parameters: extension receivers, enum name/ordinal), while on call-sites the masks number was calculated by the arguments number in resolved call, i.e. by the number of real value parameters. And because of the additional synthetic parameters (like enum.ordinal) these two numbers could be different. The solution is just to use value parameters number in both places. Note, that we only count value parameters from the original sourse declaration, ignoring synthetic ones generated by backend (e.g. Continuation for suspend functions) #KT-14565 Fixed --- .../kotlin/codegen/ArgumentGenerator.kt | 11 +- .../codegen/CallBasedArgumentGenerator.java | 7 +- .../kotlin/codegen/ExpressionCodegen.java | 8 +- .../jetbrains/kotlin/codegen/StackValue.java | 2 +- .../codegen/state/KotlinTypeMapper.java | 14 +-- .../32defaultParametersInSuspend.kt | 80 +++++++++++++ .../codegen/box/enum/manyDefaultParameters.kt | 55 +++++++++ .../32defaultParametersInSuspend.txt | 37 ++++++ .../enum/manyDefaultParameters.txt | 107 ++++++++++++++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 12 ++ .../codegen/BlackBoxCodegenTestGenerated.java | 12 ++ .../semantics/JsCodegenBoxTestGenerated.java | 12 ++ 12 files changed, 343 insertions(+), 14 deletions(-) create mode 100644 compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt create mode 100644 compiler/testData/codegen/box/enum/manyDefaultParameters.kt create mode 100644 compiler/testData/codegen/light-analysis/coroutines/32defaultParametersInSuspend.txt create mode 100644 compiler/testData/codegen/light-analysis/enum/manyDefaultParameters.txt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt index 8e69642331a..da8b53750a6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ArgumentGenerator.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.codegen +import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument @@ -31,7 +32,12 @@ abstract class ArgumentGenerator { * * @see kotlin.reflect.jvm.internal.KCallableImpl.callBy */ - open fun generate(valueArgumentsByIndex: List, actualArgs: List): DefaultCallArgs { + open fun generate( + valueArgumentsByIndex: List, + actualArgs: List, + // may be null for a constructor of an object literal + calleeDescriptor: CallableDescriptor? + ): DefaultCallArgs { assert(valueArgumentsByIndex.size == actualArgs.size) { "Value arguments collection should have same size, but ${valueArgumentsByIndex.size} != ${actualArgs.size}" } @@ -48,7 +54,8 @@ abstract class ArgumentGenerator { } } - val defaultArgs = DefaultCallArgs(valueArgumentsByIndex.size) + // Use unwrapped version, because additional synthetic parameters can't have default values + val defaultArgs = DefaultCallArgs(calleeDescriptor?.unwrapFrontendVersion()?.valueParameters?.size ?: 0) for (argumentWithDeclIndex in actualArgsWithDeclIndex) { val argument = argumentWithDeclIndex.arg diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CallBasedArgumentGenerator.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/CallBasedArgumentGenerator.java index 76502211980..c79cd34ee86 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CallBasedArgumentGenerator.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CallBasedArgumentGenerator.java @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.codegen; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.descriptors.CallableDescriptor; import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor; import org.jetbrains.kotlin.psi.KtExpression; import org.jetbrains.kotlin.psi.ValueArgument; @@ -54,11 +56,12 @@ public class CallBasedArgumentGenerator extends ArgumentGenerator { @Override public DefaultCallArgs generate( @NotNull List valueArgumentsByIndex, - @NotNull List valueArgs + @NotNull List valueArgs, + @Nullable CallableDescriptor calleeDescriptor ) { boolean shouldMarkLineNumbers = this.codegen.isShouldMarkLineNumbers(); this.codegen.setShouldMarkLineNumbers(false); - DefaultCallArgs defaultArgs = super.generate(valueArgumentsByIndex, valueArgs); + DefaultCallArgs defaultArgs = super.generate(valueArgumentsByIndex, valueArgs, calleeDescriptor); this.codegen.setShouldMarkLineNumbers(shouldMarkLineNumbers); return defaultArgs; } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index d817254a58d..49d351a61c5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -1709,7 +1709,7 @@ public class ExpressionCodegen extends KtVisitor impleme ArgumentGenerator argumentGenerator = new CallBasedArgumentGenerator(ExpressionCodegen.this, defaultCallGenerator, valueParameters, mappedTypes); - argumentGenerator.generate(valueArguments, valueArguments); + argumentGenerator.generate(valueArguments, valueArguments, null); } Collection constructors = classDescriptor.getConstructors(); @@ -2867,7 +2867,11 @@ public class ExpressionCodegen extends KtVisitor impleme assert valueArguments != null : "Failed to arrange value arguments by index: " + resolvedCall.getResultingDescriptor(); DefaultCallArgs defaultArgs = - argumentGenerator.generate(valueArguments, new ArrayList(resolvedCall.getValueArguments().values())); + argumentGenerator.generate( + valueArguments, + new ArrayList(resolvedCall.getValueArguments().values()), + resolvedCall.getResultingDescriptor() + ); if (tailRecursionCodegen.isTailRecursion(resolvedCall)) { tailRecursionCodegen.generateTailRecursion(resolvedCall); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index 4fce9cdc44a..3646148bade 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -883,7 +883,7 @@ public abstract class StackValue { newReceiver.put(newReceiver.type, v); callGenerator.processAndPutHiddenParameters(false); - defaultArgs = generator.generate(valueArguments, valueArguments); + defaultArgs = generator.generate(valueArguments, valueArguments, call.getResultingDescriptor()); } private ArgumentGenerator createArgumentGenerator() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java index 5fee263c9c5..ee9a449f7b7 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java @@ -1154,13 +1154,13 @@ public class KotlinTypeMapper { } @NotNull - private static String getDefaultDescriptor(@NotNull Method method, @Nullable String dispatchReceiverDescriptor, boolean isExtension) { + private static String getDefaultDescriptor( + @NotNull Method method, + @Nullable String dispatchReceiverDescriptor, + @NotNull CallableDescriptor callableDescriptor + ) { String descriptor = method.getDescriptor(); - int argumentsCount = Type.getArgumentTypes(descriptor).length; - if (isExtension) { - argumentsCount--; - } - int maskArgumentsCount = (argumentsCount + Integer.SIZE - 1) / Integer.SIZE; + int maskArgumentsCount = (callableDescriptor.getValueParameters().size() + Integer.SIZE - 1) / Integer.SIZE; String additionalArgs = StringUtil.repeat(Type.INT_TYPE.getDescriptor(), maskArgumentsCount); additionalArgs += (isConstructor(method) ? DEFAULT_CONSTRUCTOR_MARKER : OBJECT_TYPE).getDescriptor(); String result = descriptor.replace(")", additionalArgs + ")"); @@ -1186,7 +1186,7 @@ public class KotlinTypeMapper { String descriptor = getDefaultDescriptor( jvmSignature, isStaticMethod(kind, functionDescriptor) || isConstructor ? null : ownerType.getDescriptor(), - functionDescriptor.getExtensionReceiverParameter() != null + CodegenUtilKt.unwrapFrontendVersion(functionDescriptor) ); return new Method(isConstructor ? "" : jvmSignature.getName() + JvmAbi.DEFAULT_PARAMS_IMPL_SUFFIX, descriptor); diff --git a/compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt b/compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt new file mode 100644 index 00000000000..6903dcf0a31 --- /dev/null +++ b/compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt @@ -0,0 +1,80 @@ +// WITH_RUNTIME +// WITH_COROUTINES +import kotlin.coroutines.experimental.* +import kotlin.coroutines.experimental.intrinsics.* + +class Controller { + suspend fun suspendHere( + a: String = "abc", + i1: Int = 1, + i2: Int = 1, + i3: Int = 1, + i4: Int = 1, + i5: Int = 1, + i6: Int = 1, + i7: Int = 1, + i8: Int = 1, + i9: Int = 1, + i10: Int = 1, + i11: Int = 1, + i12: Int = 1, + i13: Int = 1, + i14: Int = 1, + i15: Int = 1, + i16: Int = 1, + i17: Int = 1, + i18: Int = 1, + i19: Int = 1, + i20: Int = 1, + i21: Int = 1, + i22: Int = 1, + i23: Int = 1, + i24: Int = 1, + i25: Int = 1, + i26: Int = 1, + i27: Int = 1, + i28: Int = 1, + i29: Int = 1, + i30: Int = 1, + i31: Int = 1 + ): String = suspendCoroutineOrReturn { x -> + x.resume(a + "#" + (i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15 + i16 + i17 + i18 + i19 + i20 + i21 + i22 + i23 + i24 + i25 + i26 + i27 + i28 + i29 + i30 + i31)) + COROUTINE_SUSPENDED + } +} + +fun builder(c: suspend Controller.() -> Unit) { + c.startCoroutine(Controller(), EmptyContinuation) +} + +fun box(): String { + var result = "OK" + + builder { + var a = suspendHere() + if (a != "abc#31") { + result = "fail 1: $a" + throw RuntimeException(result) + } + + a = suspendHere("cde") + if (a != "cde#31") { + result = "fail 2: $a" + throw RuntimeException(result) + } + + a = suspendHere(i2 = 6) + if (a != "abc#36") { + result = "fail 3: $a" + throw RuntimeException(result) + } + + a = suspendHere("xyz", 9) + if (a != "xyz#39") { + result = "fail 4: $a" + throw RuntimeException(result) + } + } + + return result +} diff --git a/compiler/testData/codegen/box/enum/manyDefaultParameters.kt b/compiler/testData/codegen/box/enum/manyDefaultParameters.kt new file mode 100644 index 00000000000..a094da96f27 --- /dev/null +++ b/compiler/testData/codegen/box/enum/manyDefaultParameters.kt @@ -0,0 +1,55 @@ +enum class ClassTemplate( + // var bug: Int = 1, + var code: Int, + var nameTemplate: Int = 1, + + val parent: Int = 1, + val previous: Int = 1, + val progressionEquivalent: Int = 1, + + var idDiscipline: Int = 1, + var strictRunningOrder: Int = 1, + var pointsMethod: Int = 1, + + var noTimeFaults: Int = 1, + var combineHeights: Int = 1, + + var column: Int = 1, + var runningOrderSort: Int = 1, + var programme: Int = 1, + var eliminationTime: Int = 1, + var courseTimeCode: Int = 1, + var teamSize: Int = 1, + var sponsor: Int = 1, + var lateEntryCredits: Int = 1, + var lateEntryFee: Int = 1, + + var courseLengthNeeded: Int = 1, + + var discretionaryCourseTime: Int = 1, + var isRelay: Int = 1, + var isQualifier: Int = 1, + var generateChildren: Int = 1, + var feedFromParent: Int = 1, + + var isNfcAllowed: Int = 1, + var isAddOnAllowed: Int = 1, + var isSpecialEntry: Int = 1, + var isUkaProgression: Int = 1, + var canEnterDirectly: Int = 1, + var isPointRanked: Int = 1, + var isPointRankedDesc: Int = 1 +) { + UNDEFINED(code = 56, nameTemplate = 3), + BLAH(code = 57, nameTemplate = 4) +} + +fun box(): String { + val x = ClassTemplate.UNDEFINED + val y = ClassTemplate.BLAH + + if (x.code != 56 || x.nameTemplate != 3 || x.isAddOnAllowed != 1) return "fail 1" + if (y.code != 57 || y.nameTemplate != 4 || y.isAddOnAllowed != 1) return "fail 2" + + return "OK" +} diff --git a/compiler/testData/codegen/light-analysis/coroutines/32defaultParametersInSuspend.txt b/compiler/testData/codegen/light-analysis/coroutines/32defaultParametersInSuspend.txt new file mode 100644 index 00000000000..97e3594a8e3 --- /dev/null +++ b/compiler/testData/codegen/light-analysis/coroutines/32defaultParametersInSuspend.txt @@ -0,0 +1,37 @@ +@kotlin.Metadata +public final class Controller { + public method (): void + public synthetic static method suspendHere$default(p0: Controller, p1: java.lang.String, p2: int, p3: int, p4: int, p5: int, p6: int, p7: int, p8: int, p9: int, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: int, p17: int, p18: int, p19: int, p20: int, p21: int, p22: int, p23: int, p24: int, p25: int, p26: int, p27: int, p28: int, p29: int, p30: int, p31: int, p32: int, p33: kotlin.coroutines.experimental.Continuation, p34: int, p35: java.lang.Object): java.lang.Object + public final @org.jetbrains.annotations.Nullable method suspendHere(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int, p2: int, p3: int, p4: int, p5: int, p6: int, p7: int, p8: int, p9: int, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: int, p17: int, p18: int, p19: int, p20: int, p21: int, p22: int, p23: int, p24: int, p25: int, p26: int, p27: int, p28: int, p29: int, p30: int, p31: int, @org.jetbrains.annotations.NotNull p32: kotlin.coroutines.experimental.Continuation): java.lang.Object +} + +@kotlin.Metadata +public final class CoroutineUtilKt { + public final static @org.jetbrains.annotations.NotNull method handleExceptionContinuation(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): kotlin.coroutines.experimental.Continuation + public final static @org.jetbrains.annotations.NotNull method handleResultContinuation(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function1): kotlin.coroutines.experimental.Continuation +} + +@kotlin.Metadata +public class EmptyContinuation { + public final static field Companion: EmptyContinuation.Companion + private final @org.jetbrains.annotations.NotNull field context: kotlin.coroutines.experimental.CoroutineContext + inner class EmptyContinuation/Companion + public @synthetic.kotlin.jvm.GeneratedByJvmOverloads method (): void + public method (@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.CoroutineContext): void + public synthetic method (p0: kotlin.coroutines.experimental.CoroutineContext, p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void + public @org.jetbrains.annotations.NotNull method getContext(): kotlin.coroutines.experimental.CoroutineContext + public method resume(@org.jetbrains.annotations.Nullable p0: java.lang.Object): void + public method resumeWithException(@org.jetbrains.annotations.NotNull p0: java.lang.Throwable): void +} + +@kotlin.Metadata +public final static class EmptyContinuation/Companion { + inner class EmptyContinuation/Companion + private method (): void +} + +@kotlin.Metadata +public final class _32defaultParametersInSuspendKt { + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String + public final static method builder(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function2): void +} diff --git a/compiler/testData/codegen/light-analysis/enum/manyDefaultParameters.txt b/compiler/testData/codegen/light-analysis/enum/manyDefaultParameters.txt new file mode 100644 index 00000000000..b783fddbf67 --- /dev/null +++ b/compiler/testData/codegen/light-analysis/enum/manyDefaultParameters.txt @@ -0,0 +1,107 @@ +@kotlin.Metadata +public enum class ClassTemplate { + public final static field BLAH: ClassTemplate + public final static field UNDEFINED: ClassTemplate + private field canEnterDirectly: int + private field code: int + private field column: int + private field combineHeights: int + private field courseLengthNeeded: int + private field courseTimeCode: int + private field discretionaryCourseTime: int + private field eliminationTime: int + private field feedFromParent: int + private field generateChildren: int + private field idDiscipline: int + private field isAddOnAllowed: int + private field isNfcAllowed: int + private field isPointRanked: int + private field isPointRankedDesc: int + private field isQualifier: int + private field isRelay: int + private field isSpecialEntry: int + private field isUkaProgression: int + private field lateEntryCredits: int + private field lateEntryFee: int + private field nameTemplate: int + private field noTimeFaults: int + private final field parent: int + private field pointsMethod: int + private final field previous: int + private field programme: int + private final field progressionEquivalent: int + private field runningOrderSort: int + private field sponsor: int + private field strictRunningOrder: int + private field teamSize: int + protected method (p0: java.lang.String, p1: int, p2: int, p3: int, p4: int, p5: int, p6: int, p7: int, p8: int, p9: int, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: int, p17: int, p18: int, p19: int, p20: int, p21: int, p22: int, p23: int, p24: int, p25: int, p26: int, p27: int, p28: int, p29: int, p30: int, p31: int, p32: int, p33: int): void + synthetic method (p0: java.lang.String, p1: int, p2: int, p3: int, p4: int, p5: int, p6: int, p7: int, p8: int, p9: int, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: int, p17: int, p18: int, p19: int, p20: int, p21: int, p22: int, p23: int, p24: int, p25: int, p26: int, p27: int, p28: int, p29: int, p30: int, p31: int, p32: int, p33: int, p34: int, p35: kotlin.jvm.internal.DefaultConstructorMarker): void + public final method getCanEnterDirectly(): int + public final method getCode(): int + public final method getColumn(): int + public final method getCombineHeights(): int + public final method getCourseLengthNeeded(): int + public final method getCourseTimeCode(): int + public final method getDiscretionaryCourseTime(): int + public final method getEliminationTime(): int + public final method getFeedFromParent(): int + public final method getGenerateChildren(): int + public final method getIdDiscipline(): int + public final method getLateEntryCredits(): int + public final method getLateEntryFee(): int + public final method getNameTemplate(): int + public final method getNoTimeFaults(): int + public final method getParent(): int + public final method getPointsMethod(): int + public final method getPrevious(): int + public final method getProgramme(): int + public final method getProgressionEquivalent(): int + public final method getRunningOrderSort(): int + public final method getSponsor(): int + public final method getStrictRunningOrder(): int + public final method getTeamSize(): int + public final method isAddOnAllowed(): int + public final method isNfcAllowed(): int + public final method isPointRanked(): int + public final method isPointRankedDesc(): int + public final method isQualifier(): int + public final method isRelay(): int + public final method isSpecialEntry(): int + public final method isUkaProgression(): int + public final method setAddOnAllowed(p0: int): void + public final method setCanEnterDirectly(p0: int): void + public final method setCode(p0: int): void + public final method setColumn(p0: int): void + public final method setCombineHeights(p0: int): void + public final method setCourseLengthNeeded(p0: int): void + public final method setCourseTimeCode(p0: int): void + public final method setDiscretionaryCourseTime(p0: int): void + public final method setEliminationTime(p0: int): void + public final method setFeedFromParent(p0: int): void + public final method setGenerateChildren(p0: int): void + public final method setIdDiscipline(p0: int): void + public final method setLateEntryCredits(p0: int): void + public final method setLateEntryFee(p0: int): void + public final method setNameTemplate(p0: int): void + public final method setNfcAllowed(p0: int): void + public final method setNoTimeFaults(p0: int): void + public final method setPointRanked(p0: int): void + public final method setPointRankedDesc(p0: int): void + public final method setPointsMethod(p0: int): void + public final method setProgramme(p0: int): void + public final method setQualifier(p0: int): void + public final method setRelay(p0: int): void + public final method setRunningOrderSort(p0: int): void + public final method setSpecialEntry(p0: int): void + public final method setSponsor(p0: int): void + public final method setStrictRunningOrder(p0: int): void + public final method setTeamSize(p0: int): void + public final method setUkaProgression(p0: int): void + public static method valueOf(p0: java.lang.String): ClassTemplate + public static method values(): ClassTemplate[] +} + +@kotlin.Metadata +public final class ManyDefaultParametersKt { + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String +} diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index b24e5d3e618..2e648cffd9b 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -4684,6 +4684,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class Coroutines extends AbstractIrBlackBoxCodegenTest { + @TestMetadata("32defaultParametersInSuspend.kt") + public void test32defaultParametersInSuspend() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt"); + doTest(fileName); + } + @TestMetadata("accessorForSuspend.kt") public void testAccessorForSuspend() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/accessorForSuspend.kt"); @@ -7223,6 +7229,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes doTest(fileName); } + @TestMetadata("manyDefaultParameters.kt") + public void testManyDefaultParameters() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/manyDefaultParameters.kt"); + doTest(fileName); + } + @TestMetadata("modifierFlags.kt") public void testModifierFlags() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/modifierFlags.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 917794eb593..3393a3c37ca 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -4684,6 +4684,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class Coroutines extends AbstractBlackBoxCodegenTest { + @TestMetadata("32defaultParametersInSuspend.kt") + public void test32defaultParametersInSuspend() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt"); + doTest(fileName); + } + @TestMetadata("accessorForSuspend.kt") public void testAccessorForSuspend() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/accessorForSuspend.kt"); @@ -7223,6 +7229,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("manyDefaultParameters.kt") + public void testManyDefaultParameters() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/manyDefaultParameters.kt"); + doTest(fileName); + } + @TestMetadata("modifierFlags.kt") public void testModifierFlags() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/modifierFlags.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 938fc94ab2e..703d49474ed 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 @@ -5405,6 +5405,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class Coroutines extends AbstractJsCodegenBoxTest { + @TestMetadata("32defaultParametersInSuspend.kt") + public void test32defaultParametersInSuspend() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/32defaultParametersInSuspend.kt"); + doTest(fileName); + } + @TestMetadata("accessorForSuspend.kt") public void testAccessorForSuspend() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/coroutines/accessorForSuspend.kt"); @@ -8094,6 +8100,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that."); } + @TestMetadata("manyDefaultParameters.kt") + public void testManyDefaultParameters() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/manyDefaultParameters.kt"); + doTest(fileName); + } + @TestMetadata("modifierFlags.kt") public void testModifierFlags() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/modifierFlags.kt");