diff --git a/compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt b/compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt index 924908e80bd..925bc8ae730 100644 --- a/compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt +++ b/compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt @@ -1,5 +1,5 @@ // !LANGUAGE: +InlineClasses -// IGNORE_BACKEND: JVM_IR, JS_IR, JS +// IGNORE_BACKEND: JVM_IR, JS_IR inline class InlineFloat(val data: Float) diff --git a/compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt b/compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt index e743830dc1c..b37d53d4aba 100644 --- a/compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt +++ b/compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt @@ -1,5 +1,5 @@ // !LANGUAGE: +InlineClasses -// IGNORE_BACKEND: JVM_IR, JS +// IGNORE_BACKEND: JVM_IR inline class Z(val value: Int) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt index a130c6cbf69..cae0ce89e3b 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt @@ -126,8 +126,9 @@ class ClassTranslator private constructor( addSuperclassReferences() classDeclaration.secondaryConstructors.forEach { generateSecondaryConstructor(context, it) } - if (descriptor.isData && classDeclaration is KtClassOrObject) { - JsDataClassGenerator(classDeclaration, context).generate() + if ((descriptor.isData || descriptor.isInline) && classDeclaration is KtClassOrObject) { + // TODO is `inline data class` a bug or a feature? + JsDataClassGenerator(classDeclaration, context, !descriptor.isData).generate() } emitConstructors(nonConstructorContext, nonConstructorContext.endDeclaration()) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java index d6e898298ea..de5857ac2e8 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/JsDataClassGenerator.java @@ -41,13 +41,18 @@ import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.or; class JsDataClassGenerator extends DataClassMethodGenerator { private final TranslationContext context; - JsDataClassGenerator(KtClassOrObject klass, TranslationContext context) { + private final boolean isInline; + + JsDataClassGenerator(KtClassOrObject klass, TranslationContext context, boolean isInline) { super(klass, context.bindingContext()); this.context = context; + this.isInline = isInline; } @Override public void generateComponentFunction(@NotNull FunctionDescriptor function, @NotNull ValueParameterDescriptor parameter) { + if (isInline) return; + PropertyDescriptor propertyDescriptor = context.bindingContext().get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, parameter); assert propertyDescriptor != null : "Property descriptor is expected to be non-null"; @@ -60,6 +65,8 @@ class JsDataClassGenerator extends DataClassMethodGenerator { @Override public void generateCopyFunction(@NotNull FunctionDescriptor function, @NotNull List constructorParameters) { + if (isInline) return; + JsFunction functionObj = generateJsMethod(function); assert function.getValueParameters().size() == constructorParameters.size();