mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
change final status in balloon
This commit is contained in:
+13
-18
@@ -151,7 +151,6 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI {
|
||||
if (parameter != null) {
|
||||
myParameterIndex = myMethod.getParameterList().getParameterIndex(parameter);
|
||||
myEditor.getCaretModel().moveToOffset(parameter.getTextOffset());
|
||||
showBalloon();
|
||||
final LinkedHashSet<String> nameSuggestions = new LinkedHashSet<String>();
|
||||
nameSuggestions.add(parameter.getName());
|
||||
nameSuggestions.addAll(Arrays.asList(names));
|
||||
@@ -195,6 +194,19 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI {
|
||||
myDefaultParameterTypePointer = SmartTypePointerManager.getInstance(myProject).createSmartTypePointer(parameter.getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JComponent getComponent() {
|
||||
final JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.add(myWholePanel, BorderLayout.CENTER);
|
||||
|
||||
final JPanel wrapper = new JPanel(new BorderLayout());
|
||||
wrapper.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
|
||||
wrapper.add(myCanBeFinal, BorderLayout.NORTH);
|
||||
panel.add(wrapper, BorderLayout.SOUTH);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PsiVariable getVariable() {
|
||||
return getParameter();
|
||||
@@ -314,7 +326,6 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI {
|
||||
@Override
|
||||
public void finish() {
|
||||
super.finish();
|
||||
myBalloon.hide();
|
||||
final PsiParameter psiParameter = (PsiParameter)getVariable();
|
||||
LOG.assertTrue(psiParameter != null);
|
||||
myFinal = psiParameter.hasModifierProperty(PsiModifier.FINAL);
|
||||
@@ -403,20 +414,4 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI {
|
||||
});
|
||||
}
|
||||
|
||||
private void showBalloon() {
|
||||
final BalloonBuilder balloonBuilder = JBPopupFactory.getInstance().createBalloonBuilder(myWholePanel);
|
||||
balloonBuilder.setFadeoutTime(0)
|
||||
.setFillColor(IdeTooltipManager.GRAPHITE_COLOR)
|
||||
.setAnimationCycle(0)
|
||||
.setHideOnClickOutside(false)
|
||||
.setHideOnKeyOutside(false)
|
||||
.setHideOnAction(false)
|
||||
.setCloseButtonEnabled(true);
|
||||
|
||||
final RelativePoint target = JBPopupFactory.getInstance().guessBestPopupLocation(myEditor);
|
||||
final Point screenPoint = target.getScreenPoint();
|
||||
myBalloon = balloonBuilder.createBalloon();
|
||||
myBalloon
|
||||
.show(new RelativePoint(new Point(screenPoint.x, screenPoint.y - myEditor.getLineHeight())), Balloon.Position.above);
|
||||
}
|
||||
}
|
||||
|
||||
+102
-47
@@ -19,10 +19,13 @@ import com.intellij.codeInsight.intention.impl.TypeExpression;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.Result;
|
||||
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
|
||||
import com.intellij.codeInsight.template.impl.TemplateState;
|
||||
import com.intellij.ide.IdeTooltipManager;
|
||||
import com.intellij.openapi.actionSystem.Shortcut;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.*;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.RangeMarker;
|
||||
@@ -31,8 +34,12 @@ import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.keymap.Keymap;
|
||||
import com.intellij.openapi.keymap.KeymapManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.popup.Balloon;
|
||||
import com.intellij.openapi.ui.popup.BalloonBuilder;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
@@ -43,8 +50,15 @@ import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.rename.NameSuggestionProvider;
|
||||
import com.intellij.refactoring.rename.inplace.VariableInplaceRenamer;
|
||||
import com.intellij.refactoring.ui.TypeSelectorManagerImpl;
|
||||
import com.intellij.ui.NonFocusableCheckBox;
|
||||
import com.intellij.ui.TitlePanel;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
@@ -57,13 +71,15 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
private final PsiVariable myElementToRename;
|
||||
private final Editor myEditor;
|
||||
private final TypeExpression myExpression;
|
||||
private final boolean myCantChangeFinalModifier;
|
||||
private final Project myProject;
|
||||
private final SmartPsiElementPointer<PsiDeclarationStatement> myPointer;
|
||||
private final RangeMarker myExprMarker;
|
||||
private final List<RangeMarker> myOccurrenceMarkers;
|
||||
private final PsiType myDefaultType;
|
||||
|
||||
protected JCheckBox myCanBeFinal;
|
||||
private Balloon myBalloon;
|
||||
|
||||
public VariableInplaceIntroducer(final Project project,
|
||||
final TypeExpression expression,
|
||||
final Editor editor,
|
||||
@@ -77,7 +93,6 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
myEditor = editor;
|
||||
myElementToRename = elementToRename;
|
||||
myExpression = expression;
|
||||
myCantChangeFinalModifier = cantChangeFinalModifier;
|
||||
|
||||
myExprMarker = exprMarker;
|
||||
myOccurrenceMarkers = occurrenceMarkers;
|
||||
@@ -89,19 +104,42 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
editor.putUserData(ReassignVariableUtil.DECLARATION_KEY, myPointer);
|
||||
editor.putUserData(ReassignVariableUtil.OCCURRENCES_KEY,
|
||||
occurrenceMarkers.toArray(new RangeMarker[occurrenceMarkers.size()]));
|
||||
setAdvertisementText(getAdvertisementText(declarationStatement, myDefaultType,
|
||||
hasTypeSuggestion, !cantChangeFinalModifier));
|
||||
setAdvertisementText(getAdvertisementText(declarationStatement, myDefaultType, hasTypeSuggestion));
|
||||
if (!cantChangeFinalModifier) {
|
||||
myCanBeFinal = new NonFocusableCheckBox("Declare final");
|
||||
myCanBeFinal.setSelected(createFinals());
|
||||
myCanBeFinal.setMnemonic('f');
|
||||
myCanBeFinal.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
new WriteCommandAction(project){
|
||||
@Override
|
||||
protected void run(com.intellij.openapi.application.Result result) throws Throwable {
|
||||
final PsiModifierList modifierList = getVariable().getModifierList();
|
||||
LOG.assertTrue(modifierList != null);
|
||||
final Document document = myEditor.getDocument();
|
||||
final int textOffset = modifierList.getTextOffset();
|
||||
if (myCanBeFinal.isSelected()) {
|
||||
if (StringUtil.isEmptyOrSpaces(document.getText(new TextRange(textOffset - 1, textOffset)))) {
|
||||
document.insertString(textOffset - 1, "final");
|
||||
} else {
|
||||
document.insertString(textOffset, "final ");
|
||||
}
|
||||
}
|
||||
else {
|
||||
document.deleteString(textOffset, textOffset + modifierList.getTextLength());
|
||||
}
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addAdditionalVariables(TemplateBuilderImpl builder) {
|
||||
final PsiTypeElement typeElement = myElementToRename.getTypeElement();
|
||||
builder.replaceElement(typeElement, "Variable_Type",
|
||||
createExpression(myExpression, typeElement.getText(), !myCantChangeFinalModifier), true,
|
||||
true);
|
||||
if (!myCantChangeFinalModifier) {
|
||||
builder.replaceElement(myElementToRename.getModifierList(), "_FINAL_", new FinalExpression(), false, true);
|
||||
}
|
||||
builder.replaceElement(typeElement, "Variable_Type", createExpression(myExpression, typeElement.getText()), true, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -142,6 +180,12 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performInplaceRename(boolean processTextOccurrences, LinkedHashSet<String> nameSuggestions) {
|
||||
showBalloon();
|
||||
return super.performInplaceRename(processTextOccurrences, nameSuggestions);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void moveOffsetAfter(boolean success) {
|
||||
try {
|
||||
@@ -185,11 +229,35 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
super.finish();
|
||||
if (myBalloon != null) myBalloon.hide();
|
||||
}
|
||||
|
||||
protected void saveSettings(PsiVariable psiVariable) {
|
||||
JavaRefactoringSettings.getInstance().INTRODUCE_LOCAL_CREATE_FINALS = psiVariable.hasModifierProperty(PsiModifier.FINAL);
|
||||
TypeSelectorManagerImpl.typeSelected(psiVariable.getType(), myDefaultType);
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
protected JComponent getComponent() {
|
||||
final JPanel panel = new JPanel(new GridBagLayout());
|
||||
panel.setBorder(null);
|
||||
|
||||
final TitlePanel titlePanel = new TitlePanel();
|
||||
titlePanel.setBorder(null);
|
||||
titlePanel.setText(IntroduceVariableBase.REFACTORING_NAME);
|
||||
panel.add(titlePanel, new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
|
||||
|
||||
panel.add(myCanBeFinal, new GridBagConstraints(0, 1, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
|
||||
|
||||
panel.add(Box.createVerticalBox(), new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0,0,0,0), 0,0));
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
private static void appendTypeCasts(List<RangeMarker> occurrenceMarkers,
|
||||
PsiFile file,
|
||||
Project project,
|
||||
@@ -236,8 +304,7 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
@Nullable
|
||||
private static String getAdvertisementText(final PsiDeclarationStatement declaration,
|
||||
final PsiType type,
|
||||
final boolean hasTypeSuggestion,
|
||||
final boolean canAdjustFinal) {
|
||||
final boolean hasTypeSuggestion) {
|
||||
final VariablesProcessor processor = ReassignVariableUtil.findVariablesOfType(declaration, type);
|
||||
final Keymap keymap = KeymapManager.getInstance().getActiveKeymap();
|
||||
if (processor.size() > 0) {
|
||||
@@ -252,21 +319,10 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
return "Press " + shortcuts[0] + " to change type";
|
||||
}
|
||||
}
|
||||
return adjustFinalText(canAdjustFinal);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String adjustFinalText(final boolean canBeFinalAdjusted) {
|
||||
if (canBeFinalAdjusted) {
|
||||
final Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts("PreviousTemplateVariable");
|
||||
if (shortcuts.length > 0) {
|
||||
return "Press " + shortcuts[0] + " to adjust final modifier";
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Expression createExpression(final TypeExpression expression, final String defaultType, final boolean canBeFinalAdjusted) {
|
||||
private static Expression createExpression(final TypeExpression expression, final String defaultType) {
|
||||
return new Expression() {
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
@@ -285,7 +341,7 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
|
||||
@Override
|
||||
public String getAdvertisingText() {
|
||||
return adjustFinalText(canBeFinalAdjusted);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -294,27 +350,6 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
return IntroduceVariableBase.createFinals(myProject);
|
||||
}
|
||||
|
||||
private class FinalExpression extends Expression {
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return new TextResult(createFinals() ? PsiKeyword.FINAL : "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return calculateResult(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
LookupElement[] lookupElements = new LookupElement[2];
|
||||
lookupElements[0] = LookupElementBuilder.create("");
|
||||
lookupElements[1] = LookupElementBuilder.create(PsiModifier.FINAL + " ");
|
||||
return lookupElements;
|
||||
}
|
||||
}
|
||||
|
||||
public static void adjustLine(final PsiVariable psiVariable, final Document document) {
|
||||
final int modifierListOffset = psiVariable.getTextRange().getStartOffset();
|
||||
final int varLineNumber = document.getLineNumber(modifierListOffset);
|
||||
@@ -327,4 +362,24 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void showBalloon() {
|
||||
final JComponent component = getComponent();
|
||||
if (component == null) return;
|
||||
final BalloonBuilder balloonBuilder = JBPopupFactory.getInstance().createBalloonBuilder(component);
|
||||
balloonBuilder.setFadeoutTime(0)
|
||||
.setFillColor(IdeTooltipManager.GRAPHITE_COLOR)
|
||||
.setAnimationCycle(0)
|
||||
.setHideOnClickOutside(false)
|
||||
.setHideOnKeyOutside(false)
|
||||
.setHideOnAction(false)
|
||||
.setCloseButtonEnabled(true);
|
||||
|
||||
final RelativePoint target = JBPopupFactory.getInstance().guessBestPopupLocation(myEditor);
|
||||
final Point screenPoint = target.getScreenPoint();
|
||||
myBalloon = balloonBuilder.createBalloon();
|
||||
myBalloon
|
||||
.show(new RelativePoint(new Point(screenPoint.x, screenPoint.y - myEditor.getLineHeight())), Balloon.Position.above);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user