From 611d3e676cf7e723e5322383e251a584f5ffbc7e Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 3 Jul 2023 00:56:19 -0400 Subject: [PATCH] only:dependency injection & TDD --- .../src/main/java/com/rusefi/FileLog.java | 3 +- .../main/java/com/rusefi/util/LazyFile.java | 88 +++---------------- .../java/com/rusefi/util/LazyFileImpl.java | 81 +++++++++++++++++ .../java/com/rusefi/ConfigDefinition.java | 3 +- .../com/rusefi/output/TSProjectConsumer.java | 4 +- .../test/GetOutputValueConsumerTest.java | 5 +- .../test/SdCardFieldsGeneratorTest.java | 4 +- .../main/java/com/rusefi/ReaderStateImpl.java | 12 +-- .../java/com/rusefi/TriggerMetaGenerator.java | 4 +- .../com/rusefi/ldmp/LiveDataProcessor.java | 16 ++-- .../com/rusefi/output/CHeaderConsumer.java | 7 +- .../rusefi/output/FileJavaFieldsConsumer.java | 5 +- .../rusefi/output/GetConfigValueConsumer.java | 17 ++-- .../rusefi/output/GetOutputValueConsumer.java | 7 +- .../rusefi/output/SdCardFieldsConsumer.java | 3 +- .../com/rusefi/ldmp/StringBufferLazyFile.java | 17 ++++ .../main/java/com/rusefi/EnumToString.java | 5 +- .../com/rusefi/util/test/LazyFileTest.java | 4 +- 18 files changed, 168 insertions(+), 117 deletions(-) create mode 100644 java_console/logging/src/main/java/com/rusefi/util/LazyFileImpl.java create mode 100644 java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StringBufferLazyFile.java diff --git a/java_console/logging/src/main/java/com/rusefi/FileLog.java b/java_console/logging/src/main/java/com/rusefi/FileLog.java index c3607f49f0..3fb90f7318 100644 --- a/java_console/logging/src/main/java/com/rusefi/FileLog.java +++ b/java_console/logging/src/main/java/com/rusefi/FileLog.java @@ -3,6 +3,7 @@ package com.rusefi; import com.devexperts.logging.Logging; import com.opensr5.Logger; import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -50,7 +51,7 @@ public enum FileLog { } private static void writeReadmeFile() { - LazyFile file = new LazyFile(Logger.DIR + "README.html"); + LazyFile file = new LazyFileImpl(Logger.DIR + "README.html"); file.write("
" + "More info online
"); try { file.close(); diff --git a/java_console/logging/src/main/java/com/rusefi/util/LazyFile.java b/java_console/logging/src/main/java/com/rusefi/util/LazyFile.java index 4af304628d..76c97045cf 100644 --- a/java_console/logging/src/main/java/com/rusefi/util/LazyFile.java +++ b/java_console/logging/src/main/java/com/rusefi/util/LazyFile.java @@ -1,85 +1,21 @@ package com.rusefi.util; -import java.io.*; -import java.nio.file.Paths; -import java.util.Scanner; -import java.util.regex.Pattern; +import java.io.IOException; -/** - * This file would override file content only of content has changed, disregarding the magic tag line. - */ -public class LazyFile implements Output { - public static final String LAZY_FILE_TAG = "was generated automatically by rusEFI tool "; - public static final String LAZY_FILE_TAG_LOWER = LAZY_FILE_TAG.toLowerCase(); - - public static String TEST = "test_file_name"; - - private final String filename; - - private final StringBuffer content = new StringBuffer(); - private final StringBuffer contentWithoutTag = new StringBuffer(); - - public LazyFile(String filename) { - this.filename = filename; +public interface LazyFile extends Output { + interface LazyFileFactory { + LazyFile create(String fileName); } + LazyFileFactory REAL = LazyFileImpl::new; + + String LAZY_FILE_TAG = "was generated automatically by rusEFI tool "; + String LAZY_FILE_TAG_LOWER = LAZY_FILE_TAG.toLowerCase(); + String TEST = "test_file_name"; + @Override - public void write(String line) { - content.append(line); - String[] lines = line.split("\\r?\\n"); - for (String subLine : lines) { - if (!subLine.toLowerCase().contains(LAZY_FILE_TAG_LOWER)) { - contentWithoutTag.append(subLine); - } - } - } + void write(String line); @Override - public void close() throws IOException { - if (TEST.equals(filename)) - return; - String fileContent = unifySpaces(readCurrentContent(filename)); - String newContent = unifySpaces(contentWithoutTag.toString()); - - if (fileContent.equals(newContent)) { - SystemOut.println(getClass().getSimpleName() + ": Not updating " + filename + " since looks to be the same content, new content size=" + contentWithoutTag.length()); - return; - } - for (int i = 0; i < Math.min(fileContent.length(), newContent.length()); i++) { - if (fileContent.charAt(i) != newContent.charAt(i)) { - SystemOut.println(getClass().getSimpleName() + " " + filename + ": Not same at " + i); - if (i > 15 && i < fileContent.length() - 6 && i < newContent.length() - 6) { - SystemOut.println("file " + fileContent.substring(i - 15, i + 5)); - SystemOut.println("newContent " + newContent.substring(i - 15, i + 5)); - } - break; - } - } - Writer fw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), IoUtils.CHARSET)); - fw.write(content.toString()); - fw.close(); - } - - public static String unifySpaces(String line) { - line = line.replace("\r", ""); - return line.replaceAll("\n[\n]*", ""); - } - - private String readCurrentContent(String filename) throws IOException { - if (TEST.equals(filename)) - return ""; - if (!new File(filename).exists()) { - SystemOut.println(filename + " does not exist considering empty current content"); - return ""; - } - Scanner in = new Scanner(Paths.get(filename), IoUtils.CHARSET.name()); - Pattern pat = Pattern.compile(".*\\R|.+\\z"); - String line; - StringBuilder sb = new StringBuilder(); - while ((line = in.findWithinHorizon(pat, 0)) != null) { - if (!line.toLowerCase().contains(LAZY_FILE_TAG_LOWER)) - sb.append(line); - } - return sb.toString(); - } + void close() throws IOException; } diff --git a/java_console/logging/src/main/java/com/rusefi/util/LazyFileImpl.java b/java_console/logging/src/main/java/com/rusefi/util/LazyFileImpl.java new file mode 100644 index 0000000000..e0d5350b83 --- /dev/null +++ b/java_console/logging/src/main/java/com/rusefi/util/LazyFileImpl.java @@ -0,0 +1,81 @@ +package com.rusefi.util; + +import java.io.*; +import java.nio.file.Paths; +import java.util.Scanner; +import java.util.regex.Pattern; + +/** + * This file would override file content only of content has changed, disregarding the magic tag line. + */ +public class LazyFileImpl implements LazyFile { + + private final String filename; + + private final StringBuffer content = new StringBuffer(); + private final StringBuffer contentWithoutTag = new StringBuffer(); + + public LazyFileImpl(String filename) { + this.filename = filename; + } + + @Override + public void write(String line) { + content.append(line); + String[] lines = line.split("\\r?\\n"); + for (String subLine : lines) { + if (!subLine.toLowerCase().contains(LazyFile.LAZY_FILE_TAG_LOWER)) { + contentWithoutTag.append(subLine); + } + } + } + + public static String unifySpaces(String line) { + line = line.replace("\r", ""); + return line.replaceAll("\n[\n]*", ""); + } + + @Override + public void close() throws IOException { + if (LazyFile.TEST.equals(filename)) + return; + String fileContent = unifySpaces(readCurrentContent(filename)); + String newContent = unifySpaces(contentWithoutTag.toString()); + + if (fileContent.equals(newContent)) { + SystemOut.println(getClass().getSimpleName() + ": Not updating " + filename + " since looks to be the same content, new content size=" + contentWithoutTag.length()); + return; + } + for (int i = 0; i < Math.min(fileContent.length(), newContent.length()); i++) { + if (fileContent.charAt(i) != newContent.charAt(i)) { + SystemOut.println(getClass().getSimpleName() + " " + filename + ": Not same at " + i); + if (i > 15 && i < fileContent.length() - 6 && i < newContent.length() - 6) { + SystemOut.println("file " + fileContent.substring(i - 15, i + 5)); + SystemOut.println("newContent " + newContent.substring(i - 15, i + 5)); + } + break; + } + } + Writer fw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), IoUtils.CHARSET)); + fw.write(content.toString()); + fw.close(); + } + + private String readCurrentContent(String filename) throws IOException { + if (LazyFile.TEST.equals(filename)) + return ""; + if (!new File(filename).exists()) { + SystemOut.println(filename + " does not exist considering empty current content"); + return ""; + } + Scanner in = new Scanner(Paths.get(filename), IoUtils.CHARSET.name()); + Pattern pat = Pattern.compile(".*\\R|.+\\z"); + String line; + StringBuilder sb = new StringBuilder(); + while ((line = in.findWithinHorizon(pat, 0)) != null) { + if (!line.toLowerCase().contains(LazyFile.LAZY_FILE_TAG_LOWER)) + sb.append(line); + } + return sb.toString(); + } +} 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 1cfdbe7f4a..341e4dd01a 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 @@ -4,6 +4,7 @@ import com.rusefi.newparse.DefinitionsState; import com.rusefi.output.*; import com.rusefi.pinout.PinoutLogic; import com.rusefi.trigger.TriggerWheelTSLogic; +import com.rusefi.util.LazyFile; import com.rusefi.util.SystemOut; import java.io.*; @@ -102,7 +103,7 @@ public class ConfigDefinition { String cppFile = args[i + 1]; String mdFile = args[i + 2]; i++; - state.addDestination(new GetConfigValueConsumer(cppFile, mdFile)); + state.addDestination(new GetConfigValueConsumer(cppFile, mdFile, LazyFile.REAL)); } break; case "-readfile": 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 93eea6d58a..9c9ffbdec8 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 @@ -1,7 +1,7 @@ package com.rusefi.output; import com.rusefi.*; -import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import com.rusefi.util.Output; import com.rusefi.util.SystemOut; @@ -42,7 +42,7 @@ public class TSProjectConsumer implements ConfigurationConsumer { // File.getPath() would eliminate potential separator at the end of the path String fileName = getTsFileOutputName(new File(tsPath).getPath()); - Output tsHeader = new LazyFile(fileName); + Output tsHeader = new LazyFileImpl(fileName); writeContent(fieldsSection, tsContent, tsHeader); } diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/GetOutputValueConsumerTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/GetOutputValueConsumerTest.java index cd9ce64b48..807d693f2a 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/GetOutputValueConsumerTest.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/GetOutputValueConsumerTest.java @@ -2,6 +2,7 @@ package com.rusefi.test; import com.rusefi.ReaderStateImpl; import com.rusefi.output.GetOutputValueConsumer; +import com.rusefi.util.LazyFile; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -16,7 +17,7 @@ public class GetOutputValueConsumerTest { "end_struct\n"; ReaderStateImpl state = new ReaderStateImpl(); - GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer(null); + GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer(null, LazyFile.REAL); outputValueConsumer.conditional = "EFI_BOOST_CONTROL"; state.readBufferedReader(test, (outputValueConsumer)); assertEquals( @@ -57,7 +58,7 @@ public class GetOutputValueConsumerTest { "end_struct\n"; ReaderStateImpl state = new ReaderStateImpl(); - GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer(null); + GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer(null, LazyFile.REAL); outputValueConsumer.moduleMode = true; outputValueConsumer.currentEngineModule = "FuelPumpController"; diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java index db82caf874..5447f5dcc8 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java @@ -4,8 +4,8 @@ import static org.junit.Assert.assertEquals; import com.rusefi.ReaderStateImpl; import com.rusefi.output.SdCardFieldsConsumer; -import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFile; import org.junit.Test; public class SdCardFieldsGeneratorTest { @@ -79,7 +79,7 @@ public class SdCardFieldsGeneratorTest { } private static void processAndAssert(String input, String expectedOutput, Actor actor) { - ReaderStateImpl state = new ReaderStateImpl(null); + ReaderStateImpl state = new ReaderStateImpl(null, LazyFile.REAL); actor.act(state); SdCardFieldsConsumer consumer = new SdCardFieldsConsumer(LazyFile.TEST); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java index 7711c7f6d5..f3e139386e 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java @@ -6,7 +6,7 @@ import com.opensr5.ini.field.EnumIniField; import com.rusefi.enum_reader.Value; import com.rusefi.output.*; import com.rusefi.parse.TypesHelper; -import com.rusefi.util.IoUtils; +import com.rusefi.util.LazyFile; import com.rusefi.util.SystemOut; import org.jetbrains.annotations.NotNull; @@ -38,6 +38,7 @@ public class ReaderStateImpl implements ReaderState { private final Map tsCustomLine = new HashMap<>(); private final Map structures = new HashMap<>(); private final ReaderProvider readerProvider; + private final LazyFile.LazyFileFactory fileFactory; private String headerMessage; // well, technically those should be a builder for state, not this state class itself private String tsFileOutputName = "rusefi.ini"; @@ -51,11 +52,12 @@ public class ReaderStateImpl implements ReaderState { private final VariableRegistry variableRegistry = new VariableRegistry(); public ReaderStateImpl() { - this(ReaderProvider.REAL); + this(ReaderProvider.REAL, LazyFile.REAL); } - public ReaderStateImpl(ReaderProvider readerProvider) { + public ReaderStateImpl(ReaderProvider readerProvider, LazyFile.LazyFileFactory fileFactory) { this.readerProvider = readerProvider; + this.fileFactory = fileFactory; } @Override @@ -371,11 +373,11 @@ public class ReaderStateImpl implements ReaderState { @Override public void addCHeaderDestination(String cHeader) { - destinations.add(new CHeaderConsumer(this, cHeader, withC_Defines)); + destinations.add(new CHeaderConsumer(this, cHeader, withC_Defines, fileFactory)); } public void addJavaDestination(String fileName) { - destinations.add(new FileJavaFieldsConsumer(this, fileName, 0)); + destinations.add(new FileJavaFieldsConsumer(this, fileName, 0, fileFactory)); } @Override diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/TriggerMetaGenerator.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/TriggerMetaGenerator.java index 2716e048a2..ebf9665e75 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/TriggerMetaGenerator.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/TriggerMetaGenerator.java @@ -1,10 +1,12 @@ package com.rusefi; +import com.rusefi.util.LazyFile; + import java.io.IOException; public class TriggerMetaGenerator { public static void main(String[] a) throws IOException { - ReaderStateImpl reader = new ReaderStateImpl(null); + ReaderStateImpl reader = new ReaderStateImpl(null, LazyFile.REAL); reader.setDefinitionInputFile("integration/rusefi_config_trigger.txt"); reader.addCHeaderDestination("../unit_tests/TriggerMeta.h"); reader.addJavaDestination("../java_tools/trigger-image/src/main/java/com/rusefi/config/generated/TriggerMeta.java"); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java index c9696bed22..d2aa9ee7a7 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java @@ -3,8 +3,8 @@ package com.rusefi.ldmp; import com.devexperts.logging.Logging; import com.rusefi.*; import com.rusefi.output.*; -import com.rusefi.util.IoUtils; import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import org.yaml.snakeyaml.Yaml; import java.io.*; @@ -23,6 +23,7 @@ public class LiveDataProcessor { private final static String tsOutputsDestination = "console/binary/"; private final ReaderProvider readerProvider; + private final LazyFile.LazyFileFactory fileFactory; private final GaugeConsumer gaugeConsumer = new GaugeConsumer(tsOutputsDestination + File.separator + "generated/gauges.ini"); @@ -43,8 +44,9 @@ public class LiveDataProcessor { private final String extraPrepend = System.getProperty("LiveDataProcessor.extra_prepend"); - public LiveDataProcessor(ReaderProvider readerProvider) { + public LiveDataProcessor(ReaderProvider readerProvider, LazyFile.LazyFileFactory fileFactory) { this.readerProvider = readerProvider; + this.fileFactory = fileFactory; } public static void main(String[] args) throws IOException { @@ -57,7 +59,7 @@ public class LiveDataProcessor { Map data = getStringObjectMap(new FileReader(yamlFileName)); - LiveDataProcessor liveDataProcessor = new LiveDataProcessor(ReaderProvider.REAL); + LiveDataProcessor liveDataProcessor = new LiveDataProcessor(ReaderProvider.REAL, LazyFile.REAL); int sensorTsPosition = liveDataProcessor.handleYaml(data); liveDataProcessor.writeFiles(); @@ -104,7 +106,7 @@ public class LiveDataProcessor { SdCardFieldsContent sdCardFieldsConsumer = new SdCardFieldsContent(); - GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer("controllers/lua/generated/output_lookup_generated.cpp"); + GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer("controllers/lua/generated/output_lookup_generated.cpp", fileFactory); EntryHandler handler = new EntryHandler() { @Override @@ -116,7 +118,7 @@ public class LiveDataProcessor { baseAddressCHeader.append("#define " + name.toUpperCase() + "_BASE_ADDRESS " + startingPosition + "\n"); - ReaderState state = new ReaderStateImpl(readerProvider); + ReaderState state = new ReaderStateImpl(readerProvider, fileFactory); state.setDefinitionInputFile(folder + File.separator + name + ".txt"); state.setWithC_Defines(withCDefines); @@ -133,7 +135,7 @@ public class LiveDataProcessor { state.addCHeaderDestination(folder + File.separator + name + "_generated.h"); int baseOffset = outputsSections.getBaseOffset(); - state.addDestination(new FileJavaFieldsConsumer(state, "../java_console/models/src/main/java/com/rusefi/config/generated/" + javaName, baseOffset)); + state.addDestination(new FileJavaFieldsConsumer(state, "../java_console/models/src/main/java/com/rusefi/config/generated/" + javaName, baseOffset, fileFactory)); if (constexpr != null) { sdCardFieldsConsumer.home = constexpr; @@ -232,7 +234,7 @@ public class LiveDataProcessor { } enumContent.append("} live_data_e;\n"); - LazyFile lazyFile = new LazyFile("console/binary_log/log_fields_generated.h"); + LazyFile lazyFile = fileFactory.create("console/binary_log/log_fields_generated.h"); SdCardFieldsConsumer.wrapContent(lazyFile, sdCardFieldsConsumer.getBody()); lazyFile.close(); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/CHeaderConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/CHeaderConsumer.java index cb730372db..7f0ebd6a79 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/CHeaderConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/CHeaderConsumer.java @@ -2,6 +2,7 @@ package com.rusefi.output; import com.rusefi.*; import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import com.rusefi.util.SystemOut; import java.io.IOException; @@ -24,18 +25,18 @@ public class CHeaderConsumer extends BaseCHeaderConsumer { private final LazyFile cHeader; private final VariableRegistry variableRegistry; - public CHeaderConsumer(ReaderState state, String destCHeader, boolean withC_Defines) { + public CHeaderConsumer(ReaderState state, String destCHeader, boolean withC_Defines, LazyFile.LazyFileFactory fileFactory) { this.variableRegistry = state.getVariableRegistry(); this.state = state; this.withC_Defines = withC_Defines; SystemOut.println("Writing C header to " + destCHeader); - cHeader = new LazyFile(destCHeader); + cHeader = fileFactory.create(destCHeader); } public static void writeDefinesToFile(VariableRegistry variableRegistry, String fileName, String headerComment) throws IOException { SystemOut.println("Writing to " + fileName); - LazyFile cHeader = new LazyFile(fileName); + LazyFile cHeader = new LazyFileImpl(fileName); cHeader.write("//\n// " + ToolUtil.getGeneratedAutomaticallyTag() + headerComment + "\n//\n\n"); cHeader.write(variableRegistry.getDefinesSection()); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java index 6fd52c924b..ea322036d0 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/FileJavaFieldsConsumer.java @@ -3,6 +3,7 @@ package com.rusefi.output; import com.rusefi.ReaderState; import com.rusefi.ToolUtil; import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import java.io.File; import java.io.IOException; @@ -18,9 +19,9 @@ public class FileJavaFieldsConsumer extends JavaFieldsConsumer { private final LazyFile javaFields; private final String className; - public FileJavaFieldsConsumer(ReaderState state, String javaDestination, int baseOffset) { + public FileJavaFieldsConsumer(ReaderState state, String javaDestination, int baseOffset, LazyFile.LazyFileFactory fileFactory) { super(state, baseOffset); - javaFields = new LazyFile(javaDestination); + javaFields = fileFactory.create(javaDestination); String className = new File(javaDestination).getName(); this.className = className.substring(0, className.indexOf('.')); } diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java index da51e95029..d6ea51bdf7 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetConfigValueConsumer.java @@ -4,6 +4,7 @@ import com.rusefi.ConfigField; import com.rusefi.ReaderState; import com.rusefi.parse.TypesHelper; import com.rusefi.output.variables.VariableRecord; +import com.rusefi.util.LazyFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,8 +17,6 @@ import java.util.concurrent.atomic.AtomicInteger; import static com.rusefi.output.ConfigStructureImpl.ALIGNMENT_FILL_AT; import static com.rusefi.output.DataLogConsumer.UNUSED; -import static com.rusefi.output.GetOutputValueConsumer.getHashConflicts; -import static com.rusefi.output.GetOutputValueConsumer.wrapSwitchStatement; /** * Here we generate C++ code for https://github.com/rusefi/rusefi/wiki/Lua-Scripting#getcalibrationname @@ -44,21 +43,23 @@ public class GetConfigValueConsumer implements ConfigurationConsumer { private final List variables = new ArrayList<>(); private final String outputFileName; private final String mdOutputFileName; + private final LazyFile.LazyFileFactory lazyFileFactory; private final StringBuilder mdContent = new StringBuilder(); public GetConfigValueConsumer() { - this(null, null); + this(null, null, LazyFile.REAL); } - public GetConfigValueConsumer(String outputFileName, String mdOutputFileName) { + public GetConfigValueConsumer(String outputFileName, String mdOutputFileName, LazyFile.LazyFileFactory lazyFileFactory) { this.outputFileName = outputFileName; this.mdOutputFileName = mdOutputFileName; + this.lazyFileFactory = lazyFileFactory; } - public static void writeStringToFile(@Nullable String fileName, String content) throws IOException { + public static void writeStringToFile(@Nullable String fileName, String content, LazyFile.LazyFileFactory lazyFileFactory) throws IOException { if (fileName != null) { - FileWriter fw = new FileWriter(fileName); + LazyFile fw = lazyFileFactory.create(fileName); fw.write(content); fw.close(); } @@ -75,8 +76,8 @@ public class GetConfigValueConsumer implements ConfigurationConsumer { @Override public void endFile() throws IOException { - writeStringToFile(outputFileName, getContent()); - writeStringToFile(mdOutputFileName, getMdContent()); + writeStringToFile(outputFileName, getContent(), lazyFileFactory); + writeStringToFile(mdOutputFileName, getMdContent(), lazyFileFactory); } private String processConfig(ConfigField cf, String prefix) { diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetOutputValueConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetOutputValueConsumer.java index 224f63e488..7e8d145471 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetOutputValueConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/GetOutputValueConsumer.java @@ -4,6 +4,7 @@ import com.rusefi.ConfigField; import com.rusefi.ReaderState; import com.rusefi.parse.TypesHelper; import com.rusefi.output.variables.VariableRecord; +import com.rusefi.util.LazyFile; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -25,6 +26,7 @@ import static com.rusefi.output.GetConfigValueConsumer.getCompareName; public class GetOutputValueConsumer implements ConfigurationConsumer { private final List getterPairs = new ArrayList<>(); private final String fileName; + private final LazyFile.LazyFileFactory fileFactory; public String currentSectionPrefix = "engine->outputChannels"; public boolean moduleMode; @@ -32,8 +34,9 @@ public class GetOutputValueConsumer implements ConfigurationConsumer { public String conditional; public Boolean isPtr = false; - public GetOutputValueConsumer(String fileName) { + public GetOutputValueConsumer(String fileName, LazyFile.LazyFileFactory fileFactory) { this.fileName = fileName; + this.fileFactory = fileFactory; } @Override @@ -71,7 +74,7 @@ public class GetOutputValueConsumer implements ConfigurationConsumer { @Override public void endFile() throws IOException { - GetConfigValueConsumer.writeStringToFile(fileName, getContent()); + GetConfigValueConsumer.writeStringToFile(fileName, getContent(), fileFactory); } public String getContent() { diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java index b9b748218d..4dd8999eeb 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java @@ -2,6 +2,7 @@ package com.rusefi.output; import com.rusefi.ReaderState; import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import java.io.IOException; @@ -14,7 +15,7 @@ public class SdCardFieldsConsumer implements ConfigurationConsumer { private final LazyFile output; public SdCardFieldsConsumer(String outputFileName) { - output = new LazyFile(outputFileName); + output = new LazyFileImpl(outputFileName); } @Override diff --git a/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StringBufferLazyFile.java b/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StringBufferLazyFile.java new file mode 100644 index 0000000000..594220bf1d --- /dev/null +++ b/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StringBufferLazyFile.java @@ -0,0 +1,17 @@ +package com.rusefi.ldmp; + +import com.rusefi.util.LazyFile; + +public class StringBufferLazyFile implements LazyFile { + StringBuilder sb = new StringBuilder(); + + @Override + public void write(String line) { + sb.append(line); + } + + @Override + public void close() { + + } +} diff --git a/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java b/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java index 9655470a7c..0347c24c6b 100644 --- a/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java +++ b/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java @@ -2,6 +2,7 @@ package com.rusefi; import com.rusefi.enum_reader.Value; import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import com.rusefi.util.SystemOut; import java.io.*; @@ -67,11 +68,11 @@ public class EnumToString { } private void writeCppAndHeaderFiles(String outFileName) throws IOException { - LazyFile bw = new LazyFile(outFileName + ".cpp"); + LazyFile bw = new LazyFileImpl(outFileName + ".cpp"); bw.write(cppFileContent.toString()); bw.close(); - bw = new LazyFile(outFileName + ".h"); + bw = new LazyFileImpl(outFileName + ".h"); bw.write(headerFileContent.toString()); bw.close(); } diff --git a/java_tools/enum_to_string/src/test/java/com/rusefi/util/test/LazyFileTest.java b/java_tools/enum_to_string/src/test/java/com/rusefi/util/test/LazyFileTest.java index 3f5cb7ed6b..0488ce5f19 100644 --- a/java_tools/enum_to_string/src/test/java/com/rusefi/util/test/LazyFileTest.java +++ b/java_tools/enum_to_string/src/test/java/com/rusefi/util/test/LazyFileTest.java @@ -1,6 +1,6 @@ package com.rusefi.util.test; -import com.rusefi.util.LazyFile; +import com.rusefi.util.LazyFileImpl; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -8,6 +8,6 @@ import static org.junit.Assert.assertEquals; public class LazyFileTest { @Test public void testUnifySpaces() { - assertEquals("abc", LazyFile.unifySpaces("a\r\n\r\nb\n\n\nc")); + assertEquals("abc", LazyFileImpl.unifySpaces("a\r\n\r\nb\n\n\nc")); } }