mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
[java-intentions] CreateConstructorParameterFromFieldFix: fill variables before modifying constructors
When chain target constructor is already updated, it affected other constructors from the same chain Fixes IDEA-345876 Unable to add constructor parameter via quick-fix GitOrigin-RevId: e13d1d24ad16dbd32281b7f13be6d656871acef2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0d42693ef6
commit
2d3ed0f730
@@ -21,6 +21,7 @@ import com.intellij.util.JavaPsiConstructorUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.siyeh.ig.psiutils.VariableAccessUtils;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -153,17 +154,18 @@ public class CreateConstructorParameterFromFieldFix extends PsiBasedModCommandAc
|
||||
updater.trackDeclaration(constructor);
|
||||
}
|
||||
Map<PsiMethod, ChainedConstructorData> data = ChainedConstructorData.getChainedConstructorDataMap(writableFields, writableConstructors);
|
||||
Map<PsiMethod, List<PsiVariable>> params = StreamEx.of(writableConstructors)
|
||||
.toMap(ctr -> fillVariables(writableFields, ctr.getParameterList()));
|
||||
for (PsiMethod constructor : writableConstructors) {
|
||||
addParameterToConstructor(context, constructor, writableFields, updater, data.get(constructor));
|
||||
addParameterToConstructor(context, constructor, updater, data.get(constructor), params.get(constructor));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void addParameterToConstructor(@NotNull ActionContext context, @NotNull PsiMethod constructor,
|
||||
@NotNull List<PsiField> fields, @NotNull ModPsiUpdater updater,
|
||||
@Nullable ChainedConstructorData chainedConstructorData) {
|
||||
@NotNull ModPsiUpdater updater, @Nullable ChainedConstructorData chainedConstructorData,
|
||||
@NotNull List<PsiVariable> params) {
|
||||
final PsiParameterList parameterList = constructor.getParameterList();
|
||||
final List<PsiVariable> params = fillVariables(fields, parameterList);
|
||||
|
||||
final Map<PsiField, String> usedFields = new LinkedHashMap<>();
|
||||
final MultiMap<PsiType, PsiVariable> types = new MultiMap<>();
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// "Add constructor parameter" "true"
|
||||
public class SimpleClass { // IDEA-333847
|
||||
final boolean b;
|
||||
final String s;
|
||||
|
||||
public SimpleClass(boolean b, String s) {
|
||||
this.b = b;
|
||||
this.s = s;
|
||||
}
|
||||
|
||||
public SimpleClass(int i, boolean b, String s) {
|
||||
this.b = b;
|
||||
this.s = s;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// "Add constructor parameter" "true"
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
// IDEA-345876
|
||||
abstract class Test {
|
||||
private final String taskName;
|
||||
|
||||
private final String config;
|
||||
|
||||
private final String moduleName;
|
||||
|
||||
public Test(String config, String taskName, String taskLocation, String moduleName) {
|
||||
this(config, taskName, taskLocation, Collections.emptyList(), moduleName);
|
||||
}
|
||||
|
||||
public Test(String config, String taskLocation,
|
||||
List<String> additionalArguments, String moduleName) {
|
||||
this(config, null, taskLocation, additionalArguments, moduleName);
|
||||
}
|
||||
|
||||
public Test(String config, String taskName, String taskLocation,
|
||||
List<String> additionalArguments, String moduleName) {
|
||||
this.config = config;
|
||||
this.taskName = taskName;
|
||||
this.moduleName = moduleName;
|
||||
System.out.println(additionalArguments);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// "Add constructor parameter" "true"
|
||||
public class SimpleClass { // IDEA-333847
|
||||
final <caret>boolean b;
|
||||
final String s;
|
||||
|
||||
public SimpleClass() {
|
||||
}
|
||||
|
||||
public SimpleClass(int i, String s) {
|
||||
this.s = s;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// "Add constructor parameter" "true"
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
// IDEA-345876
|
||||
abstract class Test {
|
||||
private final String taskName;
|
||||
|
||||
private final String config;
|
||||
|
||||
private final String <caret>moduleName;
|
||||
|
||||
public Test(String config, String taskName, String taskLocation) {
|
||||
this(config, taskName, taskLocation, Collections.emptyList());
|
||||
}
|
||||
|
||||
public Test(String config, String taskLocation,
|
||||
List<String> additionalArguments) {
|
||||
this(config, null, taskLocation, additionalArguments);
|
||||
}
|
||||
|
||||
public Test(String config, String taskName, String taskLocation,
|
||||
List<String> additionalArguments) {
|
||||
this.config = config;
|
||||
this.taskName = taskName;
|
||||
System.out.println(additionalArguments);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user