From 1b2485a6d9cd36bcd88894726e1d0802ea2f4d50 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Thu, 9 Dec 2021 13:45:45 -0500 Subject: [PATCH] random clean-up and more explicit handing of 33 bits in a row --- .../src/main/java/com/rusefi/BitState.java | 8 ++++- .../src/main/java/com/rusefi/ConfigField.java | 32 ++++++------------- .../src/main/java/com/rusefi/ReaderState.java | 2 +- .../java/com/rusefi/test/OutputsTest.java | 15 +++++++++ 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/BitState.java b/java_tools/configuration_definition/src/main/java/com/rusefi/BitState.java index 6a575bbd57..53b010a764 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/BitState.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/BitState.java @@ -17,7 +17,7 @@ public class BitState { public void incrementBitIndex(ConfigField cf) { if (bitIndex == 32) - throw new IllegalStateException("Too many bits: " + cf.getName()); + throw new TooManyBitsInARow("Too many bits in a row: " + cf.getName()); bitIndex++; } @@ -28,4 +28,10 @@ public class BitState { public int get() { return bitIndex; } + + public static class TooManyBitsInARow extends RuntimeException { + public TooManyBitsInARow(String s) { + super(s); + } + } } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java index 5c656c233f..904cf0246b 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java @@ -1,5 +1,6 @@ package com.rusefi; +import com.rusefi.output.JavaFieldsConsumer; import com.rusefi.util.SystemOut; import com.rusefi.test.ConfigFieldParserTest; @@ -43,8 +44,6 @@ public class ConfigField { private final ReaderState state; private final boolean fsioVisible; private final boolean hasAutoscale; - private final String individualName; - private final int indexWithinArray; private final String trueName; private final String falseName; @@ -62,11 +61,11 @@ public class ConfigField { boolean fsioVisible, boolean hasAutoscale, String individualName, - int indexWithinArray, String trueName, String falseName) { + int indexWithinArray, + String trueName, + String falseName) { this.fsioVisible = fsioVisible; this.hasAutoscale = hasAutoscale; - this.individualName = individualName; - this.indexWithinArray = indexWithinArray; this.trueName = trueName == null ? "true" : trueName; this.falseName = falseName == null ? "false" : falseName; Objects.requireNonNull(name, comment + " " + type); @@ -99,19 +98,6 @@ public class ConfigField { return falseName; } - public String getCFieldName() { - return getIndividualName() == null ? getName() : getIndividualName() + "[" - + (getIndexWithinArray() - 1) + "]"; - } - - public String getIndividualName() { - return individualName; - } - - public int getIndexWithinArray() { - return indexWithinArray; - } - public boolean isBit() { return BOOLEAN_T.equalsIgnoreCase(type); } @@ -182,14 +168,16 @@ public class ConfigField { return field; } - public static boolean isPreprocessorDirective(ReaderState state, String line) { + public static boolean isPreprocessorDirective(String line) { Matcher matcher = DIRECTIVE.matcher(line); return matcher.matches(); } public int getSize(ConfigField next) { - if (isBit() && next.isBit()) + if (isBit() && next.isBit()) { + // we have a protection from 33+ bits in a row in BitState, see BitState.TooManyBitsInARow return 0; + } if (isBit()) return 4; int size = getElementSize(); @@ -265,7 +253,7 @@ public class ConfigField { } if (tsInfo == null) throw new IllegalArgumentException("tsInfo expected with autoscale"); - String[] tokens = tsInfo.split("\\,"); + String[] tokens = tsInfo.split(","); if (tokens.length < 2) throw new IllegalArgumentException("Second comma-separated token expected in [" + tsInfo + "] for " + name); @@ -303,7 +291,7 @@ public class ConfigField { private String[] getTokens() { if (tsInfo == null) return new String[0]; - return tsInfo.split("\\,"); + return tsInfo.split(","); } public String getUnits() { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java index 4b0703cef1..76a2001169 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java @@ -240,7 +240,7 @@ public class ReaderState { ConfigField cf = ConfigField.parse(state, line); if (cf == null) { - if (ConfigField.isPreprocessorDirective(state, line)) { + if (ConfigField.isPreprocessorDirective(line)) { cf = new ConfigField(state, "", line, null, ConfigField.DIRECTIVE_T, new int[0], null, false, false, false, null, 0, null, null); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java b/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java index e33f03982d..b1e2fdfd8e 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java @@ -1,5 +1,6 @@ package com.rusefi.test; +import com.rusefi.BitState; import com.rusefi.ReaderState; import com.rusefi.output.DataLogConsumer; import com.rusefi.output.GaugeConsumer; @@ -65,6 +66,20 @@ public class OutputsTest { } + @Test(expected = BitState.TooManyBitsInARow.class) + public void tooManyBits() throws IOException { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 40; i++) + sb.append("bit b" + i + "\n"); + String test = "struct total\n" + + sb + + "end_struct\n"; + ReaderState state = new ReaderState(); + + OutputsSectionConsumer tsProjectConsumer = new OutputsSectionConsumer(null, state); + state.readBufferedReader(test, Collections.singletonList(tsProjectConsumer)); + } + @Test public void generateDataLog() throws IOException { String test = "struct total\n" +