Skip to content

Commit b9c4b02

Browse files
committed
Improve method name propagation
1 parent 1550142 commit b9c4b02

1 file changed

Lines changed: 35 additions & 19 deletions

File tree

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/MappingsUtilsImpl.java

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ public static void completeMappingsFromTr(TrEnvironment trEnvironment) {
211211
int srcNamespace = FULL_MAPPINGS.getNamespaceId("official");
212212
int targetNamespace = FULL_MAPPINGS.getNamespaceId(getTargetNamespace());
213213

214-
Map<String, List<ExtendedClassMember>> classMembers = new HashMap<>();
214+
Map<ExtendedClassMember, List<String>> classMembers = new HashMap<>();
215215

216216
for (MappingTree.ClassMapping classMapping : FULL_MAPPINGS.getClasses()) {
217217
String className = classMapping.getName(srcNamespace);
@@ -226,36 +226,52 @@ public static void completeMappingsFromTr(TrEnvironment trEnvironment) {
226226
TrMethod method = trClass.getMethod(methodMapping.getName(srcNamespace), methodMapping.getDesc(srcNamespace));
227227

228228
if (method != null && method.isVirtual()) {
229-
for (String child : children) {
230-
if (!classMembers.containsKey(child)) classMembers.put(child, new ArrayList<>());
231-
232-
classMembers.get(child).add(new ExtendedClassMember(
233-
methodMapping.getName(srcNamespace), methodMapping.getDesc(srcNamespace), className
234-
));
235-
}
229+
classMembers.put(new ExtendedClassMember(
230+
methodMapping.getName(srcNamespace), methodMapping.getDesc(srcNamespace), className
231+
), children);
236232
}
237233
}
238234
}
239235

240236
int propagated = 0;
241237

242-
for (Map.Entry<String, List<ExtendedClassMember>> entry : classMembers.entrySet()) {
243-
TrClass trClass = trEnvironment.getClass(entry.getKey());
238+
for (Map.Entry<ExtendedClassMember, List<String>> entry : classMembers.entrySet()) {
239+
List<String> toAdd = new ArrayList<>(entry.getValue());
244240

245-
if (trClass == null) continue;
241+
while (!toAdd.isEmpty()) {
242+
TrClass trClass = trEnvironment.getClass(toAdd.remove(0));
243+
if (trClass == null) continue;
246244

247-
try {
248-
FULL_MAPPINGS.visitClass(entry.getKey());
249-
} catch (IOException e) {
250-
e.printStackTrace();
245+
List<String> children = trClass.getChildren().stream().map(TrClass::getName).collect(Collectors.toList());
246+
247+
for (String child : children) {
248+
if (!entry.getValue().contains(child)) {
249+
toAdd.add(child);
250+
entry.getValue().add(child);
251+
}
252+
}
251253
}
254+
}
255+
256+
for (Map.Entry<ExtendedClassMember, List<String>> entry : classMembers.entrySet()) {
257+
ExtendedClassMember member = entry.getKey();
258+
259+
for (String child : entry.getValue()) {
260+
TrClass trClass = trEnvironment.getClass(child);
261+
if (trClass == null) continue;
262+
263+
try {
264+
FULL_MAPPINGS.visitClass(child);
265+
} catch (IOException e) {
266+
e.printStackTrace();
267+
}
252268

253-
MappingTree.ClassMapping classMapping = FULL_MAPPINGS.getClass(entry.getKey());
269+
MappingTree.ClassMapping classMapping = FULL_MAPPINGS.getClass(child);
254270

255-
for (ExtendedClassMember member : entry.getValue()) {
256-
TrMethod method = trClass.getMethod(member.name, member.desc);
271+
if (classMapping == null) continue;
257272

258-
if (method == null) continue;
273+
TrMethod trMethod = trClass.getMethod(member.name, member.desc);
274+
if (trMethod == null) continue;
259275

260276
if (classMapping.getMethod(member.name, member.desc, srcNamespace) != null) continue;
261277

0 commit comments

Comments
 (0)