in modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java [525:562]
public void visitFieldInsn(final int opcode, final String owner, final String name, final String desc) {
final Pair<Type, String> key = Pair.of(Type.getObjectType(owner), name);
final FieldAccess fieldAccess = fieldAccessMap.get(key);
Validate.isTrue(fieldAccesses.contains(fieldAccess), "Cannot find field %s", key);
final int fieldIndex = fieldAccesses.indexOf(fieldAccess);
visitInsn(NOP);
loadLocal(localFieldArray);
push(fieldIndex);
arrayLoad(fieldArrayType.getElementType());
checkCast(fieldType);
final Method access;
if (opcode == PUTSTATIC) {
// value should have been at top of stack on entry; position the field under the value:
swap();
// add null object for static field deref and swap under value:
push((String) null);
swap();
if (fieldAccess.type.getSort() < Type.ARRAY) {
// box value:
valueOf(fieldAccess.type);
}
access = Method.getMethod("void set(Object, Object)");
} else {
access = Method.getMethod("Object get(Object)");
// add null object for static field deref:
push((String) null);
}
invokeVirtual(fieldType, access);
if (opcode == GETSTATIC) {
checkCast(Privilizer.wrap(fieldAccess.type));
if (fieldAccess.type.getSort() < Type.ARRAY) {
unbox(fieldAccess.type);
}
}
}