Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

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

import consulo.annotation.access.RequiredReadAction;
import jakarta.annotation.Nonnull;

import consulo.language.Language;
Expand All @@ -36,50 +37,61 @@
* User : ktisha
*/
public class PyInvertBooleanAction extends BaseRefactoringAction {
@Override
protected boolean isAvailableInEditorOnly() {
return true;
}

@Override
protected boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
if (elements.length == 1) {
return isApplicable(elements[0], elements[0].getContainingFile());
@Override
protected boolean isAvailableInEditorOnly() {
return true;
}
return false;
}

private static boolean isApplicable(@Nonnull final PsiElement element, @Nonnull final PsiFile file) {
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null && ProjectRootManager.getInstance(element.getProject()).getFileIndex().isInLibraryClasses(virtualFile)) return false;
if (element instanceof PyTargetExpression) {
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
if (assignmentStatement != null) {
final PyExpression assignedValue = assignmentStatement.getAssignedValue();
if (assignedValue == null) return false;
final String name = assignedValue.getText();
return name != null && (PyNames.TRUE.equals(name) || PyNames.FALSE.equals(name));
}
@Override
@RequiredReadAction
protected boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
return elements.length == 1 && isApplicable(elements[0], elements[0].getContainingFile());
}
if (element instanceof PyNamedParameter) {
final PyExpression defaultValue = ((PyNamedParameter)element).getDefaultValue();
if (defaultValue instanceof PyBoolLiteralExpression) return true;

@RequiredReadAction
private static boolean isApplicable(@Nonnull PsiElement element, @Nonnull PsiFile file) {
VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null && ProjectRootManager.getInstance(element.getProject()).getFileIndex().isInLibraryClasses(virtualFile)) {
return false;
}
if (element instanceof PyTargetExpression) {
PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
if (assignmentStatement != null) {
PyExpression assignedValue = assignmentStatement.getAssignedValue();
if (assignedValue == null) {
return false;
}
String name = assignedValue.getText();
return name != null && (PyNames.TRUE.equals(name) || PyNames.FALSE.equals(name));
}
}
if (element instanceof PyNamedParameter namedParam) {
PyExpression defaultValue = namedParam.getDefaultValue();
if (defaultValue instanceof PyBoolLiteralExpression) {
return true;
}
}
return element.getParent() instanceof PyBoolLiteralExpression;
}
return element.getParent() instanceof PyBoolLiteralExpression;
}

@Override
protected boolean isAvailableOnElementInEditorAndFile(@Nonnull final PsiElement element, @Nonnull final Editor editor, @Nonnull PsiFile file, @Nonnull DataContext context) {
return isApplicable(element, element.getContainingFile());
}
@Override
@RequiredReadAction
protected boolean isAvailableOnElementInEditorAndFile(
@Nonnull PsiElement element,
@Nonnull Editor editor,
@Nonnull PsiFile file,
@Nonnull DataContext context
) {
return isApplicable(element, element.getContainingFile());
}

@Override
protected RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
return new PyInvertBooleanHandler();
}
@Override
protected RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
return new PyInvertBooleanHandler();
}

