Reduced copy-paste logic to check PsiElement being increment/decrement or used in write

This commit is contained in:
Tagir Valeev
2016-12-15 11:14:07 +07:00
parent f04e5ecef5
commit d8329c5638
3 changed files with 8 additions and 45 deletions
@@ -36,7 +36,6 @@ import com.intellij.openapi.wm.WindowManager;
import com.intellij.psi.*;
import com.intellij.psi.controlFlow.DefUseUtil;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.PsiUtilCore;
@@ -46,6 +45,7 @@ import com.intellij.refactoring.listeners.RefactoringEventData;
import com.intellij.refactoring.listeners.RefactoringEventListener;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.InlineUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Query;
import com.intellij.util.containers.ContainerUtil;
@@ -295,29 +295,15 @@ public class InlineLocalHandler extends JavaInlineActionHandler {
if (((PsiArrayAccessExpression)parent).getIndexExpression() == element) continue;
if (defToInline instanceof PsiExpression && !(defToInline instanceof PsiNewExpression)) continue;
element = parent;
parent = parent.getParent();
}
if (parent instanceof PsiAssignmentExpression && element == ((PsiAssignmentExpression)parent).getLExpression()
|| isUnaryWriteExpression(parent)) {
if (RefactoringUtil.isAssignmentLHS(element)) {
return element;
}
}
return null;
}
private static boolean isUnaryWriteExpression(PsiElement parent) {
IElementType tokenType = null;
if (parent instanceof PsiPrefixExpression) {
tokenType = ((PsiPrefixExpression)parent).getOperationTokenType();
}
if (parent instanceof PsiPostfixExpression) {
tokenType = ((PsiPostfixExpression)parent).getOperationTokenType();
}
return tokenType == JavaTokenType.PLUSPLUS || tokenType == JavaTokenType.MINUSMINUS;
}
private static boolean isSameDefinition(final PsiElement def, final PsiExpression defToInline) {
if (def instanceof PsiLocalVariable) return defToInline.equals(((PsiLocalVariable)def).getInitializer());
final PsiElement parent = def.getParent();
@@ -44,7 +44,6 @@ import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.*;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.introduceField.ElementToWorkOn;
@@ -421,25 +420,13 @@ public class RefactoringUtil {
return type;
}
public static boolean isAssignmentLHS(PsiElement element) {
PsiElement parent = element.getParent();
return parent instanceof PsiAssignmentExpression && element.equals(((PsiAssignmentExpression)parent).getLExpression()) ||
isPlusPlusOrMinusMinus(parent);
public static boolean isAssignmentLHS(@NotNull PsiElement element) {
return element instanceof PsiExpression && PsiUtil.isAccessedForWriting((PsiExpression)element);
}
@Contract("null -> false")
public static boolean isPlusPlusOrMinusMinus(PsiElement element) {
if (element instanceof PsiPrefixExpression) {
return ((PsiPrefixExpression)element).getOperationTokenType() == JavaTokenType.PLUSPLUS ||
((PsiPrefixExpression)element).getOperationTokenType() == JavaTokenType.MINUSMINUS;
}
else if (element instanceof PsiPostfixExpression) {
IElementType operandTokenType = ((PsiPostfixExpression)element).getOperationTokenType();
return operandTokenType == JavaTokenType.PLUSPLUS || operandTokenType == JavaTokenType.MINUSMINUS;
}
else {
return false;
}
return PsiUtil.isIncrementDecrementOperation(element);
}
private static void removeFinalParameters(PsiMethod method) throws IncorrectOperationException {
@@ -83,18 +83,8 @@ public final class PsiUtil extends PsiUtilCore {
public static boolean isAccessedForWriting(@NotNull PsiExpression expr) {
if (isOnAssignmentLeftHand(expr)) return true;
PsiElement parent = PsiTreeUtil.skipParentsOfType(expr, PsiParenthesizedExpression.class);
if (parent instanceof PsiPrefixExpression) {
IElementType tokenType = ((PsiPrefixExpression) parent).getOperationTokenType();
return tokenType == JavaTokenType.PLUSPLUS || tokenType == JavaTokenType.MINUSMINUS;
}
else if (parent instanceof PsiPostfixExpression) {
IElementType tokenType = ((PsiPostfixExpression) parent).getOperationTokenType();
return tokenType == JavaTokenType.PLUSPLUS || tokenType == JavaTokenType.MINUSMINUS;
}
else {
return false;
}
PsiElement parent = skipParenthesizedExprUp(expr.getParent());
return isIncrementDecrementOperation(parent);
}
public static boolean isAccessedForReading(@NotNull PsiExpression expr) {