Skip to content

Commit 03fbfdd

Browse files
committed
Refactoring invert boolean.
1 parent cd2cc40 commit 03fbfdd

File tree

5 files changed

+108
-97
lines changed

5 files changed

+108
-97
lines changed

python-impl/src/main/java/com/jetbrains/python/impl/refactoring/invertBoolean/PyInvertBooleanAction.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.jetbrains.python.impl.refactoring.invertBoolean;
1818

19+
import consulo.annotation.access.RequiredReadAction;
1920
import jakarta.annotation.Nonnull;
2021

2122
import consulo.language.Language;
@@ -42,31 +43,30 @@ protected boolean isAvailableInEditorOnly() {
4243
}
4344

4445
@Override
46+
@RequiredReadAction
4547
protected boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
46-
if (elements.length == 1) {
47-
return isApplicable(elements[0], elements[0].getContainingFile());
48-
}
49-
return false;
48+
return elements.length == 1 && isApplicable(elements[0], elements[0].getContainingFile());
5049
}
5150

52-
private static boolean isApplicable(@Nonnull final PsiElement element, @Nonnull final PsiFile file) {
53-
final VirtualFile virtualFile = file.getVirtualFile();
51+
@RequiredReadAction
52+
private static boolean isApplicable(@Nonnull PsiElement element, @Nonnull PsiFile file) {
53+
VirtualFile virtualFile = file.getVirtualFile();
5454
if (virtualFile != null && ProjectRootManager.getInstance(element.getProject()).getFileIndex().isInLibraryClasses(virtualFile)) {
5555
return false;
5656
}
5757
if (element instanceof PyTargetExpression) {
58-
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
58+
PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
5959
if (assignmentStatement != null) {
60-
final PyExpression assignedValue = assignmentStatement.getAssignedValue();
60+
PyExpression assignedValue = assignmentStatement.getAssignedValue();
6161
if (assignedValue == null) {
6262
return false;
6363
}
64-
final String name = assignedValue.getText();
64+
String name = assignedValue.getText();
6565
return name != null && (PyNames.TRUE.equals(name) || PyNames.FALSE.equals(name));
6666
}
6767
}
68-
if (element instanceof PyNamedParameter) {
69-
final PyExpression defaultValue = ((PyNamedParameter)element).getDefaultValue();
68+
if (element instanceof PyNamedParameter namedParam) {
69+
PyExpression defaultValue = namedParam.getDefaultValue();
7070
if (defaultValue instanceof PyBoolLiteralExpression) {
7171
return true;
7272
}
@@ -75,9 +75,10 @@ private static boolean isApplicable(@Nonnull final PsiElement element, @Nonnull
7575
}
7676

7777
@Override
78+
@RequiredReadAction
7879
protected boolean isAvailableOnElementInEditorAndFile(
79-
@Nonnull final PsiElement element,
80-
@Nonnull final Editor editor,
80+
@Nonnull PsiElement element,
81+
@Nonnull Editor editor,
8182
@Nonnull PsiFile file,
8283
@Nonnull DataContext context
8384
) {

python-impl/src/main/java/com/jetbrains/python/impl/refactoring/invertBoolean/PyInvertBooleanDialog.java

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616

1717
package com.jetbrains.python.impl.refactoring.invertBoolean;
1818

19-
import consulo.language.editor.refactoring.RefactoringBundle;
19+
import consulo.annotation.access.RequiredReadAction;
20+
import consulo.language.editor.refactoring.localize.RefactoringLocalize;
2021
import consulo.language.editor.refactoring.rename.RenameUtil;
2122
import consulo.language.editor.refactoring.ui.RefactoringDialog;
2223
import consulo.language.editor.refactoring.util.CommonRefactoringUtil;
2324
import consulo.language.findUsage.DescriptiveNameUtil;
24-
import consulo.project.Project;
2525
import consulo.language.psi.PsiElement;
2626
import consulo.language.psi.PsiNamedElement;
27+
import consulo.project.Project;
28+
import consulo.ui.annotation.RequiredUIAccess;
2729
import consulo.usage.UsageViewUtil;
2830
import jakarta.annotation.Nullable;
2931

@@ -41,45 +43,46 @@ public class PyInvertBooleanDialog extends RefactoringDialog {
4143
private final PsiElement myElement;
4244
private final String myName;
4345

44-
public PyInvertBooleanDialog(final PsiElement element) {
46+
@RequiredReadAction
47+
public PyInvertBooleanDialog(PsiElement element) {
4548
super(element.getProject(), false);
4649
myElement = element;
47-
myName = element instanceof PsiNamedElement ? ((PsiNamedElement)element).getName() : element.getText();
50+
myName = element instanceof PsiNamedElement namedElement ? namedElement.getName() : element.getText();
4851
myNameField.setText(myName);
4952
myLabel.setLabelFor(myNameField);
50-
final String typeString = UsageViewUtil.getType(myElement);
51-
myLabel.setText(RefactoringBundle.message("invert.boolean.name.of.inverted.element", typeString));
52-
myCaptionLabel.setText(RefactoringBundle.message(
53-
"invert.0.1",
54-
typeString,
55-
DescriptiveNameUtil.getDescriptiveName(myElement)
56-
));
53+
String typeString = UsageViewUtil.getType(myElement);
54+
myLabel.setText(RefactoringLocalize.invertBooleanNameOfInvertedElement(typeString).get());
55+
myCaptionLabel.setText(RefactoringLocalize.invert01(typeString, DescriptiveNameUtil.getDescriptiveName(myElement)).get());
5756

58-
setTitle(PyInvertBooleanHandler.REFACTORING_NAME);
57+
setTitle(RefactoringLocalize.invertBooleanTitle());
5958
init();
6059
}
6160

61+
@Override
62+
@RequiredUIAccess
6263
public JComponent getPreferredFocusedComponent() {
6364
return myNameField;
6465
}
6566

67+
@Override
68+
@RequiredUIAccess
6669
protected void doAction() {
6770
Project project = myElement.getProject();
68-
final String name = myNameField.getText().trim();
69-
if (name.length() == 0 || (!name.equals(myName) && !RenameUtil.isValidName(myProject, myElement, name))) {
70-
CommonRefactoringUtil.showErrorMessage(PyInvertBooleanHandler.REFACTORING_NAME,
71-
RefactoringBundle.message(
72-
"please.enter.a.valid.name.for.inverted.element",
73-
UsageViewUtil.getType(myElement)
74-
),
75-
"refactoring.invertBoolean", project
71+
String name = myNameField.getText().trim();
72+
if (name.isEmpty() || (!name.equals(myName) && !RenameUtil.isValidName(myProject, myElement, name))) {
73+
CommonRefactoringUtil.showErrorMessage(
74+
RefactoringLocalize.invertBooleanTitle().get(),
75+
RefactoringLocalize.pleaseEnterAValidNameForInvertedElement(UsageViewUtil.getType(myElement)).get(),
76+
"refactoring.invertBoolean",
77+
project
7678
);
7779
return;
7880
}
7981

8082
invokeRefactoring(new PyInvertBooleanProcessor(myElement, name));
8183
}
8284

85+
@Override
8386
protected JComponent createCenterPanel() {
8487
return myPanel;
8588
}

python-impl/src/main/java/com/jetbrains/python/impl/refactoring/invertBoolean/PyInvertBooleanHandler.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616

1717
package com.jetbrains.python.impl.refactoring.invertBoolean;
1818

19+
import consulo.language.editor.refactoring.localize.RefactoringLocalize;
20+
import consulo.ui.annotation.RequiredUIAccess;
1921
import jakarta.annotation.Nonnull;
20-
import consulo.language.editor.CommonDataKeys;
2122
import consulo.dataContext.DataContext;
2223
import consulo.codeEditor.Editor;
2324
import consulo.project.Project;
@@ -34,34 +35,33 @@
3435
* User : ktisha
3536
*/
3637
public class PyInvertBooleanHandler implements RefactoringActionHandler {
37-
static final String REFACTORING_NAME = RefactoringBundle.message("invert.boolean.title");
38-
3938
@Override
39+
@RequiredUIAccess
4040
public void invoke(@Nonnull Project project, Editor editor, PsiFile file, DataContext dataContext) {
41-
PsiElement element = dataContext.getData(CommonDataKeys.PSI_ELEMENT);
41+
PsiElement element = dataContext.getData(PsiElement.KEY);
4242
if (element == null && editor != null && file != null) {
4343
element = file.findElementAt(editor.getCaretModel().getOffset());
4444
}
4545
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
4646
if (assignmentStatement != null) {
4747
invoke(assignmentStatement.getTargets()[0]);
4848
}
49-
else if (element instanceof PyNamedParameter) {
50-
invoke(element);
49+
else if (element instanceof PyNamedParameter namedParameter) {
50+
invoke(namedParameter);
5151
}
5252
else {
5353
CommonRefactoringUtil.showErrorHint(
5454
project,
5555
editor,
56-
RefactoringBundle.getCannotRefactorMessage(
57-
RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")),
58-
REFACTORING_NAME,
56+
RefactoringBundle.getCannotRefactorMessage(RefactoringLocalize.errorWrongCaretPositionLocalOrExpressionName().get()),
57+
RefactoringLocalize.invertBooleanTitle().get(),
5958
"refactoring.invertBoolean"
6059
);
6160
}
6261
}
6362

6463
@Override
64+
@RequiredUIAccess
6565
public void invoke(@Nonnull Project project, @Nonnull PsiElement[] elements, DataContext dataContext) {
6666
if (elements.length == 1) {
6767
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(elements[0], PyAssignmentStatement.class);
@@ -71,6 +71,7 @@ public void invoke(@Nonnull Project project, @Nonnull PsiElement[] elements, Dat
7171
}
7272
}
7373

74+
@RequiredUIAccess
7475
private static void invoke(@Nonnull final PsiElement element) {
7576
new PyInvertBooleanDialog(element).show();
7677
}

0 commit comments

Comments
 (0)