From 7a9af072b43f95f94212ac9d652733f2e1c4debc Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 7 Jul 2016 17:49:42 +0300 Subject: [PATCH] Fix ClassCastException when data object is being analyzed #KT-12687 Fixed --- .../jetbrains/kotlin/resolve/OverrideResolver.java | 4 ++-- .../diagnostics/tests/dataClasses/dataObject.kt | 1 + .../diagnostics/tests/dataClasses/dataObject.txt | 13 +++++++++++++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/dataClasses/dataObject.kt create mode 100644 compiler/testData/diagnostics/tests/dataClasses/dataObject.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index ae25e8dcf21..08db8cfac51 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -286,7 +286,7 @@ public class OverrideResolver { } } - private void checkOverridesInAClass(@NotNull ClassDescriptorWithResolutionScopes classDescriptor, @NotNull final KtClassOrObject klass) { + private void checkOverridesInAClass(@NotNull ClassDescriptorWithResolutionScopes classDescriptor, @NotNull KtClassOrObject klass) { // Check overrides for internal consistency for (CallableMemberDescriptor member : classDescriptor.getDeclaredCallableMembers()) { checkOverrideForMember(member); @@ -1056,7 +1056,7 @@ public class OverrideResolver { @NotNull private static PsiElement findDataModifierForDataClass(@NotNull DeclarationDescriptor dataClass) { - KtClass classDeclaration = (KtClass) DescriptorToSourceUtils.getSourceFromDescriptor(dataClass); + KtClassOrObject classDeclaration = (KtClassOrObject) DescriptorToSourceUtils.getSourceFromDescriptor(dataClass); if (classDeclaration != null && classDeclaration.getModifierList() != null) { PsiElement modifier = classDeclaration.getModifierList().getModifier(KtTokens.DATA_KEYWORD); if (modifier != null) { diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt b/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt new file mode 100644 index 00000000000..c9a3046365c --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt @@ -0,0 +1 @@ +data object Object(val x: Int, val y: Int) diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataObject.txt b/compiler/testData/diagnostics/tests/dataClasses/dataObject.txt new file mode 100644 index 00000000000..b514c78534d --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataClasses/dataObject.txt @@ -0,0 +1,13 @@ +package + +public data object Object { + private constructor Object(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int) + public final val x: kotlin.Int + public final val y: kotlin.Int + public final operator /*synthesized*/ fun component1(): kotlin.Int + public final operator /*synthesized*/ fun component2(): kotlin.Int + public final /*synthesized*/ fun copy(/*0*/ x: kotlin.Int = ..., /*1*/ y: kotlin.Int = ...): Object + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 7b28522df78..94c13d3dd1b 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -4164,6 +4164,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("dataObject.kt") + public void testDataObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dataClasses/dataObject.kt"); + doTest(fileName); + } + @TestMetadata("emptyConstructor.kt") public void testEmptyConstructor() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dataClasses/emptyConstructor.kt");