EA-61165 - assert: CodeCompletionHandlerBase.checkNoWriteAccess

This commit is contained in:
Anna Kozlova
2014-10-02 20:03:38 +02:00
parent 1520358d9e
commit ea5f88f40b
2 changed files with 30 additions and 15 deletions
@@ -20,11 +20,11 @@ import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.ide.util.SuperMethodWarningUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.command.undo.UndoUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.TypeConversionUtil;
@@ -32,7 +32,6 @@ import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.changeSignature.ChangeSignatureProcessor;
import com.intellij.refactoring.changeSignature.JavaChangeSignatureDialog;
import com.intellij.refactoring.changeSignature.ParameterInfoImpl;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.usageView.UsageViewUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -67,6 +66,11 @@ public class VariableTypeFix extends LocalQuickFixAndIntentionActionOnPsiElement
return QuickFixBundle.message("fix.variable.type.family");
}
@Override
public boolean startInWriteAction() {
return false;
}
@Override
public boolean isAvailable(@NotNull Project project,
@NotNull PsiFile file,
@@ -83,25 +87,31 @@ public class VariableTypeFix extends LocalQuickFixAndIntentionActionOnPsiElement
}
@Override
public void invoke(@NotNull Project project,
@NotNull PsiFile file,
public void invoke(@NotNull final Project project,
@NotNull final PsiFile file,
@Nullable("is null when called from inspection") Editor editor,
@NotNull PsiElement startElement,
@NotNull PsiElement endElement) {
final PsiVariable myVariable = (PsiVariable)startElement;
if (changeMethodSignatureIfNeeded(myVariable)) return;
if (!FileModificationService.getInstance().prepareFileForWrite(myVariable.getContainingFile())) return;
try {
myVariable.normalizeDeclaration();
final PsiTypeElement typeElement = myVariable.getTypeElement();
LOG.assertTrue(typeElement != null, myVariable.getClass());
final PsiTypeElement newTypeElement = JavaPsiFacade.getInstance(file.getProject()).getElementFactory().createTypeElement(getReturnType());
typeElement.replace(newTypeElement);
JavaCodeStyleManager.getInstance(project).shortenClassReferences(myVariable);
UndoUtil.markPsiFileForUndo(file);
} catch (IncorrectOperationException e) {
LOG.error(e);
}
new WriteCommandAction.Simple(project, getText(), file) {
@Override
protected void run() throws Throwable {
try {
myVariable.normalizeDeclaration();
final PsiTypeElement typeElement = myVariable.getTypeElement();
LOG.assertTrue(typeElement != null, myVariable.getClass());
final PsiTypeElement newTypeElement = JavaPsiFacade.getInstance(file.getProject()).getElementFactory().createTypeElement(getReturnType());
typeElement.replace(newTypeElement);
JavaCodeStyleManager.getInstance(project).shortenClassReferences(myVariable);
UndoUtil.markPsiFileForUndo(file);
} catch (IncorrectOperationException e) {
LOG.error(e);
}
}
}.execute();
}
private boolean changeMethodSignatureIfNeeded(PsiVariable myVariable) {
@@ -56,6 +56,11 @@ public class TypeMigrationVariableTypeFixProvider implements ChangeVariableTypeQ
LOG1.error(e);
}
}
@Override
public boolean startInWriteAction() {
return true;
}
}};
}
}