44import com .chaoticsomeone .ModInfGen .model .OpensDeclaration ;
55import com .google .gson .Gson ;
66
7- import java .io .BufferedReader ;
8- import java .io .FileReader ;
9- import java .io .IOException ;
7+ import java .io .*;
108import java .util .regex .Matcher ;
119import java .util .regex .Pattern ;
1210
@@ -17,31 +15,83 @@ public class ModuleInfoGenerator {
1715
1816 private final Gson gson = new Gson ();
1917 private final String configFilePath = "module-info.json5" ;
20- private final ModuleInfo moduleInfo ;
2118
22- private final boolean collapseWhitespaces ;
19+ private boolean collapseWhitespaces ;
2320
2421 public ModuleInfoGenerator (boolean collapseWhitespaces ) {
2522 this .collapseWhitespaces = collapseWhitespaces ;
23+ }
24+
25+ public ModuleInfoGenerator () {
26+ this (false );
27+ }
2628
27- moduleInfo = gson .fromJson (readJsonString (configFilePath ), ModuleInfo .class );
29+ public void generate () {
30+ ModuleInfo moduleInfo = gson .fromJson (readJsonString (configFilePath ), ModuleInfo .class );
2831
2932 try {
3033 moduleInfo .validateVariables ();
3134 moduleInfo .expandVariables ();
3235 moduleInfo .expandRoot ();
3336
34- System .out .println (generateModuleInfoContent ());
37+ System .out .println (generateModuleInfoContent (moduleInfo ));
3538 } catch (IllegalArgumentException e ) {
3639 e .printStackTrace ();
3740 }
3841 }
3942
40- public ModuleInfoGenerator () {
41- this (false );
43+ public void generateTemplate () {
44+ File outputFile = new File (configFilePath );
45+
46+ if (outputFile .exists ()) {
47+ return ;
48+ }
49+
50+ SmartStringBuilder outputBuilder = new SmartStringBuilder ();
51+
52+ outputBuilder .appendLn ("{" );
53+ outputBuilder .alterIndent (1 );
54+
55+ outputBuilder .appendLn ("\" module\" : \" \" ," );
56+ outputBuilder .appendLn ("\" source-root\" : \" \" ,\n " );
57+
58+ outputBuilder .appendLn ("\" variables\" : {" );
59+ outputBuilder .appendLn ("},\n " );
60+
61+ outputBuilder .appendLn ("\" requires\" : [" );
62+ outputBuilder .appendLn ("],\n " );
63+
64+ outputBuilder .appendLn ("\" exports\" : [" );
65+ outputBuilder .appendLn ("],\n " );
66+
67+ outputBuilder .appendLn ("\" opens\" : [" );
68+ outputBuilder .appendLn ("],\n " );
69+
70+ outputBuilder .appendLn ("\" legacy\" : [" );
71+ outputBuilder .appendLn ("],\n " );
72+
73+ outputBuilder .appendLn ("\" comments\" : {" );
74+ outputBuilder .alterIndent (1 );
75+ outputBuilder .appendLn ("\" header\" : \" \" ," );
76+ outputBuilder .appendLn ("\" footer\" : \" \" ," );
77+ outputBuilder .appendLn ("\" requires\" : \" \" ," );
78+ outputBuilder .appendLn ("\" exports\" : \" \" ," );
79+ outputBuilder .appendLn ("\" opens\" : \" \" ," );
80+ outputBuilder .appendLn ("\" legacy\" : \" \" " );
81+ outputBuilder .alterIndent (-1 );
82+ outputBuilder .appendLn ("}" );
83+
84+ outputBuilder .alterIndent (-1 );
85+ outputBuilder .appendLn ("}" );
86+
87+ try (BufferedWriter bw = new BufferedWriter (new FileWriter (outputFile ))) {
88+ bw .write (outputBuilder .toString ());
89+ } catch (IOException e ) {
90+ e .printStackTrace ();
91+ }
4292 }
4393
44- private String generateModuleInfoContent () {
94+ private String generateModuleInfoContent (ModuleInfo moduleInfo ) {
4595 SmartStringBuilder outputBuilder = new SmartStringBuilder ();
4696
4797 outputBuilder .appendComment (moduleInfo .getComment ("header" ), 0 , 2 );
@@ -87,7 +137,7 @@ private String generateModuleInfoContent() {
87137
88138 outputBuilder .appendComment (moduleInfo .getComment ("footer" ), 2 );
89139
90- return outputBuilder .toString ();
140+ return outputBuilder .toString (true );
91141 }
92142
93143 private String readJsonString (String path ) {
@@ -119,17 +169,29 @@ private String readJsonString(String path) {
119169 return matcher .replaceAll ("" );
120170 }
121171
172+ public boolean isCollapseWhitespaces () {
173+ return collapseWhitespaces ;
174+ }
175+
176+ public void setCollapseWhitespaces (boolean collapseWhitespaces ) {
177+ this .collapseWhitespaces = collapseWhitespaces ;
178+ }
122179
123180 public static void main (String [] args ) {
124- boolean collapseWhitespaces = false ;
181+ ModuleInfoGenerator generator = new ModuleInfoGenerator (false );
182+ boolean doGenerate = true ;
125183
126184 for (String arg : args ) {
127185 if (arg .equalsIgnoreCase ("-w" )) {
128- collapseWhitespaces = true ;
186+ generator .setCollapseWhitespaces (true );
187+ } else if (arg .equalsIgnoreCase ("-n" )) {
188+ generator .generateTemplate ();
189+ doGenerate = false ;
129190 }
130191 }
131192
132- ModuleInfoGenerator generator = new ModuleInfoGenerator (collapseWhitespaces );
133-
193+ if (doGenerate ) {
194+ generator .generate ();
195+ }
134196 }
135197}
0 commit comments