From 3ec6ffc90666b23b1da2c1755d856db1a0ef6260 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 16 Mar 2015 21:00:17 +0300 Subject: [PATCH] KT-7007 Go to declaration doesn't work inside enum class #KT-7007 fixed --- .../kotlin/resolve/lazy/ElementResolver.java | 16 +++++++++++----- .../unusedSymbol/property/inEnumSupercall.kt | 11 +++++++++++ idea/testData/resolve/references/InEnumEntry.kt | 9 +++++++++ .../resolve/ReferenceResolveTestGenerated.java | 6 ++++++ 4 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 idea/testData/inspections/unusedSymbol/property/inEnumSupercall.kt create mode 100644 idea/testData/resolve/references/InEnumEntry.kt diff --git a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.java b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.java index 1007e9333fa..d0fde7b24f2 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.java +++ b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.java @@ -81,12 +81,14 @@ public abstract class ElementResolver { JetProperty.class, JetParameter.class, JetDelegationSpecifierList.class, + JetInitializerList.class, JetImportDirective.class, JetAnnotationEntry.class, JetTypeParameter.class, JetTypeConstraint.class, JetPackageDirective.class, - JetCodeFragment.class); + JetCodeFragment.class + ); if (elementOfAdditionalResolve != null && !(elementOfAdditionalResolve instanceof JetParameter)) { if (elementOfAdditionalResolve instanceof JetPackageDirective) { @@ -158,7 +160,10 @@ public abstract class ElementResolver { propertyAdditionalResolve(resolveSession, (JetProperty) resolveElement, trace, file, statementFilter); } else if (resolveElement instanceof JetDelegationSpecifierList) { - delegationSpecifierAdditionalResolve(resolveSession, (JetDelegationSpecifierList) resolveElement, trace, file); + delegationSpecifierAdditionalResolve(resolveSession, (JetClassOrObject) resolveElement.getParent(), trace, file); + } + else if (resolveElement instanceof JetInitializerList) { + delegationSpecifierAdditionalResolve(resolveSession, (JetEnumEntry) resolveElement.getParent(), trace, file); } else if (resolveElement instanceof JetImportDirective) { JetImportDirective importDirective = (JetImportDirective) resolveElement; @@ -341,9 +346,10 @@ public abstract class ElementResolver { private void delegationSpecifierAdditionalResolve( ResolveSession resolveSession, - JetDelegationSpecifierList specifier, BindingTrace trace, JetFile file) { - - JetClassOrObject classOrObject = (JetClassOrObject) specifier.getParent(); + JetClassOrObject classOrObject, + BindingTrace trace, + JetFile file + ) { LazyClassDescriptor descriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject); // Activate resolving of supertypes diff --git a/idea/testData/inspections/unusedSymbol/property/inEnumSupercall.kt b/idea/testData/inspections/unusedSymbol/property/inEnumSupercall.kt new file mode 100644 index 00000000000..fc8252eae2e --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/property/inEnumSupercall.kt @@ -0,0 +1,11 @@ +// KT-7007 Go to declaration doesn't work inside enum class + +val TOP_LEVEL = 5 + +enum class MyEnum(value: Int) { + VALUE : MyEnum(TOP_LEVEL) +} + +fun main(args: Array) { + MyEnum.VALUE +} diff --git a/idea/testData/resolve/references/InEnumEntry.kt b/idea/testData/resolve/references/InEnumEntry.kt new file mode 100644 index 00000000000..c1dae3f014d --- /dev/null +++ b/idea/testData/resolve/references/InEnumEntry.kt @@ -0,0 +1,9 @@ +package test + +val TOP_LEVEL = 5 + +enum class MyEnum(value: Int) { + VALUE : MyEnum(TOP_LEVEL) +} + +// REF: (test).TOP_LEVEL \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java index cfae5c47958..af862b7b31f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java @@ -209,6 +209,12 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest doTest(fileName); } + @TestMetadata("InEnumEntry.kt") + public void testInEnumEntry() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/InEnumEntry.kt"); + doTest(fileName); + } + @TestMetadata("InFunctionParameterType.kt") public void testInFunctionParameterType() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/InFunctionParameterType.kt");