From 90da274eaaf6a85472f1afbb7e7190e2d327f1c5 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 16 Nov 2018 14:14:24 +0300 Subject: [PATCH] KT-28054: Treat inline class constructor accessors specially --- .../jetbrains/kotlin/codegen/FunctionCodegen.java | 5 ++++- .../jetbrains/kotlin/codegen/MemberCodegen.java | 5 ++++- .../kotlin/codegen/state/KotlinTypeMapper.java | 4 +++- .../kotlin/codegen/state/typeMapperUtils.kt | 8 +++++++- ...ssPrivateInlineClassConstructorFromCompanion.kt | 12 ++++++++++++ ...ccessPrivateInlineClassConstructorFromLambda.kt | 14 ++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 10 ++++++++++ .../codegen/LightAnalysisModeTestGenerated.java | 10 ++++++++++ .../codegen/ir/IrBlackBoxCodegenTestGenerated.java | 10 ++++++++++ .../semantics/IrJsCodegenBoxTestGenerated.java | 10 ++++++++++ .../test/semantics/JsCodegenBoxTestGenerated.java | 10 ++++++++++ 11 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/accessPrivateInlineClassConstructorFromCompanion.kt create mode 100644 compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/accessPrivateInlineClassConstructorFromLambda.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 0849f624483..87e5a5c2735 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.codegen.coroutines.SuspendFunctionGenerationStrategy import org.jetbrains.kotlin.codegen.coroutines.SuspendInlineFunctionGenerationStrategy; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; +import org.jetbrains.kotlin.codegen.state.TypeMapperUtilsKt; import org.jetbrains.kotlin.config.JvmDefaultMode; import org.jetbrains.kotlin.config.JvmTarget; import org.jetbrains.kotlin.config.LanguageFeature; @@ -189,7 +190,9 @@ public class FunctionCodegen { @NotNull MethodContext methodContext, @NotNull FunctionGenerationStrategy strategy ) { - OwnerKind contextKind = methodContext.getContextKind(); + OwnerKind contextKind = TypeMapperUtilsKt.isInlineClassConstructorAccessor(functionDescriptor) + ? OwnerKind.ERASED_INLINE_CLASS + : methodContext.getContextKind(); DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration(); if (isInterface(containingDeclaration) && !processInterfaceMethod(functionDescriptor, contextKind, false, false, state.getJvmDefaultMode())) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index cb1d5cc0248..9ce0e225a0c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.codegen.inline.ReifiedTypeParametersUsages; import org.jetbrains.kotlin.codegen.inline.SourceMapper; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; +import org.jetbrains.kotlin.codegen.state.TypeMapperUtilsKt; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl; import org.jetbrains.kotlin.descriptors.annotations.Annotations; @@ -873,7 +874,9 @@ public abstract class MemberCodegen