DeclarationJoinLinesHandler#joinDeclarationAndAssignment

GitOrigin-RevId: 6eee7012c7bdb46c8d5459f07fde28be0e7f4726
This commit is contained in:
Tagir Valeev
2019-11-07 02:40:58 +00:00
committed by intellij-monorepo-bot
parent e52c715683
commit 7b5dcb3d80
2 changed files with 27 additions and 19 deletions
@@ -27,6 +27,7 @@ import com.intellij.psi.util.PsiPrecedenceUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ExpressionUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -165,4 +166,29 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate {
}
return varCopy;
}
/**
* Join declaration and assignment
* @param variable variable
* @param assignment assignment (assuming its parent is expression statement)
* @return new variable
*/
public static PsiLocalVariable joinDeclarationAndAssignment(@NotNull PsiLocalVariable variable, @NotNull PsiAssignmentExpression assignment) {
PsiExpression initializer = getInitializerExpression(variable, assignment);
PsiElement elementToReplace = assignment.getParent();
if (elementToReplace != null) {
PsiLocalVariable varCopy = copyVarWithInitializer(variable, initializer);
if (varCopy != null) {
String text = varCopy.getText();
CommentTracker tracker = new CommentTracker();
tracker.markUnchanged(initializer);
tracker.markUnchanged(variable);
tracker.delete(variable);
PsiDeclarationStatement decl = (PsiDeclarationStatement)tracker.replaceAndRestoreComments(elementToReplace, text);
return ((PsiLocalVariable)decl.getDeclaredElements()[0]);
}
}
return variable;
}
}
@@ -11,7 +11,6 @@ import com.intellij.psi.util.PsiExpressionTrimRenderer;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ObjectUtils;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ExpressionUtils;
import com.siyeh.ig.psiutils.SideEffectChecker;
import org.jetbrains.annotations.Contract;
@@ -226,24 +225,7 @@ public class JoinDeclarationAndAssignmentJavaInspection extends AbstractBaseJava
}
if (!FileModificationService.getInstance().prepareFileForWrite(assignmentExpression.getContainingFile())) return;
WriteAction.run(() -> applyFixImpl(context));
}
}
public void applyFixImpl(@NotNull Context context) {
PsiExpression initializer = DeclarationJoinLinesHandler.getInitializerExpression(context.myVariable, context.myAssignment);
PsiElement elementToReplace = context.myAssignment.getParent();
if (elementToReplace != null) {
PsiLocalVariable varCopy = DeclarationJoinLinesHandler.copyVarWithInitializer(context.myVariable, initializer);
if (varCopy != null) {
String text = varCopy.getText();
CommentTracker tracker = new CommentTracker();
tracker.markUnchanged(initializer);
tracker.markUnchanged(context.myVariable);
tracker.delete(context.myVariable);
tracker.replaceAndRestoreComments(elementToReplace, text);
}
WriteAction.run(() -> DeclarationJoinLinesHandler.joinDeclarationAndAssignment(context.myVariable, context.myAssignment));
}
}
}