Skip to content

Commit 90d5a5f

Browse files
committed
Write POM files for mappings-only dependency
Gradle can go kill itself
1 parent 3d43d3d commit 90d5a5f

File tree

3 files changed

+63
-39
lines changed

3 files changed

+63
-39
lines changed

src/main/java/net/minecraftforge/mcmaven/cli/MCPDataTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private static int runI(String[] args) throws Exception {
108108
}
109109

110110
var mcVersion = MinecraftMaven.mcpToMcVersion(artifact.getVersion());
111-
Mappings mappings = null;
111+
Mappings mappings;
112112
if (options.has(officialO))
113113
mappings = new Mappings("official", null).withMCVersion(mcVersion);
114114
else if (options.has(parchmentO))

src/main/java/net/minecraftforge/mcmaven/impl/repo/mcpconfig/MCPConfigRepo.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,18 @@ public List<PendingArtifact> process(Artifact artifact, Mappings mappings) {
9999
var mcp = this.get(Artifact.from("de.oceanlabs.mcp", "mcp_config", version, null, "zip"));
100100
var mcpSide = mcp.getSide(side);
101101

102+
var mcpTasks = mcpSide.getTasks();
103+
var build = mcpSide.getBuildFolder();
104+
var name = Artifact.from("net.minecraft", side, version);
105+
102106
if (isMappings) {
103-
var name = mappings.getArtifact(mcpSide);
107+
name = mappings.getArtifact(mcpSide);
104108
return List.of(
105-
pending("Mappings", mappings.getCsvZip(mcpSide), name)
109+
pending("Mappings", mappings.getCsvZip(mcpSide), name),
110+
pending("Mappings POM", simplePom(build, name), name.withExtension("pom"))
106111
);
107112
}
108113

109-
var mcpTasks = mcpSide.getTasks();
110-
var build = mcpSide.getBuildFolder();
111-
var name = Artifact.from("net.minecraft", side, version);
112-
113114
return switch (mappings.channel()) {
114115
case "notch" -> List.of(pending("Classes", mcpTasks.getRawJar(), name.withClassifier("raw"), simpleVariant("obf-notch", new Mappings("notch", null))));
115116
case "srg", "searge" -> List.of(pending("Classes", mcpTasks.getSrgJar(), name.withClassifier("srg"), simpleVariant("obf-searge", new Mappings("searge", null))));

src/main/java/net/minecraftforge/mcmaven/impl/tasks/MCPNames.java

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
package net.minecraftforge.mcmaven.impl.tasks;
66

7-
import net.minecraftforge.mcmaven.impl.mappings.Mappings;
7+
import de.siegmar.fastcsv.reader.CsvReader;
88
import net.minecraftforge.util.hash.HashFunction;
99
import net.minecraftforge.util.logging.Log;
1010
import org.apache.commons.io.IOUtils;
@@ -15,13 +15,15 @@
1515
import java.io.File;
1616
import java.io.IOException;
1717
import java.io.InputStream;
18+
import java.io.InputStreamReader;
1819
import java.io.StringReader;
1920
import java.nio.charset.Charset;
2021
import java.nio.charset.StandardCharsets;
2122
import java.util.ArrayList;
2223
import java.util.Arrays;
2324
import java.util.Collection;
2425
import java.util.Deque;
26+
import java.util.HashMap;
2527
import java.util.HashSet;
2628
import java.util.LinkedList;
2729
import java.util.List;
@@ -30,9 +32,11 @@
3032
import java.util.Set;
3133
import java.util.regex.Matcher;
3234
import 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

Comments
 (0)