diff options
Diffstat (limited to 'java/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java')
-rw-r--r-- | java/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java new file mode 100644 index 000000000000..d84320e4cd08 --- /dev/null +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java @@ -0,0 +1,61 @@ +/* + * User: anna + * Date: 27-Aug-2009 + */ +package com.intellij.refactoring.typeMigration; + +import com.intellij.codeInsight.FileModificationService; +import com.intellij.codeInsight.daemon.impl.quickfix.VariableTypeFix; +import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInsight.quickfix.ChangeVariableTypeQuickFixProvider; +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.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiType; +import com.intellij.psi.PsiVariable; +import com.intellij.psi.codeStyle.JavaCodeStyleManager; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class TypeMigrationVariableTypeFixProvider implements ChangeVariableTypeQuickFixProvider { + private static final Logger LOG1 = Logger.getInstance("#" + TypeMigrationVariableTypeFixProvider.class.getName()); + + @NotNull + public IntentionAction[] getFixes(@NotNull PsiVariable variable, @NotNull PsiType toReturn) { + return new IntentionAction[]{new VariableTypeFix(variable, toReturn) { + @NotNull + @Override + public String getText() { + return "Migrate \'" + myName + "\' type to \'" + getReturnType().getCanonicalText() + "\'"; + } + + @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) { + final PsiVariable myVariable = (PsiVariable)startElement; + + if (!FileModificationService.getInstance().prepareFileForWrite(myVariable.getContainingFile())) return; + try { + myVariable.normalizeDeclaration(); + final TypeMigrationRules rules = new TypeMigrationRules(TypeMigrationLabeler.getElementType(myVariable)); + rules.setMigrationRootType(getReturnType()); + rules.setBoundScope(GlobalSearchScope.projectScope(project)); + TypeMigrationProcessor.runHighlightingTypeMigration(project, editor, rules, myVariable); + JavaCodeStyleManager.getInstance(project).shortenClassReferences(myVariable); + UndoUtil.markPsiFileForUndo(file); + } + catch (IncorrectOperationException e) { + LOG1.error(e); + } + } + }}; + } +} |