Extract generateIndexCode() in SpEL's Indexer

This commit is contained in:
Sam Brannen
2024-04-19 14:33:22 +02:00
parent 9eab7bb11d
commit c8090fe0b4

View File

@@ -413,17 +413,13 @@ public class Indexer extends SpelNodeImpl {
default -> AALOAD;
};
cf.enterCompilationScope();
index.generateCode(mv, cf);
cf.exitCompilationScope();
generateIndexCode(index, mv, cf);
mv.visitInsn(insn);
}
else if (this.indexedType == IndexedType.LIST) {
mv.visitTypeInsn(CHECKCAST, "java/util/List");
cf.enterCompilationScope();
index.generateCode(mv, cf);
cf.exitCompilationScope();
generateIndexCode(index, mv, cf);
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", true);
}
@@ -436,9 +432,7 @@ public class Indexer extends SpelNodeImpl {
mv.visitLdcInsn(mapKeyName);
}
else {
cf.enterCompilationScope();
index.generateCode(mv, cf);
cf.exitCompilationScope();
generateIndexCode(index, mv, cf);
}
mv.visitMethodInsn(
INVOKEINTERFACE, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", true);
@@ -470,6 +464,12 @@ public class Indexer extends SpelNodeImpl {
}
}
private void generateIndexCode(SpelNodeImpl index, MethodVisitor mv, CodeFlow cf) {
cf.enterCompilationScope();
index.generateCode(mv, cf);
cf.exitCompilationScope();
}
@Override
public String toStringAST() {
return "[" + getChild(0).toStringAST() + "]";