77import org .jetbrains .annotations .Nullable ;
88import org .objectweb .asm .Type ;
99import org .objectweb .asm .tree .*;
10- import org .sinytra .adapter .env .ctx .MixinContext ;
11- import org .sinytra .adapter .env .ctx .TargetPair ;
1210import org .sinytra .adapter .analysis .params .EnhancedParamsDiff ;
1311import org .sinytra .adapter .analysis .params .ParamsDiffSnapshot ;
1412import org .sinytra .adapter .env .ctx .LocalVariable ;
13+ import org .sinytra .adapter .env .ctx .MixinContext ;
14+ import org .sinytra .adapter .env .ctx .TargetPair ;
1515import org .sinytra .adapter .transform .param .TransformParameters ;
1616import org .sinytra .adapter .util .AdapterUtil ;
1717import org .sinytra .adapter .util .OpcodeUtil ;
1818
19- import java .util .ArrayList ;
20- import java .util .Collections ;
21- import java .util .List ;
22- import java .util .Map ;
19+ import java .util .*;
2320import java .util .stream .IntStream ;
2421
2522public final class LocalVarAnalyzer {
@@ -64,7 +61,7 @@ public static InsnList findInitializerInsns(MethodNode methodNode, int index) {
6461 public record CapturedLocalsUsage (LocalVariableLookup targetTable , Int2IntMap usageCount , Int2ObjectMap <InsnList > varInsnLists ) {
6562 }
6663
67- public record CapturedLocalsTransform (List <Integer > used , TransformParameters remover , List <LocalVariableNode > usedLocalNodes ) {
64+ public record CapturedLocalsTransform (List <Integer > used , TransformParameters remover , Collection <LocalVariableNode > usedLocalNodes ) {
6865 public CapturedLocalsUsage getUsage (AdapterUtil .CapturedLocals capturedLocals ) {
6966 LocalVariableLookup targetTable = new LocalVariableLookup (capturedLocals .target ().methodNode ());
7067 Int2ObjectMap <InsnList > varInsnLists = new Int2ObjectOpenHashMap <>();
@@ -82,14 +79,15 @@ public static CapturedLocalsTransform analyzeCapturedLocals(AdapterUtil.Captured
8279 int paramLocalStart = capturedLocals .paramLocalStart ();
8380 LocalVariableLookup table = capturedLocals .lvt ();
8481 List <Integer > used = new ArrayList <>();
85- List <LocalVariableNode > usedLocalNodes = new ArrayList <>();
82+ Set <LocalVariableNode > usedLocalNodes = new HashSet <>();
8683 for (AbstractInsnNode insn : methodNode .instructions ) {
8784 if (insn instanceof VarInsnNode varInsn ) {
8885 LocalVariableNode node = table .getByIndexOrNull (varInsn .var );
89- if (node == null ) {
86+ if (node == null )
9087 continue ;
91- }
9288 int ordinal = table .getParameterOrdinal (node );
89+ if (ordinal == -1 )
90+ continue ;
9391 if (ordinal >= paramLocalStart && ordinal <= capturedLocals .paramLocalEnd ()) {
9492 used .add (ordinal );
9593 usedLocalNodes .add (node );
0 commit comments