contents[contentsOffset++] = (byte) (value >> 8);
contents[contentsOffset++] = (byte) value;
contents[contentsOffset++] = (byte) (numberOfInnerClasses >> 8);
contents[contentsOffset++] = (byte) numberOfInnerClasses;
for (int i = 0; i < numberOfInnerClasses; i++) {
ReferenceBinding innerClass = innerClasses[i];
int accessFlags = innerClass.getAccessFlags();
int innerClassIndex = constantPool.literalIndexForType(innerClass.constantPoolName());
// inner class index
contents[contentsOffset++] = (byte) (innerClassIndex >> 8);
contents[contentsOffset++] = (byte) innerClassIndex;
// outer class index: anonymous and local have no outer class index
if (innerClass.isMemberType()) {
// member or member of local
int outerClassIndex = constantPool.literalIndexForType(innerClass.enclosingType().constantPoolName());
contents[contentsOffset++] = (byte) (outerClassIndex >> 8);
contents[contentsOffset++] = (byte) outerClassIndex;
} else {
// equals to 0 if the innerClass is not a member type
contents[contentsOffset++] = 0;
contents[contentsOffset++] = 0;
}
// name index
if (!innerClass.isAnonymousType()) {
int nameIndex = constantPool.literalIndex(innerClass.sourceName());
contents[contentsOffset++] = (byte) (nameIndex >> 8);
contents[contentsOffset++] = (byte) nameIndex;
} else {
// equals to 0 if the innerClass is an anonymous type
contents[contentsOffset++] = 0;
contents[contentsOffset++] = 0;
}
// access flag
if (innerClass.isAnonymousType()) {
accessFlags &= ~ClassFileConstants.AccFinal;
} else if (innerClass.isMemberType() && innerClass.isInterface()) {
accessFlags |= ClassFileConstants.AccStatic; // implicitely static
}
contents[contentsOffset++] = (byte) (accessFlags >> 8);
contents[contentsOffset++] = (byte) accessFlags;
}