diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java index 9ace3331f65..b6be0be35b4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java @@ -69,8 +69,8 @@ public class DescriptorUtils { */ public static boolean isLocal(@NotNull DeclarationDescriptor descriptor) { DeclarationDescriptor current = descriptor; - while (current instanceof MemberDescriptor) { - if (isAnonymousObject(current) || ((DeclarationDescriptorWithVisibility) current).getVisibility() == Visibilities.LOCAL) { + while (current != null) { + if (isAnonymousObject(current) || isDescriptorWithLocalVisibility(current)) { return true; } current = current.getContainingDeclaration(); @@ -78,6 +78,11 @@ public class DescriptorUtils { return false; } + private static boolean isDescriptorWithLocalVisibility(DeclarationDescriptor current) { + return current instanceof DeclarationDescriptorWithVisibility && + ((DeclarationDescriptorWithVisibility) current).getVisibility() == Visibilities.LOCAL; + } + @NotNull public static FqNameUnsafe getFqName(@NotNull DeclarationDescriptor descriptor) { FqName safe = getFqNameSafeIfPossible(descriptor); diff --git a/idea/testData/resolve/references/TypeParameterInAnonymousObject.kt b/idea/testData/resolve/references/TypeParameterInAnonymousObject.kt new file mode 100644 index 00000000000..725ed8f3aaf --- /dev/null +++ b/idea/testData/resolve/references/TypeParameterInAnonymousObject.kt @@ -0,0 +1,7 @@ +val prop = object { + private fun foo(x: K) { + + } +} + +// REF: K diff --git a/idea/testData/resolve/references/ValueParameter.kt b/idea/testData/resolve/references/ValueParameter.kt new file mode 100644 index 00000000000..dce9d88589a --- /dev/null +++ b/idea/testData/resolve/references/ValueParameter.kt @@ -0,0 +1,9 @@ +open class B +class A +val prop = object : B() { + private fun foo(x: A): A { + return x + } +} + +// REF: x diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java index f6dfceb153a..5c38f574575 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java @@ -347,12 +347,24 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest doTest(fileName); } + @TestMetadata("TypeParameterInAnonymousObject.kt") + public void testTypeParameterInAnonymousObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/TypeParameterInAnonymousObject.kt"); + doTest(fileName); + } + @TestMetadata("TypeParameterInFunctionLiteral.kt") public void testTypeParameterInFunctionLiteral() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt"); doTest(fileName); } + @TestMetadata("ValueParameter.kt") + public void testValueParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/ValueParameter.kt"); + doTest(fileName); + } + @TestMetadata("WrongNumberOfTypeArguments.kt") public void testWrongNumberOfTypeArguments() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/WrongNumberOfTypeArguments.kt");