diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 0157b30344..4b444e30bf 100644 Binary files a/java_tools/ConfigDefinition.jar and b/java_tools/ConfigDefinition.jar differ diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java index 4fe9dd1cf6..b90751b836 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java @@ -16,8 +16,7 @@ import java.util.*; * @see ConfigurationConsumer */ public class ConfigDefinition { - static final String SIGNATURE_HASH = "SIGNATURE_HASH"; - public static String MESSAGE; + public static final String SIGNATURE_HASH = "SIGNATURE_HASH"; private static final String ROM_RAIDER_XML_TEMPLATE = "rusefi_template.xml"; private static final String KEY_DEFINITION = "-definition"; @@ -68,7 +67,6 @@ public class ConfigDefinition { String tsInputFileFolder = null; String destCDefinesFileName = null; - String javaDestinationFileName = null; String romRaiderDestination = null; // we postpone reading so that in case of cache hit we do less work List prependFiles = new ArrayList<>(); @@ -96,6 +94,7 @@ public class ConfigDefinition { break; case KEY_DEFINITION: definitionInputFile = args[i + 1]; + state.headerMessage = ToolUtil.getGeneratedAutomaticallyTag() + definitionInputFile + " " + new Date(); inputFiles.add(definitionInputFile); break; case KEY_TS_DESTINATION: @@ -105,7 +104,7 @@ public class ConfigDefinition { tsOutputsDestination = args[i + 1]; break; case KEY_C_DESTINATION: - destinations.add(new CHeaderConsumer(state.variableRegistry, args[i + 1], withC_Defines)); + destinations.add(new CHeaderConsumer(state, args[i + 1], withC_Defines)); break; case KEY_ZERO_INIT: needZeroInit = Boolean.parseBoolean(args[i + 1]); @@ -117,7 +116,7 @@ public class ConfigDefinition { destCDefinesFileName = args[i + 1]; break; case KEY_JAVA_DESTINATION: - javaDestinationFileName = args[i + 1]; + destinations.add(new FileJavaFieldsConsumer(state, args[i + 1])); break; case "-field_lookup_file": destinations.add(new GetConfigValueConsumer(args[i + 1])); @@ -195,9 +194,6 @@ public class ConfigDefinition { ExtraUtil.handleFiringOrder(firingEnumFileName, state.variableRegistry, parseState); - MESSAGE = ToolUtil.getGeneratedAutomaticallyTag() + definitionInputFile + " " + new Date(); - - SystemOut.println("Reading definition from " + definitionInputFile); for (String prependFile : prependFiles) state.variableRegistry.readPrependValues(prependFile); @@ -235,8 +231,6 @@ public class ConfigDefinition { // writer.writeTunerstudio(parseState, tsPath + "/rusefi.input", tsPath + "/" + TSProjectConsumer.TS_FILE_OUTPUT_NAME); } - BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(definitionInputFile), IoUtils.CHARSET.name())); - if (tsOutputsDestination != null) { destinations.add(new OutputsSectionConsumer(tsOutputsDestination + File.separator + "generated/output_channels.ini", state)); destinations.add(new DataLogConsumer(tsOutputsDestination + File.separator + "generated/data_logs.ini")); @@ -253,16 +247,14 @@ public class ConfigDefinition { destinations.add(new SignatureConsumer(signatureDestination, tmpRegistry)); } - if (javaDestinationFileName != null) { - destinations.add(new FileJavaFieldsConsumer(state, javaDestinationFileName)); - } - if (destinations.isEmpty()) throw new IllegalArgumentException("No destinations specified"); /* * this is the most important invocation - here we read the primary input file and generated code into all * the destinations/writers */ + SystemOut.println("Reading definition from " + definitionInputFile); + BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(definitionInputFile), IoUtils.CHARSET.name())); state.readBufferedReader(definitionReader, destinations); if (destCDefinesFileName != null) { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java index adee6c9f84..6492e1fac0 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java @@ -31,6 +31,7 @@ public class ReaderState { public final Map tsCustomSize = new HashMap<>(); public final Map tsCustomLine = new HashMap<>(); public final Map structures = new HashMap<>(); + public String headerMessage; public final EnumsReader enumsReader = new EnumsReader(); public final VariableRegistry variableRegistry = new VariableRegistry(); @@ -277,4 +278,9 @@ public class ReaderState { } } + public String getHeader() { + if (headerMessage == null) + throw new NullPointerException("No header message yet"); + return headerMessage; + } } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/AbstractConfigurationConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/AbstractConfigurationConsumer.java index 61b3f45268..c1c9732cac 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/AbstractConfigurationConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/AbstractConfigurationConsumer.java @@ -1,14 +1,4 @@ package com.rusefi.output; -import java.io.IOException; - public abstract class AbstractConfigurationConsumer implements ConfigurationConsumer { - - @Override - public void startFile() throws IOException { - } - - @Override - public void endFile() throws IOException { - } } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java index f3646b51a3..fbb0a58be6 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/BaseCHeaderConsumer.java @@ -4,7 +4,7 @@ import com.rusefi.*; import static com.rusefi.ToolUtil.EOL; -public abstract class BaseCHeaderConsumer extends AbstractConfigurationConsumer { +public class BaseCHeaderConsumer extends AbstractConfigurationConsumer { private static final String BOOLEAN_TYPE = "bool"; private final StringBuilder content = new StringBuilder(); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/CHeaderConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/CHeaderConsumer.java index 20827b2587..a866e942d4 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/CHeaderConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/CHeaderConsumer.java @@ -12,6 +12,8 @@ import static com.rusefi.ToolUtil.EOL; * Configuration consumer which writes C header file */ public class CHeaderConsumer extends BaseCHeaderConsumer { + @org.jetbrains.annotations.NotNull + private final ReaderState state; /** * looks like sometimes we want to not include "define XXX value" into generated C headers * TODO: document the use-case better @@ -20,12 +22,13 @@ public class CHeaderConsumer extends BaseCHeaderConsumer { private final LazyFile cHeader; private final VariableRegistry variableRegistry; - public CHeaderConsumer(VariableRegistry variableRegistry, String destCHeader, boolean withC_Defines) { - this.variableRegistry = variableRegistry; + public CHeaderConsumer(ReaderState state, String destCHeader, boolean withC_Defines) { + this.variableRegistry = state.variableRegistry; + this.state = state; this.withC_Defines = withC_Defines; SystemOut.println("Writing C header to " + destCHeader); cHeader = new LazyFile(destCHeader); - cHeader.write("// this section " + ConfigDefinition.MESSAGE + EOL); + cHeader.write("// this section " + state.getHeader() + EOL); cHeader.write("// by " + getClass() + EOL); cHeader.write("// begin" + EOL); cHeader.write("#pragma once" + EOL); @@ -38,7 +41,7 @@ public class CHeaderConsumer extends BaseCHeaderConsumer { cHeader.write(variableRegistry.getDefinesSection()); cHeader.write(getContent().toString()); cHeader.write("// end" + EOL); - cHeader.write("// this section " + ConfigDefinition.MESSAGE + EOL); + cHeader.write("// this section " + state.getHeader() + EOL); cHeader.close(); } } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigurationConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigurationConsumer.java index eb27f19965..5d661804a3 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigurationConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/ConfigurationConsumer.java @@ -5,9 +5,13 @@ import com.rusefi.ReaderState; import java.io.IOException; public interface ConfigurationConsumer { - void startFile() throws IOException; + default void startFile() { - void endFile() throws IOException; + } + + default void endFile() throws IOException { + + } void handleEndStruct(ReaderState readerState, ConfigStructure structure) throws IOException; } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java index a471c39887..08b5a992d3 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java @@ -29,7 +29,7 @@ public class FileJavaFieldsConsumer extends JavaFieldsConsumer { @Override public void startFile() { javaFields.write("package " + JAVA_PACKAGE + ";" + ToolUtil.EOL + ToolUtil.EOL); - javaFields.write("// this file " + ConfigDefinition.MESSAGE + ToolUtil.EOL + EOL); + javaFields.write("// this file " + state.getHeader() + ToolUtil.EOL + EOL); javaFields.write("// by " + getClass() + EOL); javaFields.write("import com.rusefi.config.*;" + EOL + EOL); javaFields.write("public class " + className + " {" + ToolUtil.EOL); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/GetConfigValueConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/GetConfigValueConsumer.java index 5a66cf4c0b..f3b3a7005e 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/GetConfigValueConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/GetConfigValueConsumer.java @@ -47,10 +47,6 @@ public class GetConfigValueConsumer extends AbstractConfigurationConsumer { } } - @Override - public void startFile() { - } - @Override public void endFile() throws IOException { writeStringToFile(outputFileName, getContent()); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/TSProjectConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/TSProjectConsumer.java index ebfec90aa9..b199a44337 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/TSProjectConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/TSProjectConsumer.java @@ -51,7 +51,7 @@ public class TSProjectConsumer implements ConfigurationConsumer { tsHeader.write(tsContent.getPrefix()); tsHeader.write("; " + CONFIG_DEFINITION_START + ToolUtil.EOL); - tsHeader.write("; this section " + ConfigDefinition.MESSAGE + ToolUtil.EOL + ToolUtil.EOL); + tsHeader.write("; this section " + state.getHeader() + ToolUtil.EOL + ToolUtil.EOL); tsHeader.write("pageSize = " + totalTsSize + ToolUtil.EOL); tsHeader.write("page = 1" + ToolUtil.EOL); tsHeader.write(fieldsSection); @@ -138,10 +138,6 @@ public class TSProjectConsumer implements ConfigurationConsumer { return tsPath + File.separator + TS_FILE_INPUT_NAME; } - @Override - public void startFile() { - } - @Override public void endFile() throws IOException { writeTunerStudioFile(tsPath, tsWriter.toString()); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/test/BitParsingTest.java b/java_tools/configuration_definition/src/main/java/com/rusefi/test/BitParsingTest.java index c33465e34a..abfd366f3f 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/test/BitParsingTest.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/test/BitParsingTest.java @@ -30,6 +30,7 @@ public class BitParsingTest { writeContent(fieldsSection, new TsFileContent("", ""), createOutput(sw)); } }; + state.headerMessage = "test"; state.readBufferedReader(inputString, Collections.singletonList(javaFieldsConsumer)); System.out.printf("start[" + sw + "]end"); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/test/ConfigFieldParserTest.java b/java_tools/configuration_definition/src/main/java/com/rusefi/test/ConfigFieldParserTest.java index 014dba496d..473e0d08bb 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/test/ConfigFieldParserTest.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/test/ConfigFieldParserTest.java @@ -71,11 +71,7 @@ public class ConfigFieldParserTest { "end_struct\n"; ReaderState state = new ReaderState(); - BaseCHeaderConsumer consumer = new BaseCHeaderConsumer() { - @Override - public void endFile() { - } - }; + BaseCHeaderConsumer consumer = new BaseCHeaderConsumer(); state.readBufferedReader(test, Collections.singletonList(consumer)); } @@ -282,11 +278,7 @@ public class ConfigFieldParserTest { "int[ERROR_BUFFER_SIZE iterate] field\n" + "end_struct\n" + ""; - BaseCHeaderConsumer consumer = new BaseCHeaderConsumer() { - @Override - public void endFile() { - } - }; + BaseCHeaderConsumer consumer = new BaseCHeaderConsumer(); new ReaderState().readBufferedReader(test, Collections.singletonList(consumer)); assertEquals("// start of pid_s\n" + "struct pid_s {\n" + diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/test/TSProjectConsumerTest.java b/java_tools/configuration_definition/src/main/java/com/rusefi/test/TSProjectConsumerTest.java index 1c878b5563..e12f31a466 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/test/TSProjectConsumerTest.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/test/TSProjectConsumerTest.java @@ -47,11 +47,7 @@ public class TSProjectConsumerTest { JavaFieldsConsumer javaFieldsConsumer = new TestJavaFieldsConsumer(state); - BaseCHeaderConsumer consumer = new BaseCHeaderConsumer() { - @Override - public void endFile() { - } - }; + BaseCHeaderConsumer consumer = new BaseCHeaderConsumer(); state.readBufferedReader(test, Arrays.asList(javaFieldsConsumer, consumer, tsProjectConsumer)); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/test/TestJavaFieldsConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/test/TestJavaFieldsConsumer.java index 5d4b53a687..e414f9423f 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/test/TestJavaFieldsConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/test/TestJavaFieldsConsumer.java @@ -8,10 +8,6 @@ public class TestJavaFieldsConsumer extends JavaFieldsConsumer { super(state); } - @Override - public void startFile() { - } - @Override public void endFile() { }