dialog from write action

This commit is contained in:
Anna.Kozlova
2016-11-22 20:22:29 +01:00
parent 85fdebf831
commit e261a69a29
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.colors.EditorColors;
@@ -90,26 +91,33 @@ public class AccessStaticViaInstanceFix extends LocalQuickFixAndIntentionActionO
PsiClass containingClass = myMember.getContainingClass();
if (containingClass == null) return;
try {
final PsiExpression qualifierExpression = myExpression.getQualifierExpression();
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
if (qualifierExpression != null) {
if (!checkSideEffects(project, containingClass, qualifierExpression, factory, myExpression,editor)) return;
PsiElement newQualifier = qualifierExpression.replace(factory.createReferenceExpression(containingClass));
PsiElement qualifiedWithClassName = myExpression.copy();
if (myExpression.getTypeParameters().length == 0) {
newQualifier.delete();
if (myExpression.resolve() != myMember) {
myExpression.replace(qualifiedWithClassName);
final PsiExpression qualifierExpression = myExpression.getQualifierExpression();
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
if (qualifierExpression != null) {
if (!checkSideEffects(project, containingClass, qualifierExpression, factory, myExpression,editor)) return;
WriteAction.run(() -> {
try {
PsiElement newQualifier = qualifierExpression.replace(factory.createReferenceExpression(containingClass));
PsiElement qualifiedWithClassName = myExpression.copy();
if (myExpression.getTypeParameters().length == 0) {
newQualifier.delete();
if (myExpression.resolve() != myMember) {
myExpression.replace(qualifiedWithClassName);
}
}
}
}
}
catch (IncorrectOperationException e) {
LOG.error(e);
catch (IncorrectOperationException e) {
LOG.error(e);
}
});
}
}
@Override
public boolean startInWriteAction() {
return false;
}
private boolean checkSideEffects(final Project project,
PsiClass containingClass,
final PsiExpression qualifierExpression,
@@ -167,15 +175,17 @@ public class AccessStaticViaInstanceFix extends LocalQuickFixAndIntentionActionO
dialog.show();
int res = dialog.getExitCode();
if (res == RemoveUnusedVariableUtil.RemoveMode.CANCEL.ordinal()) return false;
try {
if (res == RemoveUnusedVariableUtil.RemoveMode.MAKE_STATEMENT.ordinal()) {
final PsiStatement statementFromText = factory.createStatementFromText(qualifierExpression.getText() + ";", null);
LOG.assertTrue(statement != null);
statement.getParent().addBefore(statementFromText, statement);
}
}
catch (IncorrectOperationException e) {
LOG.error(e);
if (res == RemoveUnusedVariableUtil.RemoveMode.MAKE_STATEMENT.ordinal()) {
final PsiStatement statementFromText = factory.createStatementFromText(qualifierExpression.getText() + ";", null);
LOG.assertTrue(statement != null);
WriteAction.run(() -> {
try {
statement.getParent().addBefore(statementFromText, statement);
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
});
}
return true;
}