diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 77a8ac206c..4e2b18f84f 100644 Binary files a/java_tools/ConfigDefinition.jar and b/java_tools/ConfigDefinition.jar differ diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/PinoutLogic.java b/java_tools/configuration_definition/src/main/java/com/rusefi/PinoutLogic.java index 7a6a91d3c3..dd2b02530a 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/PinoutLogic.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/PinoutLogic.java @@ -13,6 +13,8 @@ import static com.rusefi.output.JavaSensorsConsumer.quote; public class PinoutLogic { private static final String CONFIG_BOARDS = "config/boards/"; private static final String CONNECTORS = "/connectors"; + private static final String QUOTED_NONE = quote("NONE"); + private static final String QUOTED_INVALID = quote("INVALID"); private final File[] boardYamlFiles; private final String boardName; @@ -71,20 +73,33 @@ public class PinoutLogic { @NotNull public static String enumToOptionsList(String nothingName, EnumsReader.EnumState enumList, ArrayList values) { - StringBuilder sb = new StringBuilder(); + StringBuilder simpleForm = new StringBuilder(); + StringBuilder smartForm = new StringBuilder(); for (int i = 0; i < values.size(); i++) { - if (sb.length() > 0) - sb.append(","); + appendCommandIfNeeded(simpleForm); String key = findKey(enumList, i); if (key.equals(nothingName)) { - sb.append("\"NONE\""); + simpleForm.append(QUOTED_NONE); + appendCommandIfNeeded(smartForm); + smartForm.append(i + "=" + QUOTED_NONE); + } else if (values.get(i) == null) { - sb.append(quote("INVALID")); + simpleForm.append(QUOTED_INVALID); } else { - sb.append("\"" + values.get(i) + "\""); + appendCommandIfNeeded(smartForm); + String quotedValue = quote(values.get(i)); + smartForm.append(i + "=" + quotedValue); + simpleForm.append(quotedValue); } } - return sb.toString(); + if (smartForm.length() < simpleForm.length()) + return smartForm.toString(); + return simpleForm.toString(); + } + + private static void appendCommandIfNeeded(StringBuilder sb) { + if (sb.length() > 0) + sb.append(","); } private static String findKey(EnumsReader.EnumState enumList, int i) { diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/PinoutLogicTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/PinoutLogicTest.java index c1f928b1ba..abfba2409a 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/PinoutLogicTest.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/PinoutLogicTest.java @@ -20,10 +20,17 @@ public class PinoutLogicTest { currentValues.put("KEY4", new Value("NO", "4")); EnumsReader.EnumState enumState = new EnumsReader.EnumState(currentValues, "pins", true); - ArrayList list = new ArrayList<>(Arrays.asList("1", "NO", null, null, null, null, null, "10")); + { + ArrayList list = new ArrayList<>(Arrays.asList("1", "NO", "10")); + String result = PinoutLogic.enumToOptionsList("NO", enumState, list); + assertEquals("\"1\",\"NO\",\"10\"", result); - String result = PinoutLogic.enumToOptionsList("NO", enumState, list); - assertEquals("\"1\",\"NO\",\"INVALID\",\"INVALID\",\"INVALID\",\"INVALID\",\"INVALID\",\"10\"", result); + } + { + ArrayList list = new ArrayList<>(Arrays.asList("1", "NO", null, null, null, null, null, "10")); + String result = PinoutLogic.enumToOptionsList("NO", enumState, list); + assertEquals("0=\"1\",1=\"NO\",7=\"10\"", result); + } } }