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