IDEA-20835

This commit is contained in:
Alexey Kudravtsev
2010-03-25 13:53:48 +03:00
parent 0ca77d41eb
commit 67da6f796b
2 changed files with 24 additions and 11 deletions
@@ -16,10 +16,13 @@
package com.intellij.codeInsight.intention.impl;
import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.codeInsight.PsiEquivalenceUtil;
import com.intellij.codeInsight.CodeInsightUtilBase;
import com.intellij.codeInsight.PsiEquivalenceUtil;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
@@ -96,6 +99,7 @@ public class MoveFieldAssignmentToInitializerAction extends BaseIntentionAction
final Ref<Boolean> result = new Ref<Boolean>(Boolean.TRUE);
final List<PsiAssignmentExpression> totalUsages = new ArrayList<PsiAssignmentExpression>();
PsiClass containingClass = field.getContainingClass();
assert containingClass != null;
containingClass.accept(new JavaRecursiveElementVisitor(){
private PsiCodeBlock currentInitializingBlock; //ctr or class initializer
@@ -178,7 +182,9 @@ public class MoveFieldAssignmentToInitializerAction extends BaseIntentionAction
statement.delete();
}
}
editor.getCaretModel().moveToOffset(field.getTextOffset());
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
EditorColorsManager manager = EditorColorsManager.getInstance();
TextAttributes attributes = manager.getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES);
HighlightManager.getInstance(project).addOccurrenceHighlights(editor, new PsiElement[] {field.getInitializer()}, attributes, false,null);
}
}
@@ -20,11 +20,14 @@ import com.intellij.codeInsight.CodeInsightUtilBase;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
import com.intellij.codeInsight.intention.QuickFixFactory;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
@@ -77,6 +80,7 @@ public class MoveInitializerToConstructorAction extends PsiElementBaseIntentionA
if (constructors.length == 0) {
IntentionAction addDefaultConstructorFix = QuickFixFactory.getInstance().createAddDefaultConstructorFix(aClass);
addDefaultConstructorFix.invoke(project, editor, file);
editor.getCaretModel().moveToOffset(offset); //restore caret
constructorsToAddInitialization = Arrays.asList(aClass.getConstructors());
}
else {
@@ -90,24 +94,27 @@ public class MoveInitializerToConstructorAction extends PsiElementBaseIntentionA
}
}
PsiElement toMove = null;
PsiExpressionStatement toMove = null;
for (PsiMethod constructor : constructorsToAddInitialization) {
PsiCodeBlock codeBlock = constructor.getBody();
if (codeBlock == null) {
CreateFromUsageUtils.setupMethodBody(constructor);
codeBlock = constructor.getBody();
}
PsiElement added = addAssignment(codeBlock, field);
PsiExpressionStatement added = addAssignment(codeBlock, field);
if (toMove == null) toMove = added;
}
field.getInitializer().delete();
if (toMove != null) {
editor.getCaretModel().moveToOffset(toMove.getTextOffset());
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
PsiAssignmentExpression assignment = (PsiAssignmentExpression)toMove.getExpression();
PsiExpression expression = assignment.getRExpression();
EditorColorsManager manager = EditorColorsManager.getInstance();
TextAttributes attributes = manager.getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES);
HighlightManager.getInstance(project).addOccurrenceHighlights(editor, new PsiElement[] {expression}, attributes, false,null);
}
}
private static PsiElement addAssignment(@NotNull PsiCodeBlock codeBlock, @NotNull PsiField field) throws IncorrectOperationException {
private static PsiExpressionStatement addAssignment(@NotNull PsiCodeBlock codeBlock, @NotNull PsiField field) throws IncorrectOperationException {
PsiElementFactory factory = JavaPsiFacade.getInstance(codeBlock.getProject()).getElementFactory();
PsiExpressionStatement statement = (PsiExpressionStatement)factory.createStatementFromText(field.getName()+" = y;", codeBlock);
PsiAssignmentExpression expression = (PsiAssignmentExpression)statement.getExpression();
@@ -133,7 +140,7 @@ public class MoveInitializerToConstructorAction extends PsiElementBaseIntentionA
}
PsiElement newStatement = codeBlock.addBefore(statement,anchor);
replaceWithQualifiedReferences(newStatement, newStatement);
return newStatement;
return (PsiExpressionStatement)newStatement;
}
private static boolean containsReference(final PsiElement element, final PsiField field) {