From cc94acdabc2073e47aadc7aff7f78c9b4f1ad96a Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 16 Oct 2015 18:33:08 +0300 Subject: [PATCH] Do not load common for special properties from Java I.e. do not treat getName in Java enum as override of Enum.name --- .../diagnostics/tests/j+k/enumGetOrdinal.kt | 12 ++++++++++ .../diagnostics/tests/j+k/enumGetOrdinal.txt | 22 +++++++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 6 +++++ .../descriptors/LazyJavaClassMemberScope.kt | 9 ++++---- 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.kt create mode 100644 compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.txt diff --git a/compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.kt b/compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.kt new file mode 100644 index 00000000000..e5f13b1d851 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.kt @@ -0,0 +1,12 @@ +// FILE: MyEnum.java + +public enum MyEnum { + A; + public int getOrdinal() {return "";} +} + +// FILE: main.kt + +fun foo() { + MyEnum.A.getOrdinal() +} diff --git a/compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.txt b/compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.txt new file mode 100644 index 00000000000..1e736e33bed --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.txt @@ -0,0 +1,22 @@ +package + +public fun foo(): kotlin.Unit + +public final enum class MyEnum : kotlin.Enum { + enum entry A + + public constructor MyEnum() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: MyEnum!): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun getOrdinal(): kotlin.Int + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final /*synthesized*/ val values: kotlin.Array + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): MyEnum + @kotlin.Deprecated(message = "Use 'values' property instead", replaceWith = kotlin.ReplaceWith(expression = "this.values", imports = {})) public final /*synthesized*/ fun values(): kotlin.Array +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 2b561541b97..e786ce79821 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -8970,6 +8970,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("enumGetOrdinal.kt") + public void testEnumGetOrdinal() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/enumGetOrdinal.kt"); + doTest(fileName); + } + @TestMetadata("fieldOverridesField.kt") public void testFieldOverridesField() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/fieldOverridesField.kt"); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index dc660a2244c..ecc13574854 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -148,11 +148,12 @@ public class LazyJavaClassMemberScope( } private fun PropertyDescriptor.findGetterOverride(): JavaMethodDescriptor? { - val commonProperty = findGetterByName(JvmAbi.getterName(name.asString())) - if (commonProperty != null) return commonProperty + val specialGetterName = getter?.getOverriddenBuiltinWithDifferentJvmName()?.getBuiltinSpecialPropertyGetterName() + if (specialGetterName != null) { + return findGetterByName(specialGetterName) + } - val specialGetterName = getter?.getOverriddenBuiltinWithDifferentJvmName()?.getBuiltinSpecialPropertyGetterName() ?: return null - return findGetterByName(specialGetterName) + return findGetterByName(JvmAbi.getterName(name.asString())) } private fun PropertyDescriptor.findGetterByName(getterName: String): JavaMethodDescriptor? {