mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
[java-intentions] BindFieldsFromParameters: disable for existing field if static or type doesn't match
GitOrigin-RevId: ad1d93533626f5e76a3f53c5ab25b06a5aa07f1e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0f2865b919
commit
9092a09789
@@ -269,21 +269,29 @@ public final class FieldFromParameterUtils {
|
||||
return isAvailable(myParameter, type, targetClass, true);
|
||||
}
|
||||
|
||||
public static boolean isAvailable(@NotNull PsiParameter myParameter,
|
||||
public static boolean isAvailable(@NotNull PsiParameter parameter,
|
||||
@Nullable PsiType type,
|
||||
@Nullable PsiClass targetClass,
|
||||
boolean findIndirectAssignments) {
|
||||
if (!myParameter.isValid() ||
|
||||
!BaseIntentionAction.canModify(myParameter) ||
|
||||
!(myParameter.getDeclarationScope() instanceof PsiMethod method)) {
|
||||
if (!parameter.isValid() ||
|
||||
!BaseIntentionAction.canModify(parameter) ||
|
||||
!(parameter.getDeclarationScope() instanceof PsiMethod method)) {
|
||||
return false;
|
||||
}
|
||||
if (type == null || targetClass == null || !type.isValid()) {
|
||||
return false;
|
||||
}
|
||||
PsiField existingField = targetClass.findFieldByName(parameter.getName(), true);
|
||||
if (existingField != null) {
|
||||
if (!existingField.getType().isAssignableFrom(type) ||
|
||||
method.hasModifierProperty(PsiModifier.STATIC) != existingField.hasModifierProperty(PsiModifier.STATIC) ||
|
||||
existingField.hasModifierProperty(PsiModifier.FINAL) && !method.isConstructor()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return method.getBody() != null &&
|
||||
type != null &&
|
||||
type.isValid() &&
|
||||
targetClass != null &&
|
||||
!targetClass.isInterface() &&
|
||||
(!targetClass.isRecord() || method.hasModifierProperty(PsiModifier.STATIC)) &&
|
||||
getParameterAssignedToField(myParameter, findIndirectAssignments) == null;
|
||||
getParameterAssignedToField(parameter, findIndirectAssignments) == null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// "Bind method parameters to fields" "true-preview"
|
||||
|
||||
class Bar {
|
||||
private static int f4;
|
||||
private int f1;
|
||||
private static boolean f2;
|
||||
private static final int f3 = 123;
|
||||
|
||||
static void test(int f1, int f2, int f3, int f4) {
|
||||
Bar.f4 = f4;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// "Bind method parameters to fields" "true-preview"
|
||||
|
||||
class Bar {
|
||||
private int f1;
|
||||
private static boolean f2;
|
||||
private static final int f3 = 123;
|
||||
|
||||
static void <caret>test(int f1, int f2, int f3, int f4) {
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user