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.codeInsight.highlighting.ReadWriteAccessDetector.Access
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.impl.light.LightMemberReference import com.intellij.psi.impl.light.LightMemberReference
import com.intellij.slicer.JavaSliceUsage
import com.intellij.usageView.UsageInfo import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.cfg.pseudocode.PseudoValue import org.jetbrains.kotlin.cfg.pseudocode.PseudoValue
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction
@@ -68,12 +70,21 @@ class OutflowSlicer(
val callable = variable.ownerFunction as? KtCallableDeclaration val callable = variable.ownerFunction as? KtCallableDeclaration
callable?.forEachOverridingElement(scope = analysisScope) { _, overridingMember -> callable?.forEachOverridingElement(scope = analysisScope) { _, overridingMember ->
//TODO: Java overriders when (overridingMember) {
if (overridingMember is KtCallableDeclaration) { is KtCallableDeclaration -> {
val parameters = overridingMember.valueParameters val parameters = overridingMember.valueParameters
check(parameters.size == callable.valueParameters.size) check(parameters.size == callable.valueParameters.size)
val overridingParameter = parameters[variable.parameterIndex()] parameters[variable.parameterIndex()].passToProcessor()
overridingParameter.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 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 { class C : I {
override fun foo(p: Any) { 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>) 14 i.foo(<bold>s</bold>)
4 fun foo(<bold>p: Any</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>) { 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