mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
create field from parameter even if parameter is already used in assignment
IDEA-192896
This commit is contained in:
+1
-1
@@ -32,7 +32,7 @@ public class CreateFieldFromParameterAction extends CreateFieldFromParameterActi
|
||||
protected boolean isAvailable(PsiParameter psiParameter) {
|
||||
final PsiType type = getSubstitutedType(psiParameter);
|
||||
final PsiClass targetClass = PsiTreeUtil.getParentOfType(psiParameter, PsiClass.class);
|
||||
return FieldFromParameterUtils.isAvailable(psiParameter, type, targetClass) &&
|
||||
return FieldFromParameterUtils.isAvailable(psiParameter, type, targetClass, false) &&
|
||||
psiParameter.getLanguage().isKindOf(JavaLanguage.INSTANCE);
|
||||
}
|
||||
|
||||
|
||||
+24
-3
@@ -109,10 +109,22 @@ public final class FieldFromParameterUtils {
|
||||
|
||||
@Nullable
|
||||
public static PsiField getParameterAssignedToField(final PsiParameter parameter) {
|
||||
return getParameterAssignedToField(parameter, true);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiField getParameterAssignedToField(final PsiParameter parameter, boolean findIndirectAssignments) {
|
||||
for (PsiReference reference : ReferencesSearch.search(parameter, new LocalSearchScope(parameter.getDeclarationScope()), false)) {
|
||||
if (!(reference instanceof PsiReferenceExpression)) continue;
|
||||
final PsiReferenceExpression expression = (PsiReferenceExpression)reference;
|
||||
PsiAssignmentExpression assignmentExpression = PsiTreeUtil.getParentOfType(expression, PsiAssignmentExpression.class, true, PsiClass.class);
|
||||
PsiAssignmentExpression assignmentExpression;
|
||||
if (findIndirectAssignments) {
|
||||
assignmentExpression = PsiTreeUtil.getParentOfType(expression, PsiAssignmentExpression.class, true, PsiClass.class);
|
||||
}
|
||||
else {
|
||||
PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent());
|
||||
assignmentExpression = parent instanceof PsiAssignmentExpression ? (PsiAssignmentExpression)parent : null;
|
||||
}
|
||||
if (assignmentExpression == null) continue;
|
||||
if (!PsiTreeUtil.isAncestor(assignmentExpression.getRExpression(), expression, false)) continue;
|
||||
final PsiExpression lExpression = assignmentExpression.getLExpression();
|
||||
@@ -256,7 +268,16 @@ public final class FieldFromParameterUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isAvailable(@Nullable PsiParameter myParameter, @Nullable PsiType type, @Nullable PsiClass targetClass) {
|
||||
public static boolean isAvailable(@Nullable PsiParameter myParameter,
|
||||
@Nullable PsiType type,
|
||||
@Nullable PsiClass targetClass) {
|
||||
return isAvailable(myParameter, type, targetClass, true);
|
||||
}
|
||||
|
||||
public static boolean isAvailable(@Nullable PsiParameter myParameter,
|
||||
@Nullable PsiType type,
|
||||
@Nullable PsiClass targetClass,
|
||||
boolean findIndirectAssignments) {
|
||||
return myParameter != null
|
||||
&& myParameter.isValid()
|
||||
&& myParameter.getManager().isInProject(myParameter)
|
||||
@@ -266,7 +287,7 @@ public final class FieldFromParameterUtils {
|
||||
&& type.isValid()
|
||||
&& targetClass != null
|
||||
&& !targetClass.isInterface()
|
||||
&& getParameterAssignedToField(myParameter) == null;
|
||||
&& getParameterAssignedToField(myParameter, findIndirectAssignments) == null;
|
||||
}
|
||||
|
||||
private FieldFromParameterUtils() { }
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// "Create field for parameter 'p1'" "true"
|
||||
|
||||
class Test{
|
||||
int b;
|
||||
@org.jetbrains.annotations.NotNull
|
||||
private final String myP1;
|
||||
|
||||
Test(String p1){
|
||||
b = p1.length();
|
||||
myP1 = p1;
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// "Create field for parameter 'p1'" "true"
|
||||
|
||||
class Test{
|
||||
int b;
|
||||
Test(String p<caret>1){
|
||||
b = p1.length();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user