@@ -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