package gw.plugin.ij.intentions;
import com.intellij.codeInsight.CodeInsightUtilBase;
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import gw.plugin.ij.lang.psi.impl.AbstractGosuClassFileImpl;
import gw.plugin.ij.util.GosuBundle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class HandleExpectingIterableFix extends LocalQuickFixAndIntentionActionOnPsiElement {
public HandleExpectingIterableFix( PsiElement id ) {
super( id );
}
@Override
public void invoke( @NotNull Project project, @NotNull PsiFile file, @Nullable("is null when called from inspection") Editor editor, @NotNull PsiElement startElement, @NotNull PsiElement endElement ) {
if (!CodeInsightUtilBase.prepareFileForWrite(startElement.getContainingFile())) {
return;
}
String src;
if(startElement.getChildren().length == 0) {
src = "0..|" + startElement.getText();
} else {
src = "0..|(" + startElement.getText() + ")";
}
Document document = startElement.getContainingFile().getViewProvider().getDocument();
if(document != null) {
int i = startElement.getTextOffset();
String text = document.getText();
String newText = text.substring( 0, i ) + src + text.substring( i+startElement.getTextLength());
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document);
document.setText( newText );
}
if (file instanceof AbstractGosuClassFileImpl) {
((AbstractGosuClassFileImpl) file).reparsePsiFromContent();
}
}
@NotNull
@Override
public String getText() {
return GosuBundle.message("inspection.expecting.iterable");
}
@NotNull
@Override
public String getFamilyName() {
return GosuBundle.message( "inspection.group.name.upgrade.issues" );
}
}