From 0e18b63ca3d1e91c5d8d89d489719036a39544c2 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 17 Apr 2013 15:21:45 +0200 Subject: [PATCH] create constructor params from fields: try to find new parameters also by index/type (IDEA-105566) --- ...reateConstructorParameterFromFieldFix.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java index 8a899ef7d0fa..1191f8b75921 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java @@ -317,11 +317,9 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { boolean created = false; // do not introduce assignment in chanined constructor if (HighlightControlFlowUtil.getChainedConstructors(constructor) == null) { - final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project); - for (PsiField field : fields.keySet()) { final String defaultParamName = fields.get(field); - PsiParameter parameter = findParamByName(defaultParamName, newParameters); + PsiParameter parameter = findParamByName(defaultParamName, field.getType(), newParameters, parameterInfos); if (parameter == null) { continue; } @@ -342,15 +340,25 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { } @Nullable - private static PsiParameter findParamByName(String newName, PsiParameter[] newParameters) { - PsiParameter parameter = null; + private static PsiParameter findParamByName(String newName, + PsiType type, + PsiParameter[] newParameters, + ParameterInfoImpl[] parameterInfos) { for (PsiParameter newParameter : newParameters) { if (Comparing.strEqual(newName, newParameter.getName())) { - parameter = newParameter; - break; + return newParameter; } } - return parameter; + for (int i = 0; i < newParameters.length; i++) { + if (parameterInfos[i].getOldIndex() == -1) { + final PsiParameter parameter = newParameters[i]; + final PsiType paramType = parameterInfos[i].getTypeWrapper().getType(parameter, parameter.getManager()); + if (type.isAssignableFrom(paramType)){ + return parameter; + } + } + } + return null; } private PsiField getField() {