package com.telerik.metadata.dx; import com.android.dex.ClassData; import com.android.dex.Dex; import com.android.dex.FieldId; import com.android.dx.rop.code.AccessFlags; import com.telerik.metadata.desc.FieldDescriptor; import com.telerik.metadata.desc.TypeDescriptor; import java.util.List; public class FieldInfo implements FieldDescriptor { private final DexFile dexFile; private final ClassData.Field field; public FieldInfo(DexFile dexFile, ClassData.Field field) { this.dexFile = dexFile; this.field = field; } @Override public boolean isPublic() { return AccessFlags.isPublic(field.getAccessFlags()); } @Override public boolean isProtected() { return AccessFlags.isProtected(field.getAccessFlags()); } @Override public boolean isFinal() { boolean isFinal = (field.getAccessFlags() & AccessFlags.ACC_FINAL) == AccessFlags.ACC_FINAL; return isFinal; } @Override public boolean isStatic() { return AccessFlags.isStatic(field.getAccessFlags()); } @Override public String getName() { Dex dex = dexFile.getDex(); List<String> strings = dex.strings(); int idx = dex.nameIndexFromFieldIndex(field.getFieldIndex()); String fieldName = strings.get(idx); return fieldName; } @Override public TypeDescriptor getType() { Dex dex = dexFile.getDex(); List<String> typeNames = dex.typeNames(); FieldId fieldId = dex.fieldIds().get(field.getFieldIndex()); int typeIdx = fieldId.getTypeIndex(); String retTypeName = typeNames.get(typeIdx); return new TypeInfo(retTypeName); } }