From 06de3de1a64e412b2e39710827be527cf8d210ad Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 13 Apr 2020 12:42:16 +0300 Subject: [PATCH] Do not show doc-comment references in data flow --- .../jetbrains/kotlin/idea/slicer/OutflowSlicer.kt | 6 +++++- idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt | 3 +++ idea/testData/slicer/outflow/docCommentRefs.java | 6 ++++++ idea/testData/slicer/outflow/docCommentRefs.kt | 12 ++++++++++++ .../slicer/outflow/docCommentRefs.results.txt | 3 +++ idea/testData/slicer/outflow/docCommentRefs2.kt | 11 +++++++++++ .../slicer/outflow/docCommentRefs2.results.txt | 3 +++ .../kotlin/idea/slicer/SlicerTreeTestGenerated.java | 10 ++++++++++ 8 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 idea/testData/slicer/outflow/docCommentRefs.java create mode 100644 idea/testData/slicer/outflow/docCommentRefs.kt create mode 100644 idea/testData/slicer/outflow/docCommentRefs.results.txt create mode 100644 idea/testData/slicer/outflow/docCommentRefs2.kt create mode 100644 idea/testData/slicer/outflow/docCommentRefs2.results.txt diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt index ff1434719fa..02645e37a08 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt @@ -6,8 +6,10 @@ package org.jetbrains.kotlin.idea.slicer import com.intellij.codeInsight.highlighting.ReadWriteAccessDetector.Access +import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod +import com.intellij.psi.util.parentOfType import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.builtins.isExtensionFunctionType import org.jetbrains.kotlin.builtins.isFunctionType @@ -95,7 +97,9 @@ class OutflowSlicer( fun processVariableAccess(usageInfo: UsageInfo) { val refElement = usageInfo.element ?: return if (refElement !is KtExpression) { - refElement.passToProcessor() + if (refElement.parentOfType() == null) { + refElement.passToProcessor() + } return } diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index 5e139d2df08..fb0c61e1211 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -5,9 +5,11 @@ package org.jetbrains.kotlin.idea.slicer +import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod import com.intellij.psi.search.SearchScope +import com.intellij.psi.util.parentOfType import com.intellij.slicer.JavaSliceUsage import com.intellij.usageView.UsageInfo import com.intellij.util.containers.addIfNotNull @@ -171,6 +173,7 @@ abstract class Slicer( is KtDeclaration -> { val usageProcessor: (UsageInfo) -> Unit = processor@ { usageInfo -> val element = usageInfo.element ?: return@processor + if (element.parentOfType() != null) return@processor val sliceUsage = KotlinSliceUsage(element, parentUsage, mode, false) sliceProducer.produceAndProcess(sliceUsage, mode, parentUsage, processor) } diff --git a/idea/testData/slicer/outflow/docCommentRefs.java b/idea/testData/slicer/outflow/docCommentRefs.java new file mode 100644 index 00000000000..1d74822da8d --- /dev/null +++ b/idea/testData/slicer/outflow/docCommentRefs.java @@ -0,0 +1,6 @@ +/** + * @see KotlinClass#foo() + */ +class JavaClass { + +} \ No newline at end of file diff --git a/idea/testData/slicer/outflow/docCommentRefs.kt b/idea/testData/slicer/outflow/docCommentRefs.kt new file mode 100644 index 00000000000..c43a2ae1f87 --- /dev/null +++ b/idea/testData/slicer/outflow/docCommentRefs.kt @@ -0,0 +1,12 @@ +// FLOW: OUT + +class KotlinClass { + fun foo(): Int = 10 + + /** + * Uses [foo] + */ + fun bar() { + val v = foo() + } +} diff --git a/idea/testData/slicer/outflow/docCommentRefs.results.txt b/idea/testData/slicer/outflow/docCommentRefs.results.txt new file mode 100644 index 00000000000..24862e3c6db --- /dev/null +++ b/idea/testData/slicer/outflow/docCommentRefs.results.txt @@ -0,0 +1,3 @@ +4 fun foo(): Int = 10 +10 val v = foo() +10 val v = foo() diff --git a/idea/testData/slicer/outflow/docCommentRefs2.kt b/idea/testData/slicer/outflow/docCommentRefs2.kt new file mode 100644 index 00000000000..dd6c8e79ea1 --- /dev/null +++ b/idea/testData/slicer/outflow/docCommentRefs2.kt @@ -0,0 +1,11 @@ +// FLOW: OUT + +val String.foo: Int + get() = 10 + +/** + * Uses [foo] + */ +fun bar() { + val v = "".foo +} diff --git a/idea/testData/slicer/outflow/docCommentRefs2.results.txt b/idea/testData/slicer/outflow/docCommentRefs2.results.txt new file mode 100644 index 00000000000..19d4b4f8779 --- /dev/null +++ b/idea/testData/slicer/outflow/docCommentRefs2.results.txt @@ -0,0 +1,3 @@ +3 val String.foo: Int +10 val v = "".foo +10 val v = "".foo diff --git a/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTreeTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTreeTestGenerated.java index e5f984eb730..73567e58da6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTreeTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTreeTestGenerated.java @@ -513,6 +513,16 @@ public class SlicerTreeTestGenerated extends AbstractSlicerTreeTest { runTest("idea/testData/slicer/outflow/diamondHierarchyMiddleInterfaceFun.kt"); } + @TestMetadata("docCommentRefs.kt") + public void testDocCommentRefs() throws Exception { + runTest("idea/testData/slicer/outflow/docCommentRefs.kt"); + } + + @TestMetadata("docCommentRefs2.kt") + public void testDocCommentRefs2() throws Exception { + runTest("idea/testData/slicer/outflow/docCommentRefs2.kt"); + } + @TestMetadata("doubleLambdaResult.kt") public void testDoubleLambdaResult() throws Exception { runTest("idea/testData/slicer/outflow/doubleLambdaResult.kt");