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 f2a8108fdf4..1e7c95ab95b 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 @@ -155,6 +155,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator { JsExpression referenceEqual = JsAstUtils.equality(JsLiteral.THIS, new JsNameRef(paramName)); JsExpression isNotNull = JsAstUtils.inequality(new JsNameRef(paramName), JsLiteral.NULL); + JsExpression otherIsObject = JsAstUtils.typeof(paramName.makeRef(), context.program().getStringLiteral("object")); JsExpression prototypeEqual = JsAstUtils.equality(new JsInvocation(new JsNameRef("getPrototypeOf", new JsNameRef("Object")), JsLiteral.THIS), new JsInvocation(new JsNameRef("getPrototypeOf", new JsNameRef("Object")), new JsNameRef(paramName))); @@ -175,7 +176,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator { assert fieldChain != null; JsExpression returnExpression = - JsAstUtils.or(referenceEqual, JsAstUtils.and(isNotNull, JsAstUtils.and(prototypeEqual, fieldChain))); + JsAstUtils.or(referenceEqual, JsAstUtils.and(isNotNull, JsAstUtils.and(otherIsObject, JsAstUtils.and(prototypeEqual, fieldChain)))); functionObj.getBody().getStatements().add(new JsReturn(returnExpression)); } diff --git a/js/js.translator/testData/dataClass/cases/equals.kt b/js/js.translator/testData/dataClass/cases/equals.kt index 46421c58d67..8baf4efbdf7 100644 --- a/js/js.translator/testData/dataClass/cases/equals.kt +++ b/js/js.translator/testData/dataClass/cases/equals.kt @@ -37,5 +37,7 @@ fun box(): String { assertNotEquals(ho1, ho2) assertNotEquals(ho1, ho3) + assertTrue((d1 : Any) != "") + return "OK" } \ No newline at end of file