KT-38003 works for Java implementations too

This commit is contained in:
Valentin Kipyatkov
2020-04-08 14:33:08 +03:00
parent 2b83e3721a
commit 84c9692332
4 changed files with 27 additions and 8 deletions
@@ -7,7 +7,9 @@ package org.jetbrains.kotlin.idea.slicer
import com.intellij.codeInsight.highlighting.ReadWriteAccessDetector.Access
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.impl.light.LightMemberReference
import com.intellij.slicer.JavaSliceUsage
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.cfg.pseudocode.PseudoValue
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction
@@ -68,12 +70,21 @@ class OutflowSlicer(
val callable = variable.ownerFunction as? KtCallableDeclaration
callable?.forEachOverridingElement(scope = analysisScope) { _, overridingMember ->
//TODO: Java overriders
if (overridingMember is KtCallableDeclaration) {
val parameters = overridingMember.valueParameters
check(parameters.size == callable.valueParameters.size)
val overridingParameter = parameters[variable.parameterIndex()]
overridingParameter.passToProcessor()
when (overridingMember) {
is KtCallableDeclaration -> {
val parameters = overridingMember.valueParameters
check(parameters.size == callable.valueParameters.size)
parameters[variable.parameterIndex()].passToProcessor()
}
is PsiMethod -> {
val parameters = overridingMember.parameterList.parameters
check(parameters.size == callable.valueParameters.size)
parameters[variable.parameterIndex()].passToProcessor()
processor.process(JavaSliceUsage.createRootUsage(parameters[variable.parameterIndex()], parentUsage.params))
}
else -> {} // not supported
}
true
}
@@ -0,0 +1,5 @@
class JavaClass implements I {
public void foo(Object p) {
System.out.println(p);
}
}
+1 -1
View File
@@ -6,7 +6,7 @@ interface I {
class C : I {
override fun foo(p: Any) {
println(p)
println(p) // this usage will be shown twice due to bug in Java implementation: https://youtrack.jetbrains.com/issue/IDEA-236958
}
}
@@ -1,4 +1,7 @@
14 i.foo(<bold>s</bold>)
4 fun foo(<bold>p: Any</bold>)
2 public void foo(Object <bold>p</bold>) {
3 System.out.println(<bold>p</bold>);
9 println(<bold>p</bold>) // this usage will be shown twice due to bug in Java implementation: https://youtrack.jetbrains.com/issue/IDEA-236958
8 override fun foo(<bold>p: Any</bold>) {
9 println(<bold>p</bold>)
9 DUPLICATE: println(<bold>p</bold>) // this usage will be shown twice due to bug in Java implementation: https://youtrack.jetbrains.com/issue/IDEA-236958