JS: equals, hashCode, toString support in inline classes
This commit is contained in:
committed by
Ilya Gorbunov
parent
a8596a9cd6
commit
a11c4871ea
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// IGNORE_BACKEND: JVM_IR, JS_IR, JS
|
// IGNORE_BACKEND: JVM_IR, JS_IR
|
||||||
|
|
||||||
inline class InlineFloat(val data: Float)
|
inline class InlineFloat(val data: Float)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// IGNORE_BACKEND: JVM_IR, JS
|
// IGNORE_BACKEND: JVM_IR
|
||||||
|
|
||||||
inline class Z(val value: Int)
|
inline class Z(val value: Int)
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -126,8 +126,9 @@ class ClassTranslator private constructor(
|
|||||||
addSuperclassReferences()
|
addSuperclassReferences()
|
||||||
classDeclaration.secondaryConstructors.forEach { generateSecondaryConstructor(context, it) }
|
classDeclaration.secondaryConstructors.forEach { generateSecondaryConstructor(context, it) }
|
||||||
|
|
||||||
if (descriptor.isData && classDeclaration is KtClassOrObject) {
|
if ((descriptor.isData || descriptor.isInline) && classDeclaration is KtClassOrObject) {
|
||||||
JsDataClassGenerator(classDeclaration, context).generate()
|
// TODO is `inline data class` a bug or a feature?
|
||||||
|
JsDataClassGenerator(classDeclaration, context, !descriptor.isData).generate()
|
||||||
}
|
}
|
||||||
|
|
||||||
emitConstructors(nonConstructorContext, nonConstructorContext.endDeclaration())
|
emitConstructors(nonConstructorContext, nonConstructorContext.endDeclaration())
|
||||||
|
|||||||
+8
-1
@@ -41,13 +41,18 @@ import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.or;
|
|||||||
class JsDataClassGenerator extends DataClassMethodGenerator {
|
class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||||
private final TranslationContext context;
|
private final TranslationContext context;
|
||||||
|
|
||||||
JsDataClassGenerator(KtClassOrObject klass, TranslationContext context) {
|
private final boolean isInline;
|
||||||
|
|
||||||
|
JsDataClassGenerator(KtClassOrObject klass, TranslationContext context, boolean isInline) {
|
||||||
super(klass, context.bindingContext());
|
super(klass, context.bindingContext());
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
this.isInline = isInline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateComponentFunction(@NotNull FunctionDescriptor function, @NotNull ValueParameterDescriptor parameter) {
|
public void generateComponentFunction(@NotNull FunctionDescriptor function, @NotNull ValueParameterDescriptor parameter) {
|
||||||
|
if (isInline) return;
|
||||||
|
|
||||||
PropertyDescriptor propertyDescriptor = context.bindingContext().get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, parameter);
|
PropertyDescriptor propertyDescriptor = context.bindingContext().get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, parameter);
|
||||||
assert propertyDescriptor != null : "Property descriptor is expected to be non-null";
|
assert propertyDescriptor != null : "Property descriptor is expected to be non-null";
|
||||||
|
|
||||||
@@ -60,6 +65,8 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateCopyFunction(@NotNull FunctionDescriptor function, @NotNull List<? extends KtParameter> constructorParameters) {
|
public void generateCopyFunction(@NotNull FunctionDescriptor function, @NotNull List<? extends KtParameter> constructorParameters) {
|
||||||
|
if (isInline) return;
|
||||||
|
|
||||||
JsFunction functionObj = generateJsMethod(function);
|
JsFunction functionObj = generateJsMethod(function);
|
||||||
|
|
||||||
assert function.getValueParameters().size() == constructorParameters.size();
|
assert function.getValueParameters().size() == constructorParameters.size();
|
||||||
|
|||||||
Reference in New Issue
Block a user