mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-20835
This commit is contained in:
+10
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+14
-7
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user