Change Signature: Process Kotlin-side calls of Java methods overriding Kotlin declarations
This commit is contained in:
+20
@@ -21,6 +21,8 @@ import com.intellij.openapi.project.Project;
|
|||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
|
import com.intellij.psi.search.SearchScope;
|
||||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import com.intellij.refactoring.changeSignature.ChangeInfo;
|
import com.intellij.refactoring.changeSignature.ChangeInfo;
|
||||||
@@ -43,6 +45,7 @@ import kotlin.Unit;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
|
import org.jetbrains.kotlin.idea.JetFileType;
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
|
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde;
|
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde;
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.JetFileReferencesResolver;
|
import org.jetbrains.kotlin.idea.codeInsight.JetFileReferencesResolver;
|
||||||
@@ -93,6 +96,23 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result.add(functionUsageInfo);
|
result.add(functionUsageInfo);
|
||||||
|
|
||||||
|
PsiElement callee = functionUsageInfo.getElement();
|
||||||
|
if (callee == null) continue;
|
||||||
|
|
||||||
|
SearchScope scope = callee.getUseScope();
|
||||||
|
if (scope instanceof GlobalSearchScope) {
|
||||||
|
scope = GlobalSearchScope.getScopeRestrictedByFileTypes((GlobalSearchScope) scope, JetFileType.INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PsiReference reference : ReferencesSearch.search(callee, scope)) {
|
||||||
|
PsiElement element = reference.getElement();
|
||||||
|
JetCallElement callElement = PsiTreeUtil.getParentOfType(element, JetCallElement.class);
|
||||||
|
JetExpression calleeExpression = callElement != null ? callElement.getCalleeExpression() : null;
|
||||||
|
if (calleeExpression != null && PsiTreeUtil.isAncestor(calleeExpression, element, false)) {
|
||||||
|
result.add(new JetFunctionCallUsage(callElement, changeInfo.getMethodDescriptor().getOriginalPrimaryFunction()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -4,4 +4,11 @@ open class A {
|
|||||||
|
|
||||||
class B: A() {
|
class B: A() {
|
||||||
override fun foo(n: Int, s: String, o: Any?): String = ""
|
override fun foo(n: Int, s: String, o: Any?): String = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
A().foo(1, "abc", "def")
|
||||||
|
B().foo(2, "abc", "def")
|
||||||
|
X().foo(3, "abc", "def")
|
||||||
|
Y().foo(4, "abc", "def")
|
||||||
}
|
}
|
||||||
+7
@@ -4,4 +4,11 @@ open class A {
|
|||||||
|
|
||||||
class B: A() {
|
class B: A() {
|
||||||
override fun foo(n: Int): String = ""
|
override fun foo(n: Int): String = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
A().foo(1)
|
||||||
|
B().foo(2)
|
||||||
|
X().foo(3)
|
||||||
|
Y().foo(4)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user