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 @@ -22,6 +22,7 @@
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.psiutils.VariableAccessUtils;
import com.siyeh.localize.InspectionGadgetsLocalize;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ExtensionImpl;
import consulo.language.psi.PsiElement;
import consulo.language.psi.util.PsiTreeUtil;
Expand All @@ -30,8 +31,6 @@
import jakarta.annotation.Nullable;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;

@ExtensionImpl
Expand All @@ -51,11 +50,12 @@ public LocalizeValue getDisplayName() {
return InspectionGadgetsLocalize.unnecessaryFinalOnLocalVariableOrParameterDisplayName();
}

@Override
@Nonnull
@Override
@RequiredReadAction
public String buildErrorString(Object... infos) {
final PsiVariable variable = (PsiVariable) infos[0];
final String variableName = variable.getName();
PsiVariable variable = (PsiVariable) infos[0];
String variableName = variable.getName();
return variable instanceof PsiParameter
? InspectionGadgetsLocalize.unnecessaryFinalOnParameterProblemDescriptor(variableName).get()
: InspectionGadgetsLocalize.unnecessaryFinalOnLocalVariableProblemDescriptor(variableName).get();
Expand All @@ -64,8 +64,8 @@ public String buildErrorString(Object... infos) {
@Override
@Nullable
public JComponent createOptionsPanel() {
final JPanel panel = new JPanel(new GridBagLayout());
final JCheckBox abstractOnlyCheckBox =
JPanel panel = new JPanel(new GridBagLayout());
JCheckBox abstractOnlyCheckBox =
new JCheckBox(InspectionGadgetsLocalize.unnecessaryFinalOnParameterOnlyInterfaceOption().get(), onlyWarnOnAbstractMethods) {
@Override
public void setEnabled(boolean b) {
Expand All @@ -80,37 +80,26 @@ public void setEnabled(boolean b) {
}
};
abstractOnlyCheckBox.setEnabled(true);
abstractOnlyCheckBox.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
onlyWarnOnAbstractMethods = abstractOnlyCheckBox.isSelected();
}
});
final JCheckBox reportLocalVariablesCheckBox =
abstractOnlyCheckBox.addChangeListener(e -> onlyWarnOnAbstractMethods = abstractOnlyCheckBox.isSelected());
JCheckBox reportLocalVariablesCheckBox =
new JCheckBox(InspectionGadgetsLocalize.unnecessaryFinalReportLocalVariablesOption().get(), reportLocalVariables);
final JCheckBox reportParametersCheckBox =
JCheckBox reportParametersCheckBox =
new JCheckBox(InspectionGadgetsLocalize.unnecessaryFinalReportParametersOption().get(), reportParameters);

reportLocalVariablesCheckBox.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
reportLocalVariables = reportLocalVariablesCheckBox.isSelected();
if (!reportLocalVariables) {
reportParametersCheckBox.setSelected(true);
}
reportLocalVariablesCheckBox.addChangeListener(e -> {
reportLocalVariables = reportLocalVariablesCheckBox.isSelected();
if (!reportLocalVariables) {
reportParametersCheckBox.setSelected(true);
}
});
reportParametersCheckBox.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
reportParameters = reportParametersCheckBox.isSelected();
if (!reportParameters) {
reportLocalVariablesCheckBox.setSelected(true);
}
abstractOnlyCheckBox.setEnabled(reportParameters);
reportParametersCheckBox.addChangeListener(e -> {
reportParameters = reportParametersCheckBox.isSelected();
if (!reportParameters) {
reportLocalVariablesCheckBox.setSelected(true);
}
abstractOnlyCheckBox.setEnabled(reportParameters);
});
final GridBagConstraints constraints = new GridBagConstraints();
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.NORTHWEST;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weightx = 1.0;
Expand All @@ -136,47 +125,43 @@ public InspectionGadgetsFix buildFix(Object... infos) {

private class UnnecessaryFinalOnLocalVariableOrParameterVisitor extends BaseInspectionVisitor {
@Override
public void visitDeclarationStatement(PsiDeclarationStatement statement) {
public void visitDeclarationStatement(@Nonnull PsiDeclarationStatement statement) {
super.visitDeclarationStatement(statement);
if (!reportLocalVariables) {
return;
}
final PsiElement[] declaredElements = statement.getDeclaredElements();
PsiElement[] declaredElements = statement.getDeclaredElements();
if (declaredElements.length == 0) {
return;
}
for (final PsiElement declaredElement : declaredElements) {
if (!(declaredElement instanceof PsiLocalVariable)) {
return;
}
final PsiLocalVariable variable = (PsiLocalVariable) declaredElement;
if (!variable.hasModifierProperty(PsiModifier.FINAL)) {
for (PsiElement declaredElement : declaredElements) {
if (!(declaredElement instanceof PsiLocalVariable variable && variable.hasModifierProperty(PsiModifier.FINAL))) {
return;
}
}
final PsiCodeBlock containingBlock = PsiTreeUtil.getParentOfType(statement, PsiCodeBlock.class);
PsiCodeBlock containingBlock = PsiTreeUtil.getParentOfType(statement, PsiCodeBlock.class);
if (containingBlock == null) {
return;
}
for (PsiElement declaredElement : declaredElements) {
final PsiLocalVariable variable = (PsiLocalVariable) declaredElement;
PsiLocalVariable variable = (PsiLocalVariable) declaredElement;
if (VariableAccessUtils.variableIsUsedInInnerClass(variable, containingBlock)) {
return;
}
}
final PsiLocalVariable variable = (PsiLocalVariable) statement.getDeclaredElements()[0];
PsiLocalVariable variable = (PsiLocalVariable) statement.getDeclaredElements()[0];
registerModifierError(PsiModifier.FINAL, variable, variable, PsiModifier.FINAL);
}

@Override
public void visitMethod(PsiMethod method) {
public void visitMethod(@Nonnull PsiMethod method) {
super.visitMethod(method);
if (!reportParameters) {
return;
}
final PsiParameterList parameterList = method.getParameterList();
final PsiParameter[] parameters = parameterList.getParameters();
for (final PsiParameter parameter : parameters) {
PsiParameterList parameterList = method.getParameterList();
PsiParameter[] parameters = parameterList.getParameters();
for (PsiParameter parameter : parameters) {
checkParameter(method, parameter);
}
}
Expand All @@ -185,14 +170,14 @@ private void checkParameter(PsiMethod method, PsiParameter parameter) {
if (!parameter.hasModifierProperty(PsiModifier.FINAL)) {
return;
}
final PsiClass containingClass = method.getContainingClass();
PsiClass containingClass = method.getContainingClass();
if (containingClass != null) {
if (containingClass.isInterface() || containingClass.isAnnotationType()) {
registerModifierError(PsiModifier.FINAL, parameter, parameter, PsiModifier.FINAL);
return;
}
}
if (method.hasModifierProperty(PsiModifier.ABSTRACT)) {
if (method.isAbstract()) {
registerModifierError(PsiModifier.FINAL, parameter, parameter, PsiModifier.FINAL);
return;
}
Expand All @@ -206,15 +191,15 @@ private void checkParameter(PsiMethod method, PsiParameter parameter) {
}

@Override
public void visitTryStatement(PsiTryStatement statement) {
public void visitTryStatement(@Nonnull PsiTryStatement statement) {
super.visitTryStatement(statement);
if (onlyWarnOnAbstractMethods || !reportParameters) {
return;
}
final PsiCatchSection[] catchSections = statement.getCatchSections();
PsiCatchSection[] catchSections = statement.getCatchSections();
for (PsiCatchSection catchSection : catchSections) {
final PsiParameter parameter = catchSection.getParameter();
final PsiCodeBlock catchBlock = catchSection.getCatchBlock();
PsiParameter parameter = catchSection.getParameter();
PsiCodeBlock catchBlock = catchSection.getCatchBlock();
if (parameter == null || catchBlock == null) {
continue;
}
Expand All @@ -228,12 +213,12 @@ public void visitTryStatement(PsiTryStatement statement) {
}

@Override
public void visitForeachStatement(PsiForeachStatement statement) {
public void visitForeachStatement(@Nonnull PsiForeachStatement statement) {
super.visitForeachStatement(statement);
if (onlyWarnOnAbstractMethods || !reportParameters) {
return;
}
final PsiParameter parameter = statement.getIterationParameter();
PsiParameter parameter = statement.getIterationParameter();
if (!parameter.hasModifierProperty(PsiModifier.FINAL)) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,46 +15,50 @@
*/
package com.intellij.java.impl.refactoring.inline;

import com.intellij.java.language.psi.PsiImportStaticStatement;
import com.intellij.java.language.psi.PsiJavaCodeReferenceElement;
import consulo.annotation.component.ExtensionImpl;
import consulo.application.Result;
import consulo.language.editor.WriteCommandAction;
import consulo.codeEditor.Editor;
import consulo.project.Project;
import consulo.java.localize.JavaRefactoringLocalize;
import consulo.language.psi.PsiElement;
import com.intellij.java.language.psi.PsiImportStaticStatement;
import com.intellij.java.language.psi.PsiJavaCodeReferenceElement;
import consulo.language.psi.util.PsiTreeUtil;
import consulo.project.Project;
import consulo.ui.annotation.RequiredUIAccess;
import consulo.undoRedo.CommandProcessor;
import consulo.undoRedo.UndoConfirmationPolicy;
import jakarta.annotation.Nonnull;

import java.util.List;

import static com.intellij.java.language.impl.psi.util.ImportsUtil.collectReferencesThrough;
import static com.intellij.java.language.impl.psi.util.ImportsUtil.replaceAllAndDeleteImport;

/**
* User: anna
* Date: 9/1/11
* @author anna
* @since 2011-09-01
*/
@ExtensionImpl
public class InlineStaticImportHandler extends JavaInlineActionHandler {
@Override
public boolean canInlineElement(@Nonnull PsiElement element) {
if (element.getContainingFile() == null) {
return false;
}
return PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class) != null;
}

private static final String REFACTORING_NAME = "Expand static import";

@Override
public boolean canInlineElement(PsiElement element) {
if (element.getContainingFile() == null) return false;
return PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class) != null;
}
@Override
@RequiredUIAccess
public void inlineElement(Project project, Editor editor, PsiElement element) {
PsiImportStaticStatement staticStatement = PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class);
List<PsiJavaCodeReferenceElement> referenceElements =
collectReferencesThrough(element.getContainingFile(), null, staticStatement);

@Override
public void inlineElement(Project project, Editor editor, PsiElement element) {
final PsiImportStaticStatement staticStatement = PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class);
final List<PsiJavaCodeReferenceElement> referenceElements =
collectReferencesThrough(element.getContainingFile(), null, staticStatement);
new WriteCommandAction(project, REFACTORING_NAME){
@Override
protected void run(Result result) throws Throwable {
replaceAllAndDeleteImport(referenceElements, null, staticStatement);
}
}.execute();
}
CommandProcessor.getInstance().newCommand()
.project(project)
.name(JavaRefactoringLocalize.actionExpandStaticImportText())
.undoConfirmationPolicy(UndoConfirmationPolicy.DO_NOT_REQUEST_CONFIRMATION)
.inWriteAction()
.run(() -> replaceAllAndDeleteImport(referenceElements, null, staticStatement));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ a.class.can.not.be.made.an.inner.class.of.one.of.it.s.decendents:
text: A class can not be made an inner class of one of it's decendents.
action.column.header:
text: Action
action.expand.static.import.text:
text: Expand Static Import
action.rename.file.description:
text: Rename selected file
action.rename.file.text:
Expand Down
Loading