KT-38003 works for Java implementations too
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user