diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index ebfa85bfbda..8f02476191f 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -3000,12 +3000,6 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @Test - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @Test @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { @@ -35559,6 +35553,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/reflection/methodsFromAny/parametersToString.kt"); } + @Test + @TestMetadata("propertyAccessorEqualsHashCode.kt") + public void testPropertyAccessorEqualsHashCode() throws Exception { + runTest("compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt"); + } + @Test @TestMetadata("propertyEqualsHashCode.kt") public void testPropertyEqualsHashCode() throws Exception { diff --git a/compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt b/compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt deleted file mode 100644 index 9235e7d3130..00000000000 --- a/compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt +++ /dev/null @@ -1,64 +0,0 @@ -// DONT_TARGET_EXACT_BACKEND: WASM -// WASM_MUTE_REASON: IGNORED_IN_JS -// IGNORE_BACKEND: JS_IR -// IGNORE_BACKEND: JS_IR_ES6 -// TODO: investigate should it be ran for JS or not -// IGNORE_BACKEND: JS, NATIVE - -// WITH_REFLECT - -import kotlin.reflect.KMutableProperty1 -import kotlin.reflect.KMutableProperty2 -import kotlin.reflect.full.* - -class C { - var prop = 42 - var String.prop: Int - get() = 42 - set(value) {} -} - -val cProp = C()::prop -val C_prop = C::prop -val C_propReflect = C::class.memberProperties.find { it.name == "prop" } as? KMutableProperty1 ?: throw AssertionError() -val C_extPropReflect = C::class.memberExtensionProperties.find { it.name == "prop" } as? KMutableProperty2 ?: throw AssertionError() - -fun box() = - when { - C_prop.getter != C_propReflect.getter -> "C_prop.getter != C_propReflect.getter" - C_prop.setter != C_propReflect.setter -> "C_prop.setter != C_propReflect.setter" - C_propReflect.getter != C_prop.getter -> "C_propReflect.getter != C_prop.getter" - C_propReflect.setter != C_prop.setter -> "C_propReflect.setter != C_prop.setter" - - // reflexive test of acessors of KProperty0, KProperty1, KProperty2 - cProp.getter != cProp.getter -> "cProp.getter != cProp.getter" - cProp.setter != cProp.setter -> "cProp.setter != cProp.setter" - C_prop.getter != C_prop.getter -> "C_prop.getter != C_prop.getter" - C_prop.setter != C_prop.setter -> "C_prop.setter != C_prop.setter" - C_propReflect.getter != C_propReflect.getter -> "C_propReflect.getter != C_propReflect.getter" - C_propReflect.setter != C_propReflect.setter -> "C_propReflect.setter != C_propReflect.setter" - C_extPropReflect.getter != C_extPropReflect.getter -> "C_extPropReflect.getter != C_extPropReflect.getter" - C_extPropReflect.setter != C_extPropReflect.setter -> "C_extPropReflect.setter != C_extPropReflect.setter" - - // acessors of KProperty0, Kproperty1 and Kproperty2 are not equal to each other - cProp.getter == C_prop.getter -> "cProp.getter == C_prop.getter" - cProp.setter == C_prop.setter -> "cProp.setter == C_prop.setter" - C_prop.getter == cProp.getter -> "C_prop.getter == cProp.getter" - C_prop.setter == cProp.setter -> "C_prop.setter == cProp.setter" - cProp.getter == C_propReflect.getter -> "cProp.getter == C_propReflect.getter" - cProp.setter == C_propReflect.setter -> "cProp.setter == C_propReflect.setter" - C_propReflect.getter == cProp.getter -> "C_propReflect.getter == cProp.getter" - C_propReflect.setter == cProp.setter -> "C_propReflect.setter == cProp.setter" - - cProp.getter == C_extPropReflect.getter -> "cProp.getter == C_extPropReflect.getter" - cProp.setter == C_extPropReflect.setter -> "cProp.setter == C_extPropReflect.setter" - C_extPropReflect.getter == cProp.getter -> "C_extPropReflect.getter == cProp.getter" - C_extPropReflect.setter == cProp.setter -> "C_extPropReflect.setter == cProp.setter" - - C_prop.getter == C_extPropReflect.getter -> "C_prop.getter == C_extPropReflect.getter" - C_prop.setter == C_extPropReflect.setter -> "C_prop.setter == C_extPropReflect.setter" - C_extPropReflect.getter == C_prop.getter -> "C_extPropReflect.getter == C_prop.getter" - C_extPropReflect.setter == C_prop.setter -> "C_extPropReflect.setter == C_prop.setter" - - else -> "OK" - } diff --git a/compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt b/compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt new file mode 100644 index 00000000000..06f58115bdd --- /dev/null +++ b/compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt @@ -0,0 +1,69 @@ +// TARGET_BACKEND: JVM +// WITH_REFLECT + +import kotlin.reflect.KMutableProperty1 +import kotlin.reflect.KMutableProperty2 +import kotlin.reflect.full.* + +class C(val token: Int) { + var member = 42 + var String.memberExtension: Int + get() = 42 + set(value) {} + + override fun equals(other: Any?): Boolean = + other is C && token == other.token +} + +var String.topLevel: String + get() = this + set(value) {} + +fun checkEqual(a: Any, b: Any) { + if (a != b || b != a) throw AssertionError("Objects should be equal") + if (a.hashCode() != b.hashCode()) throw AssertionError("Hash codes should be equal") +} + +fun checkNotEqual(a: Any, b: Any) { + if (a == b || b == a) throw AssertionError("Objects should NOT be equal") +} + +fun box(): String { + val unboundMember = C::member + val unboundMemberReflect = C::class.memberProperties.single { it.name == "member" } as KMutableProperty1 + val unboundTopLevel = String::topLevel + + checkEqual(unboundMember.getter, unboundMemberReflect.getter) + checkEqual(unboundMember.setter, unboundMemberReflect.setter) + checkNotEqual(unboundMember.getter, unboundMember.setter) + + val boundMember = C(42)::member + val boundTopLevel = ""::topLevel + + checkEqual(boundMember.getter, boundMember.getter) + checkEqual(boundMember.setter, boundMember.setter) + checkEqual(unboundMember.getter, C::member.getter) + checkEqual(unboundMember.setter, C::member.setter) + + val memberExtension = C::class.memberExtensionProperties.single { it.name == "memberExtension" } as KMutableProperty2 + + // Accessors of KProperty0, KProperty1 and KProperty2 are not equal to each other + checkNotEqual(boundMember.getter, unboundMember.getter) + checkNotEqual(boundMember.setter, unboundMember.setter) + checkNotEqual(boundMember.getter, unboundMemberReflect.getter) + checkNotEqual(boundMember.setter, unboundMemberReflect.setter) + checkNotEqual(boundMember.getter, memberExtension.getter) + checkNotEqual(boundMember.setter, memberExtension.setter) + checkNotEqual(unboundMember.getter, memberExtension.getter) + checkNotEqual(unboundMember.setter, memberExtension.setter) + checkNotEqual(unboundTopLevel.getter, unboundMember.getter) + checkNotEqual(unboundTopLevel.setter, unboundMember.setter) + checkNotEqual(unboundTopLevel.getter, boundTopLevel.getter) + checkNotEqual(unboundTopLevel.setter, boundTopLevel.setter) + + // Check that receiver value has effect on equals + checkNotEqual(C(42)::member.getter, C(43)::member.getter) + checkNotEqual(C(42)::member.setter, C(43)::member.setter) + + return "OK" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index dbc33e4a07e..59de5b9853e 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -3000,12 +3000,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @Test - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @Test @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { @@ -35535,6 +35529,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/reflection/methodsFromAny/parametersToString.kt"); } + @Test + @TestMetadata("propertyAccessorEqualsHashCode.kt") + public void testPropertyAccessorEqualsHashCode() throws Exception { + runTest("compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt"); + } + @Test @TestMetadata("propertyEqualsHashCode.kt") public void testPropertyEqualsHashCode() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index b39f2c1a444..af61d1f8a76 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -3000,12 +3000,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @Test - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @Test @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { @@ -35559,6 +35553,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/reflection/methodsFromAny/parametersToString.kt"); } + @Test + @TestMetadata("propertyAccessorEqualsHashCode.kt") + public void testPropertyAccessorEqualsHashCode() throws Exception { + runTest("compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt"); + } + @Test @TestMetadata("propertyEqualsHashCode.kt") public void testPropertyEqualsHashCode() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 645d742f7dd..af620100757 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -2630,11 +2630,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/equals/receiverInEquals.kt"); @@ -28161,6 +28156,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/reflection/methodsFromAny/parametersToString.kt"); } + @TestMetadata("propertyAccessorEqualsHashCode.kt") + public void testPropertyAccessorEqualsHashCode() throws Exception { + runTest("compiler/testData/codegen/box/reflection/methodsFromAny/propertyAccessorEqualsHashCode.kt"); + } + @TestMetadata("propertyEqualsHashCode.kt") public void testPropertyEqualsHashCode() throws Exception { runTest("compiler/testData/codegen/box/reflection/methodsFromAny/propertyEqualsHashCode.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 8229dae8eda..5cf0d734993 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -1850,11 +1850,6 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/equals/receiverInEquals.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 13371c5f6c6..77a9d04c1bf 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -1850,11 +1850,6 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/equals/receiverInEquals.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 9d6d4e65113..b582707be3a 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -1850,11 +1850,6 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/bound/equals/nullableReceiverInEquals.kt"); } - @TestMetadata("propertyAccessors.kt") - public void testPropertyAccessors() throws Exception { - runTest("compiler/testData/codegen/box/callableReference/bound/equals/propertyAccessors.kt"); - } - @TestMetadata("receiverInEquals.kt") public void testReceiverInEquals() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/equals/receiverInEquals.kt");