diff --git a/firmware/gen_enum_to_string.sh b/firmware/gen_enum_to_string.sh index 54b8cec9ca..5c8de777f3 100755 --- a/firmware/gen_enum_to_string.sh +++ b/firmware/gen_enum_to_string.sh @@ -10,6 +10,9 @@ java -DSystemOut.name=logs/gen_java_enum -cp ../java_tools/enum2string.jar com.r java -DSystemOut.name=logs/gen_java_enum -cp ../java_tools/enum2string.jar com.rusefi.ToJavaEnum -enumInputFile controllers/sensors/sensor_type.h -outputPath ../java_console/io/src/main/java/com/rusefi/enums [ $? -eq 0 ] || { echo "ERROR generating sensors"; exit 1; } +java -DSystemOut.name=logs/gen_java_enum -cp ../java_tools/enum2string.jar com.rusefi.ToJavaEnum -enumInputFile controllers/algo/engine_types.h -outputPath ../java_console/io/src/main/java/com/rusefi/enums -definition integration/rusefi_config.txt +[ $? -eq 0 ] || { echo "ERROR generating types"; exit 1; } + java -DSystemOut.name=logs/gen_enum_to_string \ -jar ../java_tools/enum2string.jar \ diff --git a/java_tools/enum2string.jar b/java_tools/enum2string.jar index 707a09704b..11a35b7a90 100644 Binary files a/java_tools/enum2string.jar and b/java_tools/enum2string.jar differ diff --git a/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java b/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java index de76983fd2..f7a68a88d8 100644 --- a/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java +++ b/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java @@ -46,8 +46,13 @@ public class ToJavaEnum { List sorted = EnumsReader.getSortedByOrder(registry, enumState.values); + int index = 0; for (Value value : sorted) { + int numericValue = value.getIntValueMaybeResolve(registry); + if (index != numericValue && !value.getName().startsWith("Force_4_bytes_size")) + throw new IllegalStateException(numericValue + " instead of " + index + " in " + value); sb.append("\t" + value.getName() + ",\n"); + index++; } sb.append("}\n"); diff --git a/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java b/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java index b2410b5433..b54fe4dbc8 100644 --- a/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java +++ b/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java @@ -187,6 +187,30 @@ public class EnumToStringTest { "\tGPIO_UNASSIGNED = XXXX,\n" + "}brain_pin_e; // hello"); + VariableRegistry registry = new VariableRegistry(); + registry.readPrependValues(new StringReader("#define XXXX 0")); + + EnumsReader enumsReader = new EnumsReader().read(reader); + for (Map.Entry e : enumsReader.getEnums().entrySet()) { + String java = ToJavaEnum.generate(registry, e.getKey(), e.getValue()); + assertEquals("package com.rusefi.enums;\n" + + "//auto-generated by ToJavaEnum.java\n" + + "\n" + + "\n" + + "\n" + + "public enum brain_pin_e {\n" + + "\tGPIO_UNASSIGNED,\n" + + "}\n", java); + } + } + + @Test(expected = IllegalStateException.class) + public void testWithInputOutOfOrder() throws IOException { + final StringReader reader = new StringReader( + "typedef enum {\n" + + "\tGPIO_UNASSIGNED = XXXX,\n" + + "}brain_pin_e; // hello"); + VariableRegistry registry = new VariableRegistry(); registry.readPrependValues(new StringReader("#define XXXX 12"));