mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
java: don't create final field from parameter when this does not compile (IDEA-359980)
GitOrigin-RevId: d7ce31fbb607a409afa0e2b988eed424440cc336
This commit is contained in:
committed by
intellij-monorepo-bot
parent
cefb5228e1
commit
14096f0f03
+11
-6
@@ -18,11 +18,13 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.SuggestedNameInfo;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.siyeh.ig.psiutils.FinalUtils;
|
||||
import com.siyeh.ig.psiutils.VariableAccessUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
@@ -82,7 +84,7 @@ public final class CreateFieldFromParameterAction extends PsiUpdateModCommandAct
|
||||
String parameterName = parameter.getName();
|
||||
String propertyName = styleManager.variableNameToPropertyName(parameterName, VariableKind.PARAMETER);
|
||||
|
||||
PsiMethod method = (PsiMethod)parameter.getDeclarationScope();
|
||||
if (!(parameter.getDeclarationScope() instanceof PsiMethod method)) return;
|
||||
PsiClass targetClass = method.getContainingClass();
|
||||
if (targetClass == null) return;
|
||||
|
||||
@@ -92,13 +94,16 @@ public final class CreateFieldFromParameterAction extends PsiUpdateModCommandAct
|
||||
SuggestedNameInfo suggestedNameInfo = styleManager.suggestVariableName(kind, propertyName, null, type);
|
||||
SuggestedNameInfo uniqueNameInfo = styleManager.suggestUniqueVariableName(suggestedNameInfo, targetClass, true);
|
||||
|
||||
boolean isFinal = !isMethodStatic && method.isConstructor();
|
||||
|
||||
PsiVariable variable = FieldFromParameterUtils.createFieldAndAddAssignment(
|
||||
boolean maybeFinal = !isMethodStatic && method.isConstructor();
|
||||
boolean isFinal = maybeFinal && targetClass.getConstructors().length == 1;
|
||||
PsiField field = FieldFromParameterUtils.createFieldAndAddAssignment(
|
||||
project, targetClass, method, parameter, type, uniqueNameInfo.names[0], isMethodStatic, isFinal);
|
||||
assert variable != null;
|
||||
assert field != null;
|
||||
if (maybeFinal && !isFinal && FinalUtils.canBeFinal(field)) {
|
||||
Objects.requireNonNull(field.getModifierList()).setModifierProperty(PsiModifier.FINAL, true);
|
||||
}
|
||||
|
||||
updater.rename(variable, List.of(uniqueNameInfo.names));
|
||||
updater.rename(field, List.of(uniqueNameInfo.names));
|
||||
}
|
||||
|
||||
private static boolean isUnusedSymbolInspectionEnabled(@NotNull PsiElement element) {
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
class Person {
|
||||
private String __fname;
|
||||
private final int <caret>myId;
|
||||
private int <caret>myId;
|
||||
private String __lname;
|
||||
private String __street;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user