mirror of https://github.com/rusefi/rusefi-1.git
reducing code duplication
This commit is contained in:
parent
82f608d558
commit
07d8ac77bc
|
@ -70,7 +70,7 @@ public class UsagesReader {
|
||||||
state.setDefinitionInputFile(folder + File.separator + name + ".txt");
|
state.setDefinitionInputFile(folder + File.separator + name + ".txt");
|
||||||
state.withC_Defines = withCDefines;
|
state.withC_Defines = withCDefines;
|
||||||
|
|
||||||
JavaSensorsConsumer javaSensorsConsumer = new JavaSensorsConsumer(state, usagesReader.sensorTsPosition);
|
JavaSensorsConsumer javaSensorsConsumer = new JavaSensorsConsumer(usagesReader.sensorTsPosition);
|
||||||
state.addDestination(javaSensorsConsumer);
|
state.addDestination(javaSensorsConsumer);
|
||||||
|
|
||||||
state.addPrepend(prepend);
|
state.addPrepend(prepend);
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.rusefi.output;
|
||||||
|
|
||||||
|
import com.rusefi.ConfigField;
|
||||||
|
import com.rusefi.ReaderState;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public abstract class FieldsStrategy {
|
||||||
|
public void run(ReaderState state, ConfigStructure structure) throws IOException {
|
||||||
|
if (state.stack.isEmpty()) {
|
||||||
|
writeJavaFields(structure.tsFields, "", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int writeJavaFields(List<ConfigField> tsFields, String prefix, int tsPosition) throws IOException {
|
||||||
|
FieldIterator iterator = new FieldIterator(tsFields);
|
||||||
|
for (int i = 0; i < tsFields.size(); i++) {
|
||||||
|
iterator.start(i);
|
||||||
|
tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next,
|
||||||
|
iterator.bitState.get(),
|
||||||
|
iterator.getPrev());
|
||||||
|
|
||||||
|
iterator.end();
|
||||||
|
}
|
||||||
|
return tsPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int bitIndex, ConfigField prev) throws IOException;
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package com.rusefi.output;
|
package com.rusefi.output;
|
||||||
|
|
||||||
import com.rusefi.ConfigDefinition;
|
|
||||||
import com.rusefi.ReaderState;
|
import com.rusefi.ReaderState;
|
||||||
import com.rusefi.ToolUtil;
|
import com.rusefi.ToolUtil;
|
||||||
import com.rusefi.util.LazyFile;
|
import com.rusefi.util.LazyFile;
|
||||||
|
|
|
@ -35,20 +35,24 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer {
|
||||||
+ tsPosition + ", ");
|
+ tsPosition + ", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private int writeJavaFields(List<ConfigField> tsFields, String prefix, int tsPosition) throws IOException {
|
public static String getJavaType(int elementSize) {
|
||||||
FieldIterator iterator = new FieldIterator(tsFields);
|
if (elementSize == 1) {
|
||||||
for (int i = 0; i < tsFields.size(); i++) {
|
return ("FieldType.INT8");
|
||||||
iterator.start(i);
|
} else if (elementSize == 2) {
|
||||||
tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next,
|
return "FieldType.INT16";
|
||||||
iterator.bitState.get(),
|
} else {
|
||||||
iterator.getPrev());
|
return "FieldType.INT";
|
||||||
|
|
||||||
iterator.end();
|
|
||||||
}
|
}
|
||||||
return tsPosition;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int bitIndex, ConfigField prev) throws IOException {
|
private boolean isStringField(ConfigField configField) {
|
||||||
|
String custom = state.tsCustomLine.get(configField.getType());
|
||||||
|
return custom != null && custom.toLowerCase().startsWith(IniFileModel.FIELD_TYPE_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException {
|
||||||
|
FieldsStrategy fieldsStrategy = new FieldsStrategy() {
|
||||||
|
protected int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int bitIndex, ConfigField prev) throws IOException {
|
||||||
if (configField.isDirective())
|
if (configField.isDirective())
|
||||||
return tsPosition;
|
return tsPosition;
|
||||||
// skip duplicate names which happens in case of conditional compilation
|
// skip duplicate names which happens in case of conditional compilation
|
||||||
|
@ -102,25 +106,7 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer {
|
||||||
|
|
||||||
return tsPosition;
|
return tsPosition;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
public static String getJavaType(int elementSize) {
|
fieldsStrategy.run(state, structure);
|
||||||
if (elementSize == 1) {
|
|
||||||
return ("FieldType.INT8");
|
|
||||||
} else if (elementSize == 2) {
|
|
||||||
return "FieldType.INT16";
|
|
||||||
} else {
|
|
||||||
return "FieldType.INT";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isStringField(ConfigField configField) {
|
|
||||||
String custom = state.tsCustomLine.get(configField.getType());
|
|
||||||
return custom != null && custom.toLowerCase().startsWith(IniFileModel.FIELD_TYPE_STRING);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException {
|
|
||||||
if (state.stack.isEmpty()) {
|
|
||||||
writeJavaFields(structure.tsFields, "", 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,17 +4,13 @@ import com.rusefi.ConfigField;
|
||||||
import com.rusefi.ReaderState;
|
import com.rusefi.ReaderState;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class JavaSensorsConsumer implements ConfigurationConsumer {
|
public class JavaSensorsConsumer implements ConfigurationConsumer {
|
||||||
private final ReaderState state;
|
|
||||||
public int sensorTsPosition;
|
public int sensorTsPosition;
|
||||||
|
|
||||||
private final StringBuilder sb = new StringBuilder();
|
private final StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
public JavaSensorsConsumer(ReaderState state, int sensorTsPosition) {
|
public JavaSensorsConsumer(int sensorTsPosition) {
|
||||||
|
|
||||||
this.state = state;
|
|
||||||
this.sensorTsPosition = sensorTsPosition;
|
this.sensorTsPosition = sensorTsPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,25 +24,8 @@ public class JavaSensorsConsumer implements ConfigurationConsumer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException {
|
public void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException {
|
||||||
if (state.stack.isEmpty()) {
|
FieldsStrategy fieldsStrategy = new FieldsStrategy() {
|
||||||
sensorTsPosition = writeJavaFields(structure.tsFields, "", sensorTsPosition);
|
public int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int i, ConfigField prev) {
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int writeJavaFields(List<ConfigField> tsFields, String prefix, int tsPosition) {
|
|
||||||
FieldIterator iterator = new FieldIterator(tsFields);
|
|
||||||
for (int i = 0; i < tsFields.size(); i++) {
|
|
||||||
iterator.start(i);
|
|
||||||
tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next,
|
|
||||||
iterator.bitState.get(),
|
|
||||||
iterator.getPrev());
|
|
||||||
|
|
||||||
iterator.end();
|
|
||||||
}
|
|
||||||
return tsPosition;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int i, ConfigField prev) {
|
|
||||||
if (configField.isBit()) {
|
if (configField.isBit()) {
|
||||||
// do not support bits for now but need to account for size
|
// do not support bits for now but need to account for size
|
||||||
tsPosition += configField.getSize(next);
|
tsPosition += configField.getSize(next);
|
||||||
|
@ -54,7 +33,7 @@ public class JavaSensorsConsumer implements ConfigurationConsumer {
|
||||||
}
|
}
|
||||||
sb.append(configField.getName()).append("(");
|
sb.append(configField.getName()).append("(");
|
||||||
|
|
||||||
String string = state.variableRegistry.applyVariables(configField.getComment());
|
String string = readerState.variableRegistry.applyVariables(configField.getComment());
|
||||||
if (string == null || string.isEmpty()) {
|
if (string == null || string.isEmpty()) {
|
||||||
string = quote(configField.getName());
|
string = quote(configField.getName());
|
||||||
} else if (string.charAt(0) != '"') {
|
} else if (string.charAt(0) != '"') {
|
||||||
|
@ -81,6 +60,10 @@ public class JavaSensorsConsumer implements ConfigurationConsumer {
|
||||||
tsPosition += configField.getSize(next);
|
tsPosition += configField.getSize(next);
|
||||||
return tsPosition;
|
return tsPosition;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
fieldsStrategy.run(readerState, structure);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static String quote(String string) {
|
private static String quote(String string) {
|
||||||
return "\"" + string + "\"";
|
return "\"" + string + "\"";
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class JavaSensorsConsumerTest {
|
||||||
"\tuint8_t vehicleSpeedKph\n" +
|
"\tuint8_t vehicleSpeedKph\n" +
|
||||||
"\tint8_t autoscale internalMcuTemperature;mcu;\"deg C\",1, 0, 0, 0, 0\n" +
|
"\tint8_t autoscale internalMcuTemperature;mcu;\"deg C\",1, 0, 0, 0, 0\n" +
|
||||||
"end_struct\n";
|
"end_struct\n";
|
||||||
JavaSensorsConsumer javaSensorsConsumer = new JavaSensorsConsumer(state, 0);
|
JavaSensorsConsumer javaSensorsConsumer = new JavaSensorsConsumer(0);
|
||||||
state.readBufferedReader(outputChannels, javaSensorsConsumer);
|
state.readBufferedReader(outputChannels, javaSensorsConsumer);
|
||||||
|
|
||||||
assertEquals("RPMValue(\"hello\", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 4, 1.0, 0.0, 8000.0, \"RPM\"),\n" +
|
assertEquals("RPMValue(\"hello\", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 4, 1.0, 0.0, 8000.0, \"RPM\"),\n" +
|
||||||
|
|
Loading…
Reference in New Issue