diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index ec41495579..9617102ba5 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/output/ConfigStructure.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java index 3e5b23d294..15a9ed6416 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigStructure.java @@ -58,12 +58,14 @@ public class ConfigStructure { * we make alignment decision based on C fields since we expect iteration and non-iteration fields * to match in size */ - FieldIteratorWithOffset iterator = new FieldIteratorWithOffset(cFields); - for (int i = 0; i < cFields.size(); i++) { - iterator.start(i); - iterator.end(); - iterator.currentOffset += iterator.cf.getSize(iterator.next); - } + FieldIteratorWithOffset iterator = new FieldIteratorWithOffset(cFields) { + @Override + public void end() { + super.end(); + currentOffset += cf.getSize(next); + } + }; + iterator.loop(); totalSize = iterator.currentOffset; int fillSize = totalSize % 4 == 0 ? 0 : 4 - (totalSize % 4); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java index f3b4e89ab3..734c94acd8 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import java.io.CharArrayWriter; import java.io.FileWriter; import java.io.IOException; +import java.util.List; import java.util.TreeSet; import static com.rusefi.ConfigField.unquote; @@ -40,8 +41,9 @@ public class DataLogConsumer implements ConfigurationConsumer { @Override public void handleEndStruct(ConfigStructure structure) throws IOException { if (state.stack.isEmpty()) { - FieldIterator iterator = new FieldIterator(structure.tsFields); - String content = handleFields(structure, iterator, ""); + DataLogFieldIterator iterator = new DataLogFieldIterator(structure.tsFields, ""); + iterator.loop(); + String content = iterator.sb.toString(); tsWriter.append(content); } @@ -52,17 +54,21 @@ public class DataLogConsumer implements ConfigurationConsumer { } } - private String handleFields(ConfigStructure structure, FieldIterator iterator, String prefix) { + class DataLogFieldIterator extends FieldIterator { + private final String prefix; StringBuilder sb = new StringBuilder(); - for (int i = 0; i < structure.tsFields.size(); i++) { - iterator.start(i); - - String content = handle(iterator.cf, prefix); - sb.append(content); - iterator.end(); + public DataLogFieldIterator(List fields, String prefix) { + super(fields); + this.prefix = prefix; + } + + @Override + public void end() { + String content = handle(cf, prefix); + sb.append(content); + super.end(); } - return sb.toString(); } private String handle(ConfigField configField, String prefix) { @@ -72,7 +78,9 @@ public class DataLogConsumer implements ConfigurationConsumer { ConfigStructure cs = configField.getState().structures.get(configField.getType()); if (cs != null) { String extraPrefix = cs.withPrefix ? configField.getName() + "_" : ""; - return handleFields(cs, new FieldIterator(cs.tsFields), extraPrefix); + DataLogFieldIterator fieldIterator = new DataLogFieldIterator(cs.tsFields, extraPrefix); + fieldIterator.loop(); + return fieldIterator.sb.toString(); } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java index 1fe5a175ec..2899c0c6e3 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FieldIterator.java @@ -9,14 +9,14 @@ import java.util.List; * custom iterator with references to previous and next elements */ public class FieldIterator { - private final List tsFields; + private final List fields; BitState bitState = new BitState(); private ConfigField prev = ConfigField.VOID; ConfigField next; ConfigField cf; - public FieldIterator(List tsFields) { - this.tsFields = tsFields; + public FieldIterator(List fields) { + this.fields = fields; } /** @@ -28,11 +28,18 @@ public class FieldIterator { public void start(int index) { int nextIndex = index + 1; - while (nextIndex < tsFields.size() && tsFields.get(nextIndex).isDirective()) + while (nextIndex < fields.size() && fields.get(nextIndex).isDirective()) nextIndex++; - next = nextIndex >= tsFields.size() ? ConfigField.VOID : tsFields.get(nextIndex); - cf = tsFields.get(index); + next = nextIndex >= fields.size() ? ConfigField.VOID : fields.get(nextIndex); + cf = fields.get(index); + } + + public void loop() { + for (int i = 0; i < fields.size(); i++) { + start(i); + end(); + } } public void end() {