Change Signature: Fix processing of top-level declarations usages in Java (old/new package facades are supported)

This commit is contained in:
Alexey Sedunov
2015-09-14 16:54:12 +03:00
committed by Dmitry Jemerov
parent 9e6c0e7ee2
commit 708f7fc51f
4 changed files with 9 additions and 5 deletions
@@ -258,7 +258,11 @@ public open class JetChangeInfo(
javaChangeInfos = null
}
public fun getOrCreateJavaChangeInfos(): List<JavaChangeInfo>? {
public fun getOrCreateJavaChangeInfos(multipleLightMethodsWithEqualNames: Boolean = false): List<JavaChangeInfo>? {
fun filterLightMethods(list: List<PsiMethod>): List<PsiMethod> {
return if (multipleLightMethodsWithEqualNames) list else list.groupBy { it.name }.values().map { it.firstOrNull() }.filterNotNull()
}
/*
* When primaryMethodUpdated is false, changes to the primary Kotlin declaration are already confirmed, but not yet applied.
* It means that originalPsiMethod has already expired, but new one can't be created until Kotlin declaration is updated
@@ -350,7 +354,7 @@ public open class JetChangeInfo(
if (javaChangeInfos == null) {
val method = getMethod()
javaChangeInfos = (originalPsiMethods zip method.toLightMethods()).map {
javaChangeInfos = (filterLightMethods(originalPsiMethods) zip filterLightMethods(method.toLightMethods())).map {
val (originalPsiMethod, currentPsiMethod) = it
when (method) {
@@ -48,7 +48,7 @@ public class JetChangeSignatureProcessor(project: Project,
override fun findUsages(): Array<UsageInfo> {
val allUsages = ArrayList<UsageInfo>()
getChangeInfo().getOrCreateJavaChangeInfos()?.let { javaChangeInfos ->
getChangeInfo().getOrCreateJavaChangeInfos(true)?.let { javaChangeInfos ->
val javaProcessor = JavaChangeSignatureUsageProcessor()
javaChangeInfos.mapTo(allUsages) {
KotlinWrapperForJavaUsageInfos(it, javaProcessor.findUsages(it), getChangeInfo().getMethod())
@@ -966,7 +966,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
boolean isJavaMethodUsage = isJavaMethodUsage(usageInfo);
if (usageInfo instanceof KotlinWrapperForJavaUsageInfos) {
List<JavaChangeInfo> javaChangeInfos = ((JetChangeInfo) changeInfo).getOrCreateJavaChangeInfos();
List<JavaChangeInfo> javaChangeInfos = ((JetChangeInfo) changeInfo).getOrCreateJavaChangeInfos(false);
assert javaChangeInfos != null : "JavaChangeInfo not found: " + method.getText();
KotlinWrapperForJavaUsageInfos wrapperForJavaUsageInfos = (KotlinWrapperForJavaUsageInfos) usageInfo;
@@ -1,4 +1,4 @@
import static _DefaultPackage.bar;
import static FunctionRenameJavaUsagesBeforeKt.bar;
class J {
void test() {