mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move static members: correct result ref (IDEA-93582)
This commit is contained in:
@@ -287,6 +287,7 @@ public class ChangeContextUtil {
|
||||
try{
|
||||
PsiExpression qualifier = refExpr.getQualifierExpression();
|
||||
if (!(qualifier instanceof PsiReferenceExpression)) return false;
|
||||
if (refExpr.getTypeParameters().length > 0) return false;
|
||||
PsiElement qualifierRefElement = ((PsiReferenceExpression)qualifier).resolve();
|
||||
if (!(qualifierRefElement instanceof PsiClass)) return false;
|
||||
PsiElement refElement = refExpr.resolve();
|
||||
|
||||
+13
-1
@@ -17,8 +17,10 @@ package com.intellij.refactoring.move.moveMembers;
|
||||
|
||||
import com.intellij.codeInsight.ChangeContextUtil;
|
||||
import com.intellij.codeInsight.highlighting.ReadWriteAccessDetector;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.*;
|
||||
@@ -171,7 +173,17 @@ public class MoveJavaMemberHandler implements MoveMemberHandler {
|
||||
changeQualifier(refExpr, usage.qualifierClass, usage.member);
|
||||
}
|
||||
else {
|
||||
refExpr.setQualifierExpression(null);
|
||||
final PsiReferenceParameterList parameterList = refExpr.getParameterList();
|
||||
if (parameterList != null && parameterList.getTypeArguments().length == 0){
|
||||
refExpr.setQualifierExpression(null);
|
||||
} else {
|
||||
final Project project = element.getProject();
|
||||
final PsiClass targetClass =
|
||||
JavaPsiFacade.getInstance(project).findClass(options.getTargetClassName(), GlobalSearchScope.projectScope(project));
|
||||
if (targetClass != null) {
|
||||
changeQualifier(refExpr, targetClass, usage.member);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // no qualifier
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package pack1;
|
||||
|
||||
interface Eff<A, B> {
|
||||
B f(A a);
|
||||
}
|
||||
|
||||
abstract class POne<A> {
|
||||
abstract A _1();
|
||||
|
||||
}
|
||||
|
||||
final class Hooray<A> {
|
||||
public <B> Hooray<B> map(final Eff<A, B> f) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package pack1;
|
||||
|
||||
public class C {
|
||||
static <A> POne<Hooray<A>> sequence(final Hooray<POne<A>> as) {
|
||||
return new POne<Hooray<A>>() {
|
||||
public Hooray<A> _1() {
|
||||
return as.map(C.<A>__1());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static <A> Eff<POne<A>, A> __1() {
|
||||
return POne::_1;
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package pack1;
|
||||
|
||||
interface Eff<A, B> {
|
||||
B f(A a);
|
||||
}
|
||||
|
||||
abstract class POne<A> {
|
||||
abstract A _1();
|
||||
|
||||
static <A> POne<Hooray<A>> sequence(final Hooray<POne<A>> as) {
|
||||
return new POne<Hooray<A>>() {
|
||||
public Hooray<A> _1() {
|
||||
return as.map(POne.<A>__1());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static <A> Eff<POne<A>, A> __1() {
|
||||
return POne::_1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
final class Hooray<A> {
|
||||
public <B> Hooray<B> map(final Eff<A, B> f) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package pack1;
|
||||
|
||||
public class C {
|
||||
}
|
||||
@@ -57,6 +57,10 @@ public class MoveMembersTest extends MultiFileTestCase {
|
||||
doTest("pack1.A", "pack1.C", 0, 1, 2);
|
||||
}
|
||||
|
||||
public void testParameterizedRefOn() throws Exception {
|
||||
doTest("pack1.POne", "pack1.C", 1, 2);
|
||||
}
|
||||
|
||||
public void testIDEADEV12448() throws Exception {
|
||||
doTest("B", "A", false, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user