/** * Processes the fields of the given class. * * @param cf {@code non-null;} class being translated * @param out {@code non-null;} output class */ private static void processFields(DirectClassFile cf, ClassDefItem out) { CstType thisClass = cf.getThisClass(); FieldList fields = cf.getFields(); int sz = fields.size(); for (int i = 0; i < sz; i++) { Field one = fields.get(i); try { CstFieldRef field = new CstFieldRef(thisClass, one.getNat()); int accessFlags = one.getAccessFlags(); if (AccessFlags.isStatic(accessFlags)) { TypedConstant constVal = one.getConstantValue(); EncodedField fi = new EncodedField(field, accessFlags); if (constVal != null) { constVal = coerceConstant(constVal, field.getType()); } out.addStaticField(fi, constVal); } else { EncodedField fi = new EncodedField(field, accessFlags); out.addInstanceField(fi); } Annotations annotations = AttributeTranslator.getAnnotations(one.getAttributes()); if (annotations.size() != 0) { out.addFieldAnnotations(field, annotations); } } catch (RuntimeException ex) { String msg = "...while processing " + one.getName().toHuman() + " " + one.getDescriptor().toHuman(); throw ExceptionWithContext.withContext(ex, msg); } } }