package com.eslint.fixes;
import com.eslint.ESLintBundle;
import com.intellij.lang.ASTNode;
import com.intellij.lang.javascript.psi.JSBinaryExpression;
import com.intellij.lang.javascript.psi.JSParenthesizedExpression;
import com.intellij.lang.javascript.psi.impl.JSChangeUtil;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author idok
*/
public class NoNegatedInLhsActionFix extends BaseActionFix {
public NoNegatedInLhsActionFix(PsiElement element) {
super(element);
}
@NotNull
@Override
public String getText() {
return ESLintBundle.message("inspection.fix.no-negated-in-lhs");
}
@Override
public void invoke(@NotNull Project project, @NotNull PsiFile psiFile, @Nullable("is null when called from inspection") Editor editor, @NotNull PsiElement element, @NotNull PsiElement end) throws IncorrectOperationException {
// PsiElement element = descriptor.getPsiElement();
JSBinaryExpression binary = PsiTreeUtil.getParentOfType(element, JSBinaryExpression.class);
JSBinaryExpression binaryClone = (JSBinaryExpression) binary.copy();
binaryClone.getLOperand().replace(binary.getLOperand().getLastChild());
ASTNode negate = JSChangeUtil.createStatementFromText(project, "!(true)");
JSParenthesizedExpression paren = PsiTreeUtil.getChildOfType(negate.getPsi().getFirstChild(), JSParenthesizedExpression.class);
paren.getInnerExpression().replace(binaryClone);
binary.replace(negate.getPsi());
}
}