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 @@ -508,7 +508,7 @@ public abstract LocalQuickFixAndIntentionActionOnPsiElement createAccessStaticVi
public abstract IntentionAction createAddMissingEnumBranchesFix(@Nonnull PsiSwitchBlock switchBlock, @Nonnull Set<String> missingCases);

@Nonnull
public abstract IntentionAction createAddSwitchDefaultFix(@Nonnull PsiSwitchBlock switchBlock, @Nullable String message);
public abstract IntentionAction createAddSwitchDefaultFix(@Nonnull PsiSwitchBlock switchBlock, @Nonnull LocalizeValue message);

@Nonnull
public abstract IntentionAction createWrapSwitchRuleStatementsIntoBlockFix(PsiSwitchLabeledRuleStatement rule);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2532,7 +2532,7 @@ public static Collection<HighlightInfo> checkSwitchLabelValues(@Nonnull PsiSwitc
if (!missingConstants.isEmpty()) {
hlBuilder.registerFix(factory.createAddMissingEnumBranchesFix(switchBlock, missingConstants));
}
hlBuilder.registerFix(factory.createAddSwitchDefaultFix(switchBlock, null));
hlBuilder.registerFix(factory.createAddSwitchDefaultFix(switchBlock, LocalizeValue.empty()));
results.add(hlBuilder.create());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,45 +18,50 @@
import com.intellij.java.language.psi.PsiJavaFile;
import com.intellij.java.language.psi.codeStyle.JavaCodeStyleManager;
import consulo.codeEditor.Editor;
import consulo.java.analysis.impl.JavaQuickFixBundle;
import consulo.java.analysis.impl.localize.JavaQuickFixLocalize;
import consulo.language.editor.FileModificationService;
import consulo.language.editor.intention.SyntheticIntentionAction;
import consulo.language.psi.PsiFile;
import consulo.language.util.IncorrectOperationException;
import consulo.localize.LocalizeValue;
import consulo.logging.Logger;
import consulo.project.Project;

import jakarta.annotation.Nonnull;

public class OptimizeImportsFix implements SyntheticIntentionAction {
private static final Logger LOG = Logger.getInstance(OptimizeImportsFix.class);

@Override
@Nonnull
public String getText() {
return JavaQuickFixBundle.message("optimize.imports.fix");
}

@Override
public boolean isAvailable(@Nonnull Project project, Editor editor, PsiFile file) {
return file.getManager().isInProject(file) && file instanceof PsiJavaFile;
}

@Override
public void invoke(@Nonnull Project project, Editor editor, PsiFile file) {
if (!(file instanceof PsiJavaFile)) return;
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;

try {
JavaCodeStyleManager.getInstance(project).optimizeImports(file);
private static final Logger LOG = Logger.getInstance(OptimizeImportsFix.class);

@Nonnull
@Override
public LocalizeValue getText() {
return JavaQuickFixLocalize.optimizeImportsFix();
}

@Override
public boolean isAvailable(@Nonnull Project project, Editor editor, PsiFile file) {
return file.getManager().isInProject(file) && file instanceof PsiJavaFile;
}
catch (IncorrectOperationException e) {
LOG.error(e);

@Override
public void invoke(@Nonnull Project project, Editor editor, PsiFile file) {
if (!(file instanceof PsiJavaFile)) {
return;
}
if (!FileModificationService.getInstance().prepareFileForWrite(file)) {
return;
}

try {
JavaCodeStyleManager.getInstance(project).optimizeImports(file);
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
}
}

@Override
public boolean startInWriteAction() {
return true;
}
@Override
public boolean startInWriteAction() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,7 @@ public IntentionAction createOptimizeImportsFix(final boolean onTheFly) {
return new SyntheticIntentionAction() {
@Nonnull
@Override
public String getText() {
public LocalizeValue getText() {
return fix.getText();
}

Expand Down Expand Up @@ -855,7 +855,7 @@ public LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix(@Nonnull PsiE

@Nonnull
public LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix(@Nonnull PsiElement element, @Nonnull LocalizeValue text) {
return new DeleteElementFix(element, text.get());
return new DeleteElementFix(element, text);
}

@Nonnull
Expand Down Expand Up @@ -1042,7 +1042,7 @@ public IntentionAction createAddMissingEnumBranchesFix(@Nonnull PsiSwitchBlock s

@Nonnull
@Override
public IntentionAction createAddSwitchDefaultFix(@Nonnull PsiSwitchBlock switchBlock, @Nullable String message) {
public IntentionAction createAddSwitchDefaultFix(@Nonnull PsiSwitchBlock switchBlock, @Nonnull LocalizeValue message) {
return new CreateDefaultBranchFix(switchBlock, message);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,110 +21,107 @@
import consulo.language.editor.WriteCommandAction;
import consulo.language.editor.inspection.LocalQuickFix;
import consulo.language.editor.inspection.ProblemDescriptor;
import consulo.language.editor.inspection.localize.InspectionLocalize;
import consulo.language.editor.intention.LowPriorityAction;
import consulo.language.psi.PsiElement;
import consulo.localize.LocalizeValue;
import consulo.project.Project;
import org.jetbrains.annotations.TestOnly;

import jakarta.annotation.Nonnull;
import org.jetbrains.annotations.TestOnly;

/**
* @author Dmitry Batkovich <dmitry.batkovich@jetbrains.com>
*/
public class ChangeSuperClassFix implements LocalQuickFix {
@Nonnull
private final PsiClass myNewSuperClass;
@Nonnull
private final PsiClass myOldSuperClass;
private final int myPercent;
@Nonnull
private final PsiClass myNewSuperClass;
@Nonnull
private final PsiClass myOldSuperClass;
private final int myPercent;

public ChangeSuperClassFix(@Nonnull final PsiClass newSuperClass, final int percent, @Nonnull final PsiClass oldSuperClass) {
myNewSuperClass = newSuperClass;
myOldSuperClass = oldSuperClass;
myPercent = percent;
}
public ChangeSuperClassFix(@Nonnull final PsiClass newSuperClass, final int percent, @Nonnull final PsiClass oldSuperClass) {
myNewSuperClass = newSuperClass;
myOldSuperClass = oldSuperClass;
myPercent = percent;
}

@Nonnull
@TestOnly
public PsiClass getNewSuperClass() {
return myNewSuperClass;
}
@Nonnull
@TestOnly
public PsiClass getNewSuperClass() {
return myNewSuperClass;
}

@TestOnly
public int getPercent() {
return myPercent;
}
@TestOnly
public int getPercent() {
return myPercent;
}

@Nonnull
@Override
public String getName() {
return String.format("Make extends '%s' - %s%%", myNewSuperClass.getQualifiedName(), myPercent);
}
@Nonnull
@Override
public LocalizeValue getName() {
return LocalizeValue.localizeTODO(String.format("Make extends '%s' - %s%%", myNewSuperClass.getQualifiedName(), myPercent));
}

@Nonnull
@Override
public String getFamilyName() {
return InspectionLocalize.groupNamesInheritanceIssues().get();
}
@Override
public void applyFix(@Nonnull final Project project, @Nonnull final ProblemDescriptor problemDescriptor) {
changeSuperClass((PsiClass) problemDescriptor.getPsiElement(), myOldSuperClass, myNewSuperClass);
}

@Override
public void applyFix(@Nonnull final Project project, @Nonnull final ProblemDescriptor problemDescriptor) {
changeSuperClass((PsiClass)problemDescriptor.getPsiElement(), myOldSuperClass, myNewSuperClass);
}
/**
* myOldSuperClass and myNewSuperClass can be interfaces or classes in any combination
* <p/>
* 1. not checks that myOldSuperClass is really super of aClass
* 2. not checks that myNewSuperClass not exists in currently existed supers
*/
private static void changeSuperClass(
@Nonnull final PsiClass aClass,
@Nonnull final PsiClass oldSuperClass,
@Nonnull final PsiClass newSuperClass
) {
if (!FileModificationService.getInstance().preparePsiElementForWrite(aClass)) {
return;
}

/**
* myOldSuperClass and myNewSuperClass can be interfaces or classes in any combination
* <p/>
* 1. not checks that myOldSuperClass is really super of aClass
* 2. not checks that myNewSuperClass not exists in currently existed supers
*/
private static void changeSuperClass(@Nonnull final PsiClass aClass,
@Nonnull final PsiClass oldSuperClass,
@Nonnull final PsiClass newSuperClass) {
if (!FileModificationService.getInstance().preparePsiElementForWrite(aClass)) return;
new WriteCommandAction.Simple(newSuperClass.getProject(), aClass.getContainingFile()) {
@Override
protected void run() throws Throwable {
PsiElementFactory factory = JavaPsiFacade.getInstance(aClass.getProject()).getElementFactory();
if (aClass instanceof PsiAnonymousClass) {
((PsiAnonymousClass) aClass).getBaseClassReference().replace(factory.createClassReferenceElement(newSuperClass));
}
else if (oldSuperClass.isInterface()) {
final PsiReferenceList interfaceList = aClass.getImplementsList();
if (interfaceList != null) {
for (final PsiJavaCodeReferenceElement interfaceRef : interfaceList.getReferenceElements()) {
final PsiElement aInterface = interfaceRef.resolve();
if (aInterface != null && aInterface.isEquivalentTo(oldSuperClass)) {
interfaceRef.delete();
}
}
}

new WriteCommandAction.Simple(newSuperClass.getProject(), aClass.getContainingFile()) {
@Override
protected void run() throws Throwable {
PsiElementFactory factory = JavaPsiFacade.getInstance(aClass.getProject()).getElementFactory();
if (aClass instanceof PsiAnonymousClass) {
((PsiAnonymousClass)aClass).getBaseClassReference().replace(factory.createClassReferenceElement(newSuperClass));
}
else if (oldSuperClass.isInterface()) {
final PsiReferenceList interfaceList = aClass.getImplementsList();
if (interfaceList != null) {
for (final PsiJavaCodeReferenceElement interfaceRef : interfaceList.getReferenceElements()) {
final PsiElement aInterface = interfaceRef.resolve();
if (aInterface != null && aInterface.isEquivalentTo(oldSuperClass)) {
interfaceRef.delete();
}
final PsiReferenceList extendsList = aClass.getExtendsList();
if (extendsList != null) {
final PsiJavaCodeReferenceElement newClassReference = factory.createClassReferenceElement(newSuperClass);
if (extendsList.getReferenceElements().length == 0) {
extendsList.add(newClassReference);
}
}
}
else {
final PsiReferenceList extendsList = aClass.getExtendsList();
if (extendsList != null && extendsList.getReferenceElements().length == 1) {
extendsList.getReferenceElements()[0].delete();
PsiElement ref = extendsList.add(factory.createClassReferenceElement(newSuperClass));
JavaCodeStyleManager.getInstance(aClass.getProject()).shortenClassReferences(ref);
}
}
}
}
}.execute();
}

final PsiReferenceList extendsList = aClass.getExtendsList();
if (extendsList != null) {
final PsiJavaCodeReferenceElement newClassReference = factory.createClassReferenceElement(newSuperClass);
if (extendsList.getReferenceElements().length == 0) {
extendsList.add(newClassReference);
}
}
}
else {
final PsiReferenceList extendsList = aClass.getExtendsList();
if (extendsList != null && extendsList.getReferenceElements().length == 1) {
extendsList.getReferenceElements()[0].delete();
PsiElement ref = extendsList.add(factory.createClassReferenceElement(newSuperClass));
JavaCodeStyleManager.getInstance(aClass.getProject()).shortenClassReferences(ref);
}
public static class LowPriority extends ChangeSuperClassFix implements LowPriorityAction {
public LowPriority(@Nonnull final PsiClass newSuperClass, final int percent, @Nonnull final PsiClass oldSuperClass) {
super(newSuperClass, percent, oldSuperClass);
}
}
}.execute();
}

public static class LowPriority extends ChangeSuperClassFix implements LowPriorityAction {
public LowPriority(@Nonnull final PsiClass newSuperClass, final int percent, @Nonnull final PsiClass oldSuperClass) {
super(newSuperClass, percent, oldSuperClass);
}
}
}
Loading
Loading