From 03d6876f2aec9e75e021142769b8e3497dce0969 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 19 Dec 2018 23:35:45 -0500 Subject: [PATCH] refactoring --- java_tools/ConfigDefinition.jar | Bin 33793 -> 35055 bytes .../src/com/rusefi/ConfigDefinition.java | 44 +++++++++--------- .../src/com/rusefi/ReaderState.java | 16 +++++++ 3 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 java_tools/configuration_definition/src/com/rusefi/ReaderState.java diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 474227e9d2075c727f8dd4b1119b670f574b161b..d74f194ca1f7804a325ec2ac6499961b4c553220 100644 GIT binary patch delta 11112 zcmeI&XD}RIzX$NOO7t$+UA=@=qhzB;Y!F@4AbRh;+f~AfSi03iV2*p@)b3v_5p zfQgSF&)BwO&E&zZHfO&-AKxP?|1RMJt%auG0bQ^E=8Jw0s zVYm9&QvYK1W%w*^OZ8mWH}Cq{9%ilalSVRC%$ve@;n6z#IMEc3c%iJh$6-zME*6K> z_)p+CW;{Z4cyM?C&vN5+$HwCP+R1%}8^p!=!jeSC-|_o8%ZypV`?MYI{Y*Onbt2r_ z9L+?Gl+yDJXiB4t)T5vi9bEREFghtUVGk`n2M-pnYpBR{w(OZG2gN? zW1PVjLPD-^9QS>2TbErl;kK@;RVlzS5LKceVDM=8|&%Pq?6O4O&py`JB$!ZN@IuqZ ziqInRPFk^9TAa&9X@uOm+gg<+r` zb!)cxn6p75E6=`^IV>y!YX~?LU@A#!e#o4o^B|suWX4BnqG8J$SuccT1u<3a`+2nH zb+Lcfelk8gRBYHNl{jC0FYc>|@iKPTKA)o+ONa`73-%2#tNP{Ks2rS>5&V;eiJQK- z?+*CKO@Y5bCyp&pKZH;_QXc#`S9N5XD=2Vz{FMux(L?P{!KZBahu$TKw9&=_+G}PN zDY&p`hjTt9Tst!fIpIk+sRD6j;ja;NiU%`RjnNzxb}h}E`Cj8pRC@RfEz@G&+I(x2 ztyU6kk;9D7S!IP>>x#|ojBx)UQHz=Ojj+`ARq_q%pb0ZgU$SsDq*W~ptV29pSjw~0 z3eE4DSxQfW7VI;DZr&)mi$aRY9ok;|Ikllq?yEET74`%n8A&kR>A44f#TXfc2`Dh1 zq`1%JmpWLf(RZs3P3 zloTEB8BJGaW2{eNVd*u0;L+`PMBP55yBLuO8PT;H-YCpPf| zsZIwotfy-ZLfR;%3|BADafrfL6y7+ZS(3coURxvYT@}o(R(vE68x->@yAf_Ds^@*- z=$Jk>ht{I~W6tW?nDw0RxN7SlMRKJ6+4q zX;el!UU_M1*b`Qd&TNMj5TEoPmyqk)fX&oP*_55%;6n|;dO!sy$UHa4{z?Zys9$?0 z{pAeu6X+)P)Zxkt0be!SFQEMGj!l6dcx{qY3G*=Yk?Cf}y$y$ko!5SWqZYSrLcch> zRMa+qDpgUc5BPCqm@l(9mvJ5HR-eLRW+drXh!xctg~=2(E; zMOSp-{Y^LVYo;616*>DW+8e58EFZ`w∨ZKxMuK$catyi+kiNc4CMWauFt-(twr4 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 Nkq{7+1rz+2{{am#)eQgu diff --git a/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java b/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java index 06b10e28dd..67354c0b48 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java +++ b/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java @@ -4,7 +4,6 @@ import java.io.*; import java.util.Date; import java.util.HashMap; import java.util.Map; -import java.util.Stack; /** * (c) Andrey Belomutskiy @@ -31,7 +30,6 @@ public class ConfigDefinition { private static final String FIELDS_JAVA = "models/src/com/rusefi/config/Fields.java"; private static int totalTsSize; - private static Stack stack = new Stack<>(); public static Map structures = new HashMap<>(); public static Map tsCustomLine = new HashMap<>(); public static Map tsCustomSize = new HashMap<>(); @@ -44,11 +42,11 @@ public class ConfigDefinition { return; } - String inputPath = args[0]; + String definitionInputPath = args[0]; String tsPath = args[1]; String headerDestinationFolder = args[2]; String javaConsolePath = args[3]; - String fullFileName = inputPath + File.separator + INPUT_FILE_NAME; + String fullFileName = definitionInputPath + File.separator + INPUT_FILE_NAME; System.out.println("Reading from " + fullFileName); String destCHeader = headerDestinationFolder + File.separator + ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H; System.out.println("Writing C header to " + destCHeader); @@ -61,7 +59,8 @@ public class ConfigDefinition { CharArrayWriter javaFieldsWriter = new CharArrayWriter(); - processFile(br, cHeader, tsWriter, javaFieldsWriter); + ReaderState state = new ReaderState(); + processFile(state, br, cHeader, tsWriter, javaFieldsWriter); BufferedWriter javaFields = new BufferedWriter(new FileWriter(javaConsolePath + File.separator + FIELDS_JAVA)); javaFields.write("package com.rusefi.config;" + EOL + EOL); @@ -75,15 +74,14 @@ public class ConfigDefinition { BufferedWriter tsHeader = writeTunerStudioFile(tsPath, tsWriter.toString()); - if (!stack.isEmpty()) - throw new IllegalStateException("Unclosed structure: " + stack.peek().getName()); + state.ensureEmptyAfterProcessing(); cHeader.close(); tsHeader.close(); VariableRegistry.INSTANCE.writeNumericsToFile(headerDestinationFolder); - String inputFileName = inputPath + File.separator + ROM_RAIDER_XML_TEMPLATE; + String inputFileName = definitionInputPath + File.separator + ROM_RAIDER_XML_TEMPLATE; String outputFileName = javaConsolePath + File.separator + ROM_RAIDER_XML_OUTPUT; processTextTemplate(inputFileName, outputFileName); } @@ -158,7 +156,7 @@ public class ConfigDefinition { return new TsFileContent(prefix.toString(), postfix.toString()); } - private static void processFile(BufferedReader br, BufferedWriter cHeader, Writer tsHeader, CharArrayWriter javaFieldsWriter) throws IOException { + private static void processFile(ReaderState state, BufferedReader br, BufferedWriter cHeader, Writer tsHeader, CharArrayWriter javaFieldsWriter) throws IOException { String line; String message = "// this section " + MESSAGE + EOL; @@ -178,11 +176,11 @@ public class ConfigDefinition { continue; if (line.startsWith(STRUCT)) { - handleStartStructure(line.substring(STRUCT.length()), true); + handleStartStructure(state, line.substring(STRUCT.length()), true); } else if (line.startsWith(STRUCT_NO_PREFIX)) { - handleStartStructure(line.substring(STRUCT_NO_PREFIX.length()), false); + handleStartStructure(state, line.substring(STRUCT_NO_PREFIX.length()), false); } else if (line.startsWith(END_STRUCT)) { - handleEndStruct(cHeader, tsHeader, javaFieldsWriter); + handleEndStruct(state, cHeader, tsHeader, javaFieldsWriter); } else if (line.startsWith(BIT)) { line = line.substring(BIT.length() + 1).trim(); @@ -198,7 +196,7 @@ public class ConfigDefinition { } ConfigField bitField = new ConfigField(bitName, comment, true, null, null, 0, null, false); - stack.peek().addBoth(bitField); + state.stack.peek().addBoth(bitField); } else if (startsWithToken(line, CUSTOM)) { line = line.substring(CUSTOM.length() + 1).trim(); @@ -220,7 +218,7 @@ public class ConfigDefinition { tsCustomLine.put(name, tunerStudioLine); } else { - processLine(line); + processLine(state, line); } } cHeader.write("#endif" + EOL); @@ -232,7 +230,7 @@ public class ConfigDefinition { return line.startsWith(token + " ") || line.startsWith(token + "\t"); } - private static void handleStartStructure(String line, boolean withPrefix) { + private static void handleStartStructure(ReaderState state, String line, boolean withPrefix) { String name; String comment; if (line.contains(" ")) { @@ -244,14 +242,14 @@ public class ConfigDefinition { comment = null; } ConfigStructure structure = new ConfigStructure(name, comment, withPrefix); - stack.push(structure); + state.stack.push(structure); System.out.println("Starting structure " + structure.getName()); } - private static void handleEndStruct(Writer cHeader, Writer tsHeader, CharArrayWriter javaFieldsWriter) throws IOException { - if (stack.isEmpty()) + private static void handleEndStruct(ReaderState state, Writer cHeader, Writer tsHeader, CharArrayWriter javaFieldsWriter) throws IOException { + if (state.stack.isEmpty()) throw new IllegalStateException("Unexpected end_struct"); - ConfigStructure structure = stack.pop(); + ConfigStructure structure = state.stack.pop(); System.out.println("Ending structure " + structure.getName()); structure.addAlignmentFill(); @@ -259,7 +257,7 @@ public class ConfigDefinition { structure.headerWrite(cHeader); - if (stack.isEmpty()) { + if (state.stack.isEmpty()) { totalTsSize = structure.writeTunerStudio("", tsHeader, 0); tsHeader.write("; total TS size = " + totalTsSize + EOL); VariableRegistry.INSTANCE.register("TOTAL_CONFIG_SIZE", totalTsSize); @@ -268,7 +266,7 @@ public class ConfigDefinition { } } - private static void processLine(String line) throws IOException { + private static void processLine(ReaderState state, String line) { /** * for example * #define CLT_CURVE_SIZE 16 @@ -282,9 +280,9 @@ public class ConfigDefinition { if (cf == null) throw new IllegalStateException("Cannot parse line [" + line + "]"); - if (stack.isEmpty()) + if (state.stack.isEmpty()) throw new IllegalStateException(cf.name + ": Not enclosed in a struct"); - ConfigStructure structure = stack.peek(); + ConfigStructure structure = state.stack.peek(); if (cf.isIterate) { structure.addC(cf); diff --git a/java_tools/configuration_definition/src/com/rusefi/ReaderState.java b/java_tools/configuration_definition/src/com/rusefi/ReaderState.java new file mode 100644 index 0000000000..c68a789cbb --- /dev/null +++ b/java_tools/configuration_definition/src/com/rusefi/ReaderState.java @@ -0,0 +1,16 @@ +package com.rusefi; + +import java.util.Stack; + +/** + * (c) Andrey Belomutskiy + * 12/19/18 + */ +class ReaderState { + Stack stack = new Stack<>(); + + public void ensureEmptyAfterProcessing() { + if (!this.stack.isEmpty()) + throw new IllegalStateException("Unclosed structure: " + this.stack.peek().getName()); + } +}