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.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user