boolean (ParameterInfoImpl[] parameterInfos) { final JavaParameterInfo[] oldParameters = getNewParameters(); final String[] oldParameterNames = getOldParameterNames(); final String[] oldParameterTypes = getOldParameterTypes(); final Map<JavaParameterInfo, Integer> untouchedParams = new HashMap<>(); for (int i = 0; i < parameterInfos.length; i++) { ParameterInfoImpl parameterInfo = parameterInfos[i]; JavaParameterInfo oldParameter = null; for (JavaParameterInfo parameter : oldParameters) { if (Comparing.strEqual(parameter.getName(), parameterInfo.getName()) && Comparing.strEqual(parameter.getTypeText(), parameterInfo.getTypeText())) { oldParameter = parameter; break; } } if (oldParameter != null) { parameterInfos[i] = ParameterInfoImpl.create(oldParameter.getOldIndex()) .withName(oldParameter.getName()) .withType(oldParameter.getTypeWrapper()) .withDefaultValue(null); untouchedParams.put(parameterInfos[i], oldParameter.getOldIndex()); } } for (int i = 0; i < parameterInfos.length; i++) { ParameterInfoImpl parameterInfo = parameterInfos[i]; if (!untouchedParams.containsKey(parameterInfo)) { JavaParameterInfo oldParameter = null; if (oldParameters.length > i && oldParameterNames.length > i) { if (Comparing.strEqual(oldParameterNames[i], parameterInfo.getName()) || Comparing.strEqual(oldParameterTypes[i], parameterInfo.getTypeText())) { if (!untouchedParams.containsValue(oldParameters[i].getOldIndex())) { oldParameter = oldParameters[i]; } } } final CanonicalTypes.Type typeWrapper = parameterInfo.getTypeWrapper(); if (!typeWrapper.isValid()) return false; parameterInfos[i] = ParameterInfoImpl.create(oldParameter != null ? oldParameter.getOldIndex() : NEW_PARAMETER) .withName(parameterInfo.getName()) .withType(typeWrapper) .withDefaultValue(null); } } return true; }