* compositeKeyField1 = input.readInt();
* compositeKeyField2 = input.readKeyObject(formats[1]);
* }
*/
private void genBdbReadCompositeKeyFields() {
MethodVisitor mv = cv.visitMethod
(ACC_PUBLIC, "bdbReadCompositeKeyFields",
"(Lcom/sleepycat/persist/impl/EntityInput;" +
"[Lcom/sleepycat/persist/impl/Format;)V",
null, null);
mv.visitCode();
if (isCompositeKey) {
for (int i = 0; i < nonKeyFields.size(); i += 1) {
FieldInfo field = nonKeyFields.get(i);
/* Ignore non-simple (illegal) types for composite key. */
if (!genReadSimpleKeyField(mv, field)) {
/* For a non-simple type, call readKeyObject. */
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
if (i <= Byte.MAX_VALUE) {
mv.visitIntInsn(BIPUSH, i);
} else {
mv.visitLdcInsn(new Integer(i));
}
mv.visitInsn(AALOAD);
mv.visitMethodInsn
(INVOKEINTERFACE,
"com/sleepycat/persist/impl/EntityInput",
"readKeyObject",
"(Lcom/sleepycat/persist/impl/Format;)" +
"Ljava/lang/Object;");
mv.visitTypeInsn(CHECKCAST, getTypeInstName(field.type));
mv.visitFieldInsn
(PUTFIELD, className, field.name,
field.type.getDescriptor());
}
}
}
mv.visitInsn(RETURN);
mv.visitMaxs(5, 5);
mv.visitEnd();
}