package com.eslint.fixes;
import com.eslint.ESLintBundle;
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.lang.ASTNode;
import com.intellij.lang.javascript.psi.*;
import com.intellij.lang.javascript.psi.impl.JSChangeUtil;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
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.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author idok
*/
public class DotNotationActionFix extends BaseActionFix {
public DotNotationActionFix(PsiElement element) {
super(element);
}
@NotNull
@Override
public String getText() {
return ESLintBundle.message("inspection.fix.dot-notation");
}
@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 {
JSIndexedPropertyAccessExpression indexed = PsiTreeUtil.getParentOfType(element, JSIndexedPropertyAccessExpression.class);
JSReferenceExpression ref = PsiTreeUtil.findChildOfType(indexed, JSReferenceExpression.class);
JSLiteralExpression literalExpression = (JSLiteralExpression) indexed.getIndexExpression();
String path = StringUtil.stripQuotesAroundValue(literalExpression.getText());
ASTNode dotExp = JSChangeUtil.createStatementFromText(project, ref.getText() + '.' + path);
indexed.replace(dotExp.getPsi());
}
}