DataValue (AbstractInsnNode insn) { switch (insn.getOpcode()) { case Opcodes.NEW -> { return DataValue.LocalDataValue; } case Opcodes.LCONST_0, Opcodes.LCONST_1, Opcodes.DCONST_0, Opcodes.DCONST_1 -> { return DataValue.UnknownDataValue2; } case Opcodes.LDC -> { Object cst = ((LdcInsnNode)insn).cst; int size = (cst instanceof Long || cst instanceof Double) ? 2 : 1; return size == 1 ? DataValue.UnknownDataValue1 : DataValue.UnknownDataValue2; } case Opcodes.GETSTATIC -> { FieldInsnNode fieldInsn = (FieldInsnNode)insn; Member method = new Member(fieldInsn.owner, fieldInsn.name, fieldInsn.desc); EKey key = new EKey(method, Direction.Volatile, true); effects[methodNode.instructions.indexOf(insn)] = new EffectQuantum.FieldReadQuantum(key); int size = Type.getType(((FieldInsnNode)insn).desc).getSize(); return size == 1 ? DataValue.UnknownDataValue1 : DataValue.UnknownDataValue2; } default -> { return DataValue.UnknownDataValue1; } } }