reducing code duplication

This commit is contained in:
rusefillc 2022-04-17 01:43:46 -04:00
parent 82f608d558
commit 07d8ac77bc
6 changed files with 129 additions and 130 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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;

View File

@ -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);
}
} }
} }

View File

@ -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 + "\"";

View File

@ -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" +