@Override
protected boolean isAvailableForLanguage(Language language) {
return language.isKindOf(PythonLanguage.getInstance());
}
@Override
protected boolean isAvailableForLanguage(Language language) {
return language.isKindOf(PythonLanguage.getInstance());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@

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

import consulo.language.editor.refactoring.RefactoringBundle;
import consulo.annotation.access.RequiredReadAction;
import consulo.language.editor.refactoring.localize.RefactoringLocalize;
import consulo.language.editor.refactoring.rename.RenameUtil;
import consulo.language.editor.refactoring.ui.RefactoringDialog;
import consulo.language.editor.refactoring.util.CommonRefactoringUtil;
import consulo.language.findUsage.DescriptiveNameUtil;
import consulo.project.Project;
import consulo.language.psi.PsiElement;
import consulo.language.psi.PsiNamedElement;
import consulo.project.Project;
import consulo.ui.annotation.RequiredUIAccess;
import consulo.usage.UsageViewUtil;
import jakarta.annotation.Nullable;

Expand All @@ -32,57 +34,62 @@
/**
* User : ktisha
*/
public class PyInvertBooleanDialog extends RefactoringDialog
{
private JTextField myNameField;
private JPanel myPanel;
private JLabel myLabel;
private JLabel myCaptionLabel;
public class PyInvertBooleanDialog extends RefactoringDialog {
private JTextField myNameField;
private JPanel myPanel;
private JLabel myLabel;
private JLabel myCaptionLabel;

private final PsiElement myElement;
private final String myName;
private final PsiElement myElement;
private final String myName;

public PyInvertBooleanDialog(final PsiElement element) {
super(element.getProject(), false);
myElement = element;
myName = element instanceof PsiNamedElement ? ((PsiNamedElement)element).getName() : element.getText();
myNameField.setText(myName);
myLabel.setLabelFor(myNameField);
final String typeString = UsageViewUtil.getType(myElement);
myLabel.setText(RefactoringBundle.message("invert.boolean.name.of.inverted.element", typeString));
myCaptionLabel.setText(RefactoringBundle.message("invert.0.1",
typeString,
DescriptiveNameUtil.getDescriptiveName(myElement)));
@RequiredReadAction
public PyInvertBooleanDialog(PsiElement element) {
super(element.getProject(), false);
myElement = element;
myName = element instanceof PsiNamedElement namedElement ? namedElement.getName() : element.getText();
myNameField.setText(myName);
myLabel.setLabelFor(myNameField);
String typeString = UsageViewUtil.getType(myElement);
myLabel.setText(RefactoringLocalize.invertBooleanNameOfInvertedElement(typeString).get());
myCaptionLabel.setText(RefactoringLocalize.invert01(typeString, DescriptiveNameUtil.getDescriptiveName(myElement)).get());

setTitle(PyInvertBooleanHandler.REFACTORING_NAME);
init();
}

public JComponent getPreferredFocusedComponent() {
return myNameField;
}
setTitle(RefactoringLocalize.invertBooleanTitle());
init();
}

protected void doAction() {
Project project = myElement.getProject();
final String name = myNameField.getText().trim();
if (name.length() == 0 || (!name.equals(myName) && !RenameUtil.isValidName(myProject, myElement, name))) {
CommonRefactoringUtil.showErrorMessage(PyInvertBooleanHandler.REFACTORING_NAME,
RefactoringBundle.message("please.enter.a.valid.name.for.inverted.element",
UsageViewUtil.getType(myElement)),
"refactoring.invertBoolean", project);
return;
@Override
@RequiredUIAccess
public JComponent getPreferredFocusedComponent() {
return myNameField;
}

invokeRefactoring(new PyInvertBooleanProcessor(myElement, name));
}
@Override
@RequiredUIAccess
protected void doAction() {
Project project = myElement.getProject();
String name = myNameField.getText().trim();
if (name.isEmpty() || (!name.equals(myName) && !RenameUtil.isValidName(myProject, myElement, name))) {
CommonRefactoringUtil.showErrorMessage(
RefactoringLocalize.invertBooleanTitle().get(),
RefactoringLocalize.pleaseEnterAValidNameForInvertedElement(UsageViewUtil.getType(myElement)).get(),
"refactoring.invertBoolean",
project
);
return;
}

protected JComponent createCenterPanel() {
return myPanel;
}
invokeRefactoring(new PyInvertBooleanProcessor(myElement, name));
}

@Override
protected JComponent createCenterPanel() {
return myPanel;
}

@Nullable
@Override
protected String getHelpId() {
return "reference.invert.boolean";
}
@Nullable
@Override
protected String getHelpId() {
return "reference.invert.boolean";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@

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

import consulo.language.editor.refactoring.localize.RefactoringLocalize;
import consulo.ui.annotation.RequiredUIAccess;
import jakarta.annotation.Nonnull;
import consulo.language.editor.CommonDataKeys;
import consulo.dataContext.DataContext;
import consulo.codeEditor.Editor;
import consulo.project.Project;
Expand All @@ -34,38 +35,44 @@
* User : ktisha
*/
public class PyInvertBooleanHandler implements RefactoringActionHandler {
static final String REFACTORING_NAME = RefactoringBundle.message("invert.boolean.title");

@Override
public void invoke(@Nonnull Project project, Editor editor, PsiFile file, DataContext dataContext) {
PsiElement element = dataContext.getData(CommonDataKeys.PSI_ELEMENT);
if (element == null && editor != null && file != null) {
element = file.findElementAt(editor.getCaretModel().getOffset());
}
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
if (assignmentStatement != null) {
invoke(assignmentStatement.getTargets()[0]);
}
else if (element instanceof PyNamedParameter) {
invoke(element);
@Override
@RequiredUIAccess
public void invoke(@Nonnull Project project, Editor editor, PsiFile file, DataContext dataContext) {
PsiElement element = dataContext.getData(PsiElement.KEY);
if (element == null && editor != null && file != null) {
element = file.findElementAt(editor.getCaretModel().getOffset());
}
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
if (assignmentStatement != null) {
invoke(assignmentStatement.getTargets()[0]);
}
else if (element instanceof PyNamedParameter namedParameter) {
invoke(namedParameter);
}
else {
CommonRefactoringUtil.showErrorHint(
project,
editor,
RefactoringBundle.getCannotRefactorMessage(RefactoringLocalize.errorWrongCaretPositionLocalOrExpressionName().get()),
RefactoringLocalize.invertBooleanTitle().get(),
"refactoring.invertBoolean"
);
}
}
else {
CommonRefactoringUtil.showErrorHint(project, editor, RefactoringBundle.getCannotRefactorMessage(
RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")), REFACTORING_NAME, "refactoring.invertBoolean");
}
}

@Override
public void invoke(@Nonnull Project project, @Nonnull PsiElement[] elements, DataContext dataContext) {
if (elements.length == 1) {
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(elements[0], PyAssignmentStatement.class);
if (assignmentStatement != null) {
invoke(assignmentStatement.getTargets()[0]);
}
@Override
@RequiredUIAccess
public void invoke(@Nonnull Project project, @Nonnull PsiElement[] elements, DataContext dataContext) {
if (elements.length == 1) {
final PyAssignmentStatement assignmentStatement = PsiTreeUtil.getParentOfType(elements[0], PyAssignmentStatement.class);
if (assignmentStatement != null) {
invoke(assignmentStatement.getTargets()[0]);
}
}
}
}

private static void invoke(@Nonnull final PsiElement element) {
new PyInvertBooleanDialog(element).show();
}
@RequiredUIAccess
private static void invoke(@Nonnull final PsiElement element) {
new PyInvertBooleanDialog(element).show();
}
}
Loading
Loading