refactoring
This commit is contained in:
parent
2c758692ef
commit
ede9fd5c6f
|
@ -8,8 +8,6 @@ import java.util.Objects;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static com.rusefi.ConfigDefinition.EOL;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is an immutable model of an individual field
|
* This is an immutable model of an individual field
|
||||||
* (c) Andrey Belomutskiy
|
* (c) Andrey Belomutskiy
|
||||||
|
@ -31,16 +29,13 @@ public class ConfigField {
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
private final String comment;
|
private final String comment;
|
||||||
public final String arraySizeAsText;
|
public final String arraySizeVariableName;
|
||||||
private final String type;
|
private final String type;
|
||||||
private final int arraySize;
|
private final int arraySize;
|
||||||
|
|
||||||
public final String tsInfo;
|
private final String tsInfo;
|
||||||
/**
|
private final boolean isIterate;
|
||||||
* this property of array expands field into a bunch of variables like field1 field2 field3 etc
|
private final ReaderState state;
|
||||||
*/
|
|
||||||
public final boolean isIterate;
|
|
||||||
public final ReaderState state;
|
|
||||||
|
|
||||||
public ConfigField(ReaderState state,
|
public ConfigField(ReaderState state,
|
||||||
String name,
|
String name,
|
||||||
|
@ -62,7 +57,7 @@ public class ConfigField {
|
||||||
if (!isVoid())
|
if (!isVoid())
|
||||||
Objects.requireNonNull(type);
|
Objects.requireNonNull(type);
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.arraySizeAsText = arraySizeAsText;
|
this.arraySizeVariableName = arraySizeAsText;
|
||||||
this.arraySize = arraySize;
|
this.arraySize = arraySize;
|
||||||
this.tsInfo = tsInfo;
|
this.tsInfo = tsInfo;
|
||||||
this.isIterate = isIterate;
|
this.isIterate = isIterate;
|
||||||
|
@ -168,5 +163,20 @@ public class ConfigField {
|
||||||
public int getElementSize() {
|
public int getElementSize() {
|
||||||
return isVoid() ? 0 : TypesHelper.getElementSize(state, type);
|
return isVoid() ? 0 : TypesHelper.getElementSize(state, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this property of array expands field into a bunch of variables like field1 field2 field3 etc
|
||||||
|
*/
|
||||||
|
public boolean isIterate() {
|
||||||
|
return isIterate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReaderState getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTsInfo() {
|
||||||
|
return tsInfo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.rusefi;
|
package com.rusefi;
|
||||||
|
|
||||||
import com.rusefi.output.CHeaderConsumer;
|
|
||||||
import com.rusefi.output.ConfigurationConsumer;
|
import com.rusefi.output.ConfigurationConsumer;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
@ -155,11 +154,11 @@ public class ReaderState {
|
||||||
throw new IllegalStateException(cf.getName() + ": Not enclosed in a struct");
|
throw new IllegalStateException(cf.getName() + ": Not enclosed in a struct");
|
||||||
ConfigStructure structure = state.stack.peek();
|
ConfigStructure structure = state.stack.peek();
|
||||||
|
|
||||||
if (cf.isIterate) {
|
if (cf.isIterate()) {
|
||||||
structure.addC(cf);
|
structure.addC(cf);
|
||||||
for (int i = 1; i <= cf.getArraySize(); i++) {
|
for (int i = 1; i <= cf.getArraySize(); i++) {
|
||||||
ConfigField element = new ConfigField(state, cf.getName() + i, cf.getComment(), null,
|
ConfigField element = new ConfigField(state, cf.getName() + i, cf.getComment(), null,
|
||||||
cf.getType(), 1, cf.tsInfo, false);
|
cf.getType(), 1, cf.getTsInfo(), false);
|
||||||
structure.addTs(element);
|
structure.addTs(element);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class CHeaderConsumer implements ConfigurationConsumer {
|
||||||
// not an array
|
// not an array
|
||||||
cEntry += "\t" + configField.getType() + " " + configField.getName() + ";" + EOL;
|
cEntry += "\t" + configField.getType() + " " + configField.getName() + ";" + EOL;
|
||||||
} else {
|
} else {
|
||||||
cEntry += "\t" + configField.getType() + " " + configField.getName() + "[" + configField.arraySizeAsText + "];" + EOL;
|
cEntry += "\t" + configField.getType() + " " + configField.getName() + "[" + configField.arraySizeVariableName + "];" + EOL;
|
||||||
}
|
}
|
||||||
return cEntry;
|
return cEntry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,10 +43,10 @@ public class JavaFieldsConsumer implements ConfigurationConsumer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int writeJavaFields(ConfigField configField, String prefix, Writer javaFieldsWriter, int tsPosition, ConfigField next, int bitIndex) throws IOException {
|
public static int writeJavaFields(ConfigField configField, String prefix, Writer javaFieldsWriter, int tsPosition, ConfigField next, int bitIndex) throws IOException {
|
||||||
ConfigStructure cs = configField.state.structures.get(configField.getType());
|
ConfigStructure cs = configField.getState().structures.get(configField.getType());
|
||||||
if (cs != null) {
|
if (cs != null) {
|
||||||
String extraPrefix = cs.withPrefix ? configField.getName() + "_" : "";
|
String extraPrefix = cs.withPrefix ? configField.getName() + "_" : "";
|
||||||
return writeJavaFields(cs.tsFields, configField.state, prefix + extraPrefix, javaFieldsWriter, tsPosition);
|
return writeJavaFields(cs.tsFields, configField.getState(), prefix + extraPrefix, javaFieldsWriter, tsPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
String nameWithPrefix = prefix + configField.getName();
|
String nameWithPrefix = prefix + configField.getName();
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class TSProjectConsumer implements ConfigurationConsumer {
|
||||||
|
|
||||||
VariableRegistry.INSTANCE.register(nameWithPrefix + "_offset", tsPosition);
|
VariableRegistry.INSTANCE.register(nameWithPrefix + "_offset", tsPosition);
|
||||||
|
|
||||||
ConfigStructure cs = configField.state.structures.get(configField.getType());
|
ConfigStructure cs = configField.getState().structures.get(configField.getType());
|
||||||
if (cs != null) {
|
if (cs != null) {
|
||||||
String extraPrefix = cs.withPrefix ? configField.getName() + "_" : "";
|
String extraPrefix = cs.withPrefix ? configField.getName() + "_" : "";
|
||||||
return cs.writeTunerStudio(prefix + extraPrefix, tsHeader, tsPosition);
|
return cs.writeTunerStudio(prefix + extraPrefix, tsHeader, tsPosition);
|
||||||
|
@ -47,17 +47,17 @@ public class TSProjectConsumer implements ConfigurationConsumer {
|
||||||
return tsPosition;
|
return tsPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (configField.state.tsCustomLine.containsKey(configField.getType())) {
|
if (configField.getState().tsCustomLine.containsKey(configField.getType())) {
|
||||||
String bits = configField.state.tsCustomLine.get(configField.getType());
|
String bits = configField.getState().tsCustomLine.get(configField.getType());
|
||||||
tsHeader.write("\t" + addTabsUpTo(nameWithPrefix, LENGTH));
|
tsHeader.write("\t" + addTabsUpTo(nameWithPrefix, LENGTH));
|
||||||
int size = configField.state.tsCustomSize.get(configField.getType());
|
int size = configField.getState().tsCustomSize.get(configField.getType());
|
||||||
// tsHeader.headerWrite("\t" + size + ",");
|
// tsHeader.headerWrite("\t" + size + ",");
|
||||||
// tsHeader.headerWrite("\t" + tsPosition + ",");
|
// tsHeader.headerWrite("\t" + tsPosition + ",");
|
||||||
bits = bits.replaceAll("@OFFSET@", "" + tsPosition);
|
bits = bits.replaceAll("@OFFSET@", "" + tsPosition);
|
||||||
tsHeader.write("\t = " + bits);
|
tsHeader.write("\t = " + bits);
|
||||||
|
|
||||||
tsPosition += size;
|
tsPosition += size;
|
||||||
} else if (configField.tsInfo == null) {
|
} else if (configField.getTsInfo() == null) {
|
||||||
tsHeader.write(";no TS info - skipping " + prefix + configField.getName() + " offset " + tsPosition);
|
tsHeader.write(";no TS info - skipping " + prefix + configField.getName() + " offset " + tsPosition);
|
||||||
tsPosition += configField.getArraySize() * configField.getElementSize();
|
tsPosition += configField.getArraySize() * configField.getElementSize();
|
||||||
} else if (configField.getArraySize() != 1) {
|
} else if (configField.getArraySize() != 1) {
|
||||||
|
@ -65,14 +65,14 @@ public class TSProjectConsumer implements ConfigurationConsumer {
|
||||||
tsHeader.write(TypesHelper.convertToTs(configField.getType()) + ",");
|
tsHeader.write(TypesHelper.convertToTs(configField.getType()) + ",");
|
||||||
tsHeader.write("\t" + tsPosition + ",");
|
tsHeader.write("\t" + tsPosition + ",");
|
||||||
tsHeader.write("\t[" + configField.getArraySize() + "],");
|
tsHeader.write("\t[" + configField.getArraySize() + "],");
|
||||||
tsHeader.write("\t" + configField.tsInfo);
|
tsHeader.write("\t" + configField.getTsInfo());
|
||||||
|
|
||||||
tsPosition += configField.getArraySize() * configField.getElementSize();
|
tsPosition += configField.getArraySize() * configField.getElementSize();
|
||||||
} else {
|
} else {
|
||||||
tsHeader.write("\t" + addTabsUpTo(nameWithPrefix, LENGTH) + "\t\t= scalar, ");
|
tsHeader.write("\t" + addTabsUpTo(nameWithPrefix, LENGTH) + "\t\t= scalar, ");
|
||||||
tsHeader.write(TypesHelper.convertToTs(configField.getType()) + ",");
|
tsHeader.write(TypesHelper.convertToTs(configField.getType()) + ",");
|
||||||
tsHeader.write("\t" + tsPosition + ",");
|
tsHeader.write("\t" + tsPosition + ",");
|
||||||
tsHeader.write("\t" + configField.tsInfo);
|
tsHeader.write("\t" + configField.getTsInfo());
|
||||||
tsPosition += configField.getArraySize() * configField.getElementSize();
|
tsPosition += configField.getArraySize() * configField.getElementSize();
|
||||||
}
|
}
|
||||||
tsHeader.write(EOL);
|
tsHeader.write(EOL);
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class ConfigFieldParserTest {
|
||||||
assertEquals(cf.getType(), "uint8_t");
|
assertEquals(cf.getType(), "uint8_t");
|
||||||
assertEquals(cf.getArraySize(), 8);
|
assertEquals(cf.getArraySize(), 8);
|
||||||
assertEquals(cf.getSize(null), 8);
|
assertEquals(cf.getSize(null), 8);
|
||||||
assertFalse("isIterate", cf.isIterate);
|
assertFalse("isIterate", cf.isIterate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,13 +43,13 @@ public class ConfigFieldParserTest {
|
||||||
assertEquals(cf.getType(), "int_8");
|
assertEquals(cf.getType(), "int_8");
|
||||||
assertEquals(cf.getName(), "fi_eld");
|
assertEquals(cf.getName(), "fi_eld");
|
||||||
assertEquals("Comment", cf.getComment(), "comm_");
|
assertEquals("Comment", cf.getComment(), "comm_");
|
||||||
assertEquals(cf.tsInfo, "ts");
|
assertEquals(cf.getTsInfo(), "ts");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
ConfigField cf = ConfigField.parse(state, "int[3 iterate] field");
|
ConfigField cf = ConfigField.parse(state, "int[3 iterate] field");
|
||||||
assertEquals(cf.getType(), "int");
|
assertEquals(cf.getType(), "int");
|
||||||
assertEquals(cf.getArraySize(), 3);
|
assertEquals(cf.getArraySize(), 3);
|
||||||
assertTrue("isIterate", cf.isIterate);
|
assertTrue("isIterate", cf.isIterate());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
ConfigField cf = ConfigField.parse(state, "int16_t crankingRpm;This,. value controls what RPM values we consider 'cranking' (any RPM below 'crankingRpm')\\nAnything above 'crankingRpm' would be 'running'");
|
ConfigField cf = ConfigField.parse(state, "int16_t crankingRpm;This,. value controls what RPM values we consider 'cranking' (any RPM below 'crankingRpm')\\nAnything above 'crankingRpm' would be 'running'");
|
||||||
|
|
Loading…
Reference in New Issue