1212
1313import java .lang .reflect .Field ;
1414import java .util .ArrayList ;
15- import java .util .Collection ;
1615import java .util .List ;
1716import java .util .Map ;
1817
@@ -54,15 +53,13 @@ private static void disableLoggers() throws ReflectiveOperationException {
5453
5554 private static void doClear () {
5655 Map <String , ClassInfo > classInfoCache ;
57- Field mixinField , stateField , classNodeField , methodsField , fieldsField ;
56+ Field mixinField , stateField , classNodeField ;
5857 Class <?> stateClz ;
5958 try {
6059 disableLoggers ();
6160 Field field = accessible (ClassInfo .class .getDeclaredField ("cache" ));
6261 classInfoCache = (Map <String , ClassInfo >) field .get (null );
6362 mixinField = accessible (ClassInfo .class .getDeclaredField ("mixin" ));
64- methodsField = accessible (ClassInfo .class .getDeclaredField ("methods" ));
65- fieldsField = accessible (ClassInfo .class .getDeclaredField ("fields" ));
6663 stateClz = Class .forName ("org.spongepowered.asm.mixin.transformer.MixinInfo$State" );
6764 stateField = accessible (Class .forName ("org.spongepowered.asm.mixin.transformer.MixinInfo" ).getDeclaredField ("state" ));
6865 classNodeField = accessible (stateClz .getDeclaredField ("classNode" ));
@@ -73,7 +70,8 @@ private static void doClear() {
7370 MixinEnvironment .getDefaultEnvironment ().audit ();
7471 try {
7572 ClassNode emptyNode = new ClassNode ();
76- classInfoCache .entrySet ().removeIf (entry -> {
73+ List <Map .Entry <String , ClassInfo >> entries = new ArrayList <>(classInfoCache .entrySet ());
74+ entries .stream ().filter (entry -> {
7775 if (entry .getKey ().equals ("java/lang/Object" ))
7876 return false ;
7977 ClassInfo mixinClz = entry .getValue ();
@@ -87,14 +85,11 @@ private static void doClear() {
8785 if (state != null )
8886 classNodeField .set (state , emptyNode );
8987 }
90- // clear fields, methods
91- ((Collection <?>)methodsField .get (mixinClz )).clear ();
92- ((Collection <?>)fieldsField .get (mixinClz )).clear ();
9388 } catch (ReflectiveOperationException | RuntimeException e ) {
9489 e .printStackTrace ();
9590 }
9691 return true ;
97- });
92+ }). forEach ( entry -> classInfoCache . remove ( entry . getKey ())) ;
9893 } catch (RuntimeException e ) {
9994 e .printStackTrace ();
10095 }
0 commit comments