/*
* Copyright 2013 Guidewire Software, Inc.
*/
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.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiIdentifier;
import gw.plugin.ij.lang.GosuTokenImpl;
import gw.plugin.ij.lang.psi.impl.AbstractGosuClassFileImpl;
import gw.plugin.ij.lang.psi.impl.GosuBaseElementImpl;
import gw.plugin.ij.util.GosuBundle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class CaseMismatchSimpleQuickFix extends LocalQuickFixAndIntentionActionOnPsiElement {
private String _correctName;
public CaseMismatchSimpleQuickFix( PsiElement id, String correctName ) {
super( id );
_correctName = correctName;
}
@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;
}
int i = startElement.getTextOffset();
Document document = startElement.getContainingFile().getViewProvider().getDocument();
String text = document.getText();
String newText = text.substring( 0, i ) + _correctName + text.substring( i + _correctName.length() );
document.setText( newText );
if( file instanceof AbstractGosuClassFileImpl ) {
((AbstractGosuClassFileImpl) file).reparsePsiFromContent();
}
}
private PsiElement findIdentifierOrToken( PsiElement psi ) {
PsiElement save = psi;
if( !(psi instanceof PsiIdentifier) ) {
psi = GosuBaseElementImpl.findElement( psi, PsiIdentifier.class );
}
if( psi == null ) {
psi = save;
psi = GosuBaseElementImpl.findElement( psi, GosuTokenImpl.class );
}
return psi;
}
@NotNull
@Override
public String getText() {
return GosuBundle.message( "inspection.case.mismatch" );
}
@NotNull
@Override
public String getFamilyName() {
return GosuBundle.message( "inspection.group.name.case.mismatch.issues" );
}
}