/* * 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); } } }}; } }