refactoring: hiding 'prev' logic a bit deeper

This commit is contained in:
rusefillc 2021-12-09 13:00:24 -05:00
parent 64ca0fd559
commit 4d03ff9751
3 changed files with 18 additions and 9 deletions

View File

@ -11,7 +11,7 @@ import java.util.List;
public class FieldIterator {
private final List<ConfigField> tsFields;
BitState bitState = new BitState();
ConfigField prev = ConfigField.VOID;
private ConfigField prev = ConfigField.VOID;
ConfigField next;
ConfigField cf;
@ -19,12 +19,18 @@ public class FieldIterator {
this.tsFields = tsFields;
}
public ConfigField getPrev() {
return prev;
}
public void start(int index) {
next = index == tsFields.size() - 1 ? ConfigField.VOID : tsFields.get(index + 1);
cf = tsFields.get(index);
}
public void end() {
if (!cf.isDirective())
prev = cf;
bitState.incrementBitIndex(cf, next);
}
}

View File

@ -39,18 +39,22 @@ public abstract class JavaFieldsConsumer implements ConfigurationConsumer {
FieldIterator iterator = new FieldIterator(tsFields);
for (int i = 0; i < tsFields.size(); i++) {
iterator.start(i);
// skip duplicate names which happens in case of conditional compilation
if (iterator.cf.getName().equals(iterator.prev.getName()) || iterator.cf.isDirective())
continue;
tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next, iterator.bitState.get());
tsPosition = writeOneField(iterator.cf, prefix, tsPosition, iterator.next,
iterator.bitState.get(),
iterator.getPrev());
iterator.prev = iterator.cf;
iterator.end();
}
return tsPosition;
}
private int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int bitIndex) throws IOException {
private int writeOneField(ConfigField configField, String prefix, int tsPosition, ConfigField next, int bitIndex, ConfigField prev) throws IOException {
if (configField.isDirective())
return tsPosition;
// skip duplicate names which happens in case of conditional compilation
if (configField.getName().equals(prev.getName())) {
return tsPosition;
}
ConfigStructure cs = configField.getState().structures.get(configField.getType());
if (cs != null) {
String extraPrefix = cs.withPrefix ? configField.getName() + "_" : "";

View File

@ -112,14 +112,13 @@ public class TsOutput {
// if duplicate names, use previous position
// we can have same member twice in the
if (iterator.cf.getName().equals(iterator.prev.getName())) {
if (iterator.cf.getName().equals(iterator.getPrev().getName())) {
tsPosition = prevTsPosition;
}
// Update 'prev' state needed for duplicate names recognition
if (!iterator.cf.isDirective()) {
prevTsPosition = tsPosition;
iterator.prev = iterator.cf;
}
tsPosition = writeTunerStudio(iterator.cf, prefix, tsHeader, tsPosition, iterator.next, iterator.bitState.get());