mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extract enum: more accurate already migrated condition (IDEA-143251)
This commit is contained in:
+24
-5
@@ -19,8 +19,10 @@ import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.psi.MutationUtils;
|
||||
import com.intellij.refactoring.util.FixableUsageInfo;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
|
||||
@@ -51,13 +53,19 @@ public class ReplaceStaticVariableAccess extends FixableUsageInfo {
|
||||
}
|
||||
|
||||
private boolean alreadyMigratedToEnum() {
|
||||
final PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(expression, PsiMethodCallExpression.class);
|
||||
final PsiCallExpression callExpression = PsiTreeUtil.getParentOfType(expression, PsiCallExpression.class);
|
||||
if (callExpression != null) {
|
||||
final PsiElement resolved = callExpression.getMethodExpression().resolve();
|
||||
if (resolved instanceof PsiMethod) {
|
||||
final PsiParameter[] parameters = ((PsiMethod)resolved).getParameterList().getParameters();
|
||||
final PsiMethod resolvedMethod = callExpression.resolveMethod();
|
||||
if (resolvedMethod != null) {
|
||||
final PsiParameter[] parameters = resolvedMethod.getParameterList().getParameters();
|
||||
final PsiExpression[] args = callExpression.getArgumentList().getExpressions();
|
||||
final int idx = ArrayUtilRt.find(args, expression);
|
||||
int idx = -1;
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (PsiTreeUtil.isAncestor(args[i], expression, false)) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (idx != -1 && parameters[idx].getType().equalsToText(delegateClass)) {
|
||||
return true;
|
||||
}
|
||||
@@ -89,6 +97,17 @@ public class ReplaceStaticVariableAccess extends FixableUsageInfo {
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
final PsiBinaryExpression binaryExpression = PsiTreeUtil.getParentOfType(expression, PsiBinaryExpression.class);
|
||||
if (binaryExpression != null && binaryExpression.getOperationTokenType() == JavaTokenType.EQEQ) {
|
||||
final PsiExpression[] operands = binaryExpression.getOperands();
|
||||
final int index = ArrayUtil.find(operands, expression);
|
||||
if (index >= 0) {
|
||||
final PsiType type = operands[index].getType();
|
||||
return type != null && type.equalsToText(delegateClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
public enum EEnum {
|
||||
STATE_STARTED(0), STATE_STOPPED(1);
|
||||
private int value;
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
EEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
class Test {
|
||||
private final DebuggerSessionState myState;
|
||||
|
||||
public Test() {
|
||||
myState = new DebuggerSessionState(EEnum.STATE_STOPPED);
|
||||
}
|
||||
|
||||
EEnum getState() {
|
||||
return myState.myState;
|
||||
}
|
||||
|
||||
void setState(EEnum i) {
|
||||
}
|
||||
|
||||
void b(Test session) {
|
||||
setState(session != null ? session.getState() : EEnum.STATE_STARTED);
|
||||
}
|
||||
|
||||
{
|
||||
if (EEnum.STATE_STARTED == getState()) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
void a() {
|
||||
switch (myState.myState) {
|
||||
case STATE_STARTED:
|
||||
break;
|
||||
case STATE_STOPPED:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DebuggerSessionState {
|
||||
final EEnum myState;
|
||||
|
||||
public DebuggerSessionState(EEnum state) {
|
||||
myState = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
class Test {
|
||||
private final DebuggerSessionState myState;
|
||||
|
||||
public static final int STATE_STARTED = 0;
|
||||
public static final int STATE_STOPPED = 1;
|
||||
|
||||
public Test() {
|
||||
myState = new DebuggerSessionState(STATE_STOPPED);
|
||||
}
|
||||
|
||||
int getState() {
|
||||
return myState.myState;
|
||||
}
|
||||
|
||||
void setState(int i) {
|
||||
}
|
||||
|
||||
void b(Test session) {
|
||||
setState(session != null ? session.getState() : STATE_STARTED);
|
||||
}
|
||||
|
||||
{
|
||||
if (STATE_STARTED == getState()) {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
void a() {
|
||||
switch (myState.myState) {
|
||||
case STATE_STARTED:
|
||||
break;
|
||||
case STATE_STOPPED:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DebuggerSessionState {
|
||||
final int myState;
|
||||
|
||||
public DebuggerSessionState(int state) {
|
||||
myState = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
public enum EEnum {
|
||||
STATE_STARTED(0), STATE_STOPPED(1);
|
||||
private int value;
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
EEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
class Test {
|
||||
private final DebuggerSessionState myState;
|
||||
|
||||
public Test() {
|
||||
myState = new DebuggerSessionState(EEnum.STATE_STOPPED);
|
||||
}
|
||||
|
||||
void a() {
|
||||
switch (myState.myState) {
|
||||
case STATE_STARTED:
|
||||
break;
|
||||
case STATE_STOPPED:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DebuggerSessionState {
|
||||
final EEnum myState;
|
||||
|
||||
public DebuggerSessionState(EEnum state) {
|
||||
myState = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
class Test {
|
||||
private final DebuggerSessionState myState;
|
||||
|
||||
public static final int STATE_STARTED = 0;
|
||||
public static final int STATE_STOPPED = 1;
|
||||
|
||||
public Test() {
|
||||
myState = new DebuggerSessionState(STATE_STOPPED);
|
||||
}
|
||||
|
||||
void a() {
|
||||
switch (myState.myState) {
|
||||
case STATE_STARTED:
|
||||
break;
|
||||
case STATE_STOPPED:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DebuggerSessionState {
|
||||
final int myState;
|
||||
|
||||
public DebuggerSessionState(int state) {
|
||||
myState = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,16 @@ public class ExtractEnumTest extends MultiFileTestCase {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("FOO", PsiField.class, true),
|
||||
new RefactoringTestUtil.MemberDescriptor("BAR", PsiField.class, true));
|
||||
}
|
||||
|
||||
public void testConstructorCall() throws Exception {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("STATE_STARTED", PsiField.class, true),
|
||||
new RefactoringTestUtil.MemberDescriptor("STATE_STOPPED", PsiField.class, true));
|
||||
}
|
||||
|
||||
public void testCondition() throws Exception {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("STATE_STARTED", PsiField.class, true),
|
||||
new RefactoringTestUtil.MemberDescriptor("STATE_STOPPED", PsiField.class, true));
|
||||
}
|
||||
|
||||
public void testReferencesOnEnumConstantInEnum() throws Exception {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("FOO", PsiField.class, true),
|
||||
|
||||
Reference in New Issue
Block a user