summaryrefslogtreecommitdiff
path: root/plugins/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java')
-rw-r--r--plugins/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/plugins/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java b/plugins/typeMigration/src/com/intellij/refactoring/typeMigration/TypeMigrationVariableTypeFixProvider.java
new file mode 100644
index 000000000000..d84320e4cd08
--- /dev/null
+++ b/plugins/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);
+ }
+ }
+ }};
+ }
+}