From a79efd0768fc00aa6113e42f6d242bcd45a9f3e5 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 12 Jun 2020 18:16:15 +0300 Subject: [PATCH] filter out references in javadoc to fix IDEA-185139 A method's call hierarchy shows also references --- .../idea/hierarchy/calls/KotlinCallerTreeStructure.kt | 8 ++++++-- .../callers/insideJavadoc/InsideJavadoc_verification.xml | 2 ++ .../hierarchy/calls/callers/insideJavadoc/main0.kt | 3 +++ .../hierarchy/calls/callers/insideJavadoc/main1.java | 8 ++++++++ .../kotlin/idea/hierarchy/HierarchyTestGenerated.java | 5 +++++ 5 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 idea/testData/hierarchy/calls/callers/insideJavadoc/InsideJavadoc_verification.xml create mode 100644 idea/testData/hierarchy/calls/callers/insideJavadoc/main0.kt create mode 100644 idea/testData/hierarchy/calls/callers/insideJavadoc/main1.java diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerTreeStructure.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerTreeStructure.kt index 8efa5bda2d8..630519983c4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerTreeStructure.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerTreeStructure.kt @@ -14,6 +14,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiMember import com.intellij.psi.PsiMethod import com.intellij.psi.PsiReference +import com.intellij.psi.impl.source.resolve.JavaResolveUtil import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor @@ -96,7 +97,10 @@ class KotlinCallerTreeStructure( // If reference belongs to property initializer, show enclosing declaration instead elementToSearch.processAllUsages(findOptions) { - processReference(it.reference, it.element ?: return@processAllUsages, nodeDescriptor, callerToDescriptorMap, false) + val refElement = it.element + if (refElement != null && !JavaResolveUtil.isInJavaDoc(refElement)) { + processReference(it.reference, refElement, nodeDescriptor, callerToDescriptorMap, false) + } } return callerToDescriptorMap.values @@ -129,4 +133,4 @@ class KotlinCallerTreeStructure( } override fun isAlwaysShowPlus() = true -} \ No newline at end of file +} diff --git a/idea/testData/hierarchy/calls/callers/insideJavadoc/InsideJavadoc_verification.xml b/idea/testData/hierarchy/calls/callers/insideJavadoc/InsideJavadoc_verification.xml new file mode 100644 index 00000000000..33f43154523 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/insideJavadoc/InsideJavadoc_verification.xml @@ -0,0 +1,2 @@ + + diff --git a/idea/testData/hierarchy/calls/callers/insideJavadoc/main0.kt b/idea/testData/hierarchy/calls/callers/insideJavadoc/main0.kt new file mode 100644 index 00000000000..83f95c0f5d6 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/insideJavadoc/main0.kt @@ -0,0 +1,3 @@ +open class K { + public fun persist() {} +} diff --git a/idea/testData/hierarchy/calls/callers/insideJavadoc/main1.java b/idea/testData/hierarchy/calls/callers/insideJavadoc/main1.java new file mode 100644 index 00000000000..ee4f243fc62 --- /dev/null +++ b/idea/testData/hierarchy/calls/callers/insideJavadoc/main1.java @@ -0,0 +1,8 @@ +class X extends K { + /** + * see {@link #persist()} + */ + int f() { + return 0; + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java index 8247a2b4b95..c75e34d9b9a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/hierarchy/HierarchyTestGenerated.java @@ -314,6 +314,11 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest { runTest("idea/testData/hierarchy/calls/callers/callInsideLambda/"); } + @TestMetadata("insideJavadoc") + public void testInsideJavadoc() throws Exception { + runTest("idea/testData/hierarchy/calls/callers/insideJavadoc/"); + } + @TestMetadata("kotlinClass") public void testKotlinClass() throws Exception { runTest("idea/testData/hierarchy/calls/callers/kotlinClass/");