44 */
55package net .minecraftforge .mcmaven .impl .tasks ;
66
7- import net . minecraftforge . mcmaven . impl . mappings . Mappings ;
7+ import de . siegmar . fastcsv . reader . CsvReader ;
88import net .minecraftforge .util .hash .HashFunction ;
99import net .minecraftforge .util .logging .Log ;
1010import org .apache .commons .io .IOUtils ;
1515import java .io .File ;
1616import java .io .IOException ;
1717import java .io .InputStream ;
18+ import java .io .InputStreamReader ;
1819import java .io .StringReader ;
1920import java .nio .charset .Charset ;
2021import java .nio .charset .StandardCharsets ;
2122import java .util .ArrayList ;
2223import java .util .Arrays ;
2324import java .util .Collection ;
2425import java .util .Deque ;
26+ import java .util .HashMap ;
2527import java .util .HashSet ;
2628import java .util .LinkedList ;
2729import java .util .List ;
3032import java .util .Set ;
3133import java .util .regex .Matcher ;
3234import java .util .regex .Pattern ;
35+ import java .util .zip .ZipFile ;
3336
34- // TODO: [MCMavenizer][MCPName] GARBAGE GARBAGE GARBAGE, CLEAN UP OR RE-IMPLEMENT
35- final class MCPNames {
37+ // TODO [Mavenizer][MCPNames] This is also in ForgeDev! Consolidate this!
38+ // TODO [Mavenizer][MCPNames] GARBAGE GARBAGE GARBAGE, CLEAN UP OR RE-IMPLEMENT
39+ record MCPNames (String hash , Map <String , String > names , Map <String , String > docs ) {
3640 //@formatter:off
3741 private static final Pattern
3842 SRG_FINDER = Pattern .compile ("[fF]unc_\\ d+_[a-zA-Z_]+|m_\\ d+_|[fF]ield_\\ d+_[a-zA-Z_]+|f_\\ d+_|p_\\ w+_\\ d+_|p_\\ d+_" ),
@@ -45,26 +49,43 @@ final class MCPNames {
4549 LAMBDA_DECL = Pattern .compile ("\\ ((?<args>(?:(?:, ){0,1}p_[\\ w]+_\\ d+_\\ b)+)\\ ) ->" );
4650 //@formatter:on
4751
52+ private record Data (Map <String , String > names , Map <String , String > docs ) { }
53+ private static Data loadData (File data ) throws IOException {
54+ var names = new HashMap <String , String >();
55+ var docs = new HashMap <String , String >();
56+ try (var zip = new ZipFile (data )) {
57+ var entries = zip .entries ();
58+ while (entries .hasMoreElements ()) {
59+ var entry = entries .nextElement ();
60+ if (!entry .getName ().endsWith (".csv" )) continue ;
61+
62+ try (var reader = CsvReader .builder ().ofNamedCsvRecord (new InputStreamReader (zip .getInputStream (entry )))) {
63+ for (var row : reader ) {
64+ var header = row .getHeader ();
65+ var obf = header .contains ("searge" ) ? "searge" : "param" ;
66+ var searge = row .getField (obf );
67+ names .put (searge , row .getField ("name" ));
68+ if (header .contains ("desc" )) {
69+ String desc = row .getField ("desc" );
70+ if (!desc .isBlank ())
71+ docs .put (searge , desc );
72+ }
73+ }
74+ }
75+ }
76+ }
77+
78+ return new Data (names , docs );
79+ }
80+
4881 static MCPNames load (File data ) throws IOException {
49- var loaded = Mappings . load (data );
50- return new MCPNames (HashFunction .SHA1 .hash (data ), loaded .names () , loaded .docs () );
82+ var loaded = loadData (data );
83+ return new MCPNames (HashFunction .SHA1 .hash (data ), loaded .names , loaded .docs );
5184 }
5285
5386 // NOTE: this is a micro-optimization to avoid creating a new pattern for every line
5487 private static final Pattern ARGS_DELIM = Pattern .compile (", " );
5588
56- // TODO [MCMavenizer][MCPNames] Not used for anything. Remove?
57- @ SuppressWarnings ("unused" )
58- private final String hash ;
59- private final Map <String , String > names ;
60- private final Map <String , String > docs ;
61-
62- MCPNames (String hash , Map <String , String > names , Map <String , String > docs ) {
63- this .hash = hash ;
64- this .names = names ;
65- this .docs = docs ;
66- }
67-
6889 String rename (String entry ) {
6990 return this .names .getOrDefault (entry , entry );
7091 }
@@ -78,14 +99,13 @@ String rename(InputStream stream, boolean javadocs, boolean lambdas) throws IOEx
7899 }
79100
80101 String rename (InputStream stream , boolean javadocs , boolean lambdas , Charset sourceFileCharset ) throws IOException {
81- String data = IOUtils .toString (stream , sourceFileCharset );
82- List < String > input = IOUtils .readLines (new StringReader (data ));
102+ var data = IOUtils .toString (stream , sourceFileCharset );
103+ var input = IOUtils .readLines (new StringReader (data ));
83104
84- // Return early on emtpy files
85- if (data .isEmpty ())
86- return "" ;
105+ // Return early on empty files
106+ if (data .isEmpty ()) return "" ;
87107
88- //Reader doesn't give us the empty line if the file ends with a newline.. so add one.
108+ // Reader doesn't give us the empty line if the file ends with a newline. .. so add one.
89109 if (data .charAt (data .length () - 1 ) == '\r' || data .charAt (data .length () - 1 ) == '\n' )
90110 input .add ("" );
91111
@@ -104,7 +124,7 @@ String rename(InputStream stream, boolean javadocs, boolean lambdas, Charset sou
104124 }
105125
106126 for (String line : input ) {
107- Matcher m = PACKAGE_DECL .matcher (line );
127+ var m = PACKAGE_DECL .matcher (line );
108128 if (m .find ())
109129 _package = m .group ("name" ) + "." ;
110130
@@ -137,16 +157,16 @@ private boolean injectJavadoc(List<String> lines, String line, String _package,
137157 matcher = METHOD_JAVADOC_PATTERN .matcher (line );
138158
139159 if (isConstructor || matcher .find ()) {
140- String name = isConstructor ? "<init>" : matcher .group ("name" );
141- String javadoc = docs .get (name );
160+ var name = isConstructor ? "<init>" : matcher .group ("name" );
161+ var javadoc = docs .get (name );
142162 if (javadoc == null && !innerClasses .isEmpty () && !name .startsWith ("func_" ) && !name .startsWith ("m_" )) {
143- String currentClass = innerClasses .peek ().getLeft ();
163+ var currentClass = innerClasses .peek ().getLeft ();
144164 javadoc = docs .get (currentClass + '#' + name );
145165 }
146166 if (javadoc != null )
147167 insertAboveAnnotations (lines , JavadocAdder .buildJavadoc (matcher .group ("indent" ), javadoc , true ));
148168
149- // worked, so return and don't try the fields.
169+ // worked, so return and don't try the others
150170 return true ;
151171 }
152172
@@ -162,6 +182,7 @@ private boolean injectJavadoc(List<String> lines, String line, String _package,
162182 if (javadoc != null )
163183 insertAboveAnnotations (lines , JavadocAdder .buildJavadoc (matcher .group ("indent" ), javadoc , false ));
164184
185+ // worked, so return and don't try the others
165186 return true ;
166187 }
167188
@@ -177,6 +198,7 @@ private boolean injectJavadoc(List<String> lines, String line, String _package,
177198 insertAboveAnnotations (lines , JavadocAdder .buildJavadoc (matcher .group ("indent" ), javadoc , true ));
178199 }
179200
201+ // worked, so return and don't try the others
180202 return true ;
181203 }
182204
@@ -185,10 +207,11 @@ private boolean injectJavadoc(List<String> lines, String line, String _package,
185207 if (matcher .find ()) {
186208 if (!innerClasses .isEmpty ()) {
187209 int len = matcher .group ("indent" ).length ();
188- if (len == innerClasses .peek ().getRight ()) {
210+ var value = innerClasses .peek ();
211+ if (len == value .getRight ()) {
189212 innerClasses .pop ();
190- } else if (len < innerClasses . peek () .getRight ()) {
191- Log .error ("Failed to properly track class blocks around class " + innerClasses . peek () .getLeft () + ":" + (lines .size () + 1 ));
213+ } else if (len < value .getRight ()) {
214+ Log .error ("Failed to properly track class blocks around class " + value .getLeft () + ":" + (lines .size () + 1 ));
192215 return false ;
193216 }
194217 }
@@ -338,4 +361,4 @@ static String buildJavadoc(String indent, String javadoc, boolean multiline) {
338361 return lines .stream ().map (String ::trim ).toList ();
339362 }
340363 }
341- }
364+ }
0 commit comments