public void defrag( final ClassMetadata classMetadata, final LatinStringIO sio, final DefragmentContextImpl context, int classIndexID) { readName(sio, context.sourceBuffer()); readName(sio, context.targetBuffer()); int metaClassID = 0; context.writeInt(metaClassID); // ancestor ID context.copyID(); context.writeInt(indexIDForWriting(classIndexID)); final int aspectCount = context.readInt(); if (aspectCount > classMetadata.declaredAspectCount()) { throw new IllegalStateException(); } final IntByRef processedAspectCount = new IntByRef(0); classMetadata.forEachDeclaredAspect( new Procedure4() { public void apply(Object arg) { if (processedAspectCount.value >= aspectCount) { return; } ClassAspect aspect = (ClassAspect) arg; _family._field.defrag(classMetadata, aspect, sio, context); processedAspectCount.value++; } }); }