progress towards compact enum syntax

This commit is contained in:
rusefillc 2022-05-09 07:02:01 -04:00
parent 2132cec3fc
commit 56d5d77300
4 changed files with 76 additions and 29 deletions

View File

@ -2,11 +2,14 @@ package com.rusefi;
import com.rusefi.enum_reader.Value;
import com.rusefi.util.SystemOut;
import org.jetbrains.annotations.NotNull;
import org.yaml.snakeyaml.Yaml;
import java.io.*;
import java.util.*;
import static com.rusefi.output.JavaSensorsConsumer.quote;
public class PinoutLogic {
private static final String CONFIG_BOARDS = "config/boards/";
private static final String CONNECTORS = "/connectors";
@ -59,31 +62,42 @@ public class PinoutLogic {
String pinType = namePinType.getPinType();
String nothingName = namePinType.getNothingName();
EnumsReader.EnumState enumList = state.enumsReader.getEnums().get(pinType);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < kv.getValue().size(); i++) {
if (sb.length() > 0)
sb.append(",");
String key = "";
for (Map.Entry<String, Value> entry : enumList.entrySet()) {
if (entry.getValue().getIntValue() == i) {
key = entry.getKey();
break;
}
}
if (key.equals(nothingName)) {
sb.append("\"NONE\"");
} else if (kv.getValue().get(i) == null) {
sb.append("\"INVALID\"");
} else {
sb.append("\"" + kv.getValue().get(i) + "\"");
}
}
String sb = enumToOptionsList(nothingName, enumList, kv.getValue());
if (sb.length() > 0) {
registry.register(outputEnumName, sb.toString());
registry.register(outputEnumName, sb);
}
}
}
@NotNull
public static String enumToOptionsList(String nothingName, EnumsReader.EnumState enumList, ArrayList<String> values) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.size(); i++) {
if (sb.length() > 0)
sb.append(",");
String key = findKey(enumList, i);
if (key.equals(nothingName)) {
sb.append("\"NONE\"");
} else if (values.get(i) == null) {
sb.append(quote("INVALID"));
} else {
sb.append("\"" + values.get(i) + "\"");
}
}
return sb.toString();
}
private static String findKey(EnumsReader.EnumState enumList, int i) {
String key = "";
for (Map.Entry<String, Value> entry : enumList.entrySet()) {
if (entry.getValue().getIntValue() == i) {
key = entry.getKey();
break;
}
}
return key;
}
@SuppressWarnings("unchecked")
private void readMetaInfo(File yamlFile) throws IOException {
Yaml yaml = new Yaml();
@ -174,10 +188,6 @@ public class PinoutLogic {
}
}
private String quote(String value) {
return "\"" + value + "\"";
}
public List<String> getInputFiles() {
List<String> result = new ArrayList<>();
for (File yamlFile : boardYamlFiles) {

View File

@ -72,7 +72,7 @@ public class ConfigFieldParserTest {
ReaderState state = new ReaderState();
BaseCHeaderConsumer consumer = new BaseCHeaderConsumer();
state.readBufferedReader(test, (consumer));
state.readBufferedReader(test, consumer);
}
@Test

View File

@ -0,0 +1,29 @@
package com.rusefi.test;
import com.rusefi.EnumsReader;
import com.rusefi.PinoutLogic;
import com.rusefi.enum_reader.Value;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
import static org.junit.Assert.assertEquals;
public class PinoutLogicTest {
@Test
public void testEnumToTs() {
Map<String, Value> currentValues = new TreeMap<>();
currentValues.put("KEY", new Value(null, "3"));
currentValues.put("KEY4", new Value("NO", "4"));
EnumsReader.EnumState enumState = new EnumsReader.EnumState(currentValues, "pins", true);
ArrayList<String> list = new ArrayList<>(Arrays.asList("1", "NO", null, null, null, null, null, "10"));
String result = PinoutLogic.enumToOptionsList("NO", enumState, list);
assertEquals("\"1\",\"NO\",\"INVALID\",\"INVALID\",\"INVALID\",\"INVALID\",\"INVALID\",\"10\"", result);
}
}

View File

@ -2,12 +2,20 @@ package com.rusefi;
import com.devexperts.logging.Logging;
import com.rusefi.enum_reader.Value;
import com.rusefi.util.SystemOut;
import org.jetbrains.annotations.NotNull;
import java.io.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import static com.devexperts.logging.Logging.getLogging;
@ -130,7 +138,7 @@ public class EnumsReader {
}
public static class EnumState {
public Map<String, Value> values;
public final Map<String, Value> values;
public final String enumName;
public final boolean isEnumClass;