Search in sources :

Example 1 with GeneratedPointerClass

use of com.ibm.j9ddr.GeneratedPointerClass in project openj9 by eclipse-openj9.

the class StructurePointer method getStructureFields.

public StructureField[] getStructureFields() {
    List<StructureField> fields = new LinkedList<StructureField>();
    Class<?> working = this.getClass();
    while (working != null) {
        GeneratedPointerClass classAnnotation = working.getAnnotation(GeneratedPointerClass.class);
        if (null == classAnnotation) {
            break;
        }
        for (Method thisMethod : working.getMethods()) {
            if (thisMethod.isAnnotationPresent(GeneratedFieldAccessor.class)) {
                GeneratedFieldAccessor fieldAnnotation = thisMethod.getAnnotation(GeneratedFieldAccessor.class);
                Field offsetField = null;
                try {
                    offsetField = classAnnotation.structureClass().getField(fieldAnnotation.offsetFieldName());
                } catch (SecurityException e) {
                    throw new Error("Unexpected security exception", e);
                } catch (NoSuchFieldException e) {
                    // This will happen if we reach for a field that doesn't exist on this level
                    continue;
                }
                int offset = -1;
                try {
                    offset = offsetField.getInt(null);
                } catch (Exception e) {
                    throw new Error(e);
                }
                DataType result = null;
                CorruptDataException cde = null;
                try {
                    result = (DataType) thisMethod.invoke(this);
                } catch (IllegalArgumentException e) {
                    throw new RuntimeException(e);
                } catch (IllegalAccessException e) {
                    throw new RuntimeException(e);
                } catch (InvocationTargetException e) {
                    Throwable cause = e.getCause();
                    if (cause instanceof CorruptDataException) {
                        cde = (CorruptDataException) cause;
                    } else {
                        throw new RuntimeException(e);
                    }
                }
                fields.add(new StructureField(thisMethod.getName(), fieldAnnotation.declaredType(), offset, result, cde));
            }
        }
        working = working.getSuperclass();
    }
    Collections.sort(fields);
    StructureField[] result = new StructureField[fields.size()];
    fields.toArray(result);
    return result;
}
Also used : GeneratedPointerClass(com.ibm.j9ddr.GeneratedPointerClass) Method(java.lang.reflect.Method) CorruptDataException(com.ibm.j9ddr.CorruptDataException) GeneratedFieldAccessor(com.ibm.j9ddr.GeneratedFieldAccessor) LinkedList(java.util.LinkedList) CorruptDataException(com.ibm.j9ddr.CorruptDataException) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) Field(java.lang.reflect.Field) DataType(com.ibm.j9ddr.vm29.j9.DataType)

Example 2 with GeneratedPointerClass

use of com.ibm.j9ddr.GeneratedPointerClass in project openj9 by eclipse.

the class StructurePointer method getStructureFields.

public StructureField[] getStructureFields() {
    List<StructureField> fields = new LinkedList<StructureField>();
    Class<?> working = this.getClass();
    while (working != null) {
        GeneratedPointerClass classAnnotation = working.getAnnotation(GeneratedPointerClass.class);
        if (null == classAnnotation) {
            break;
        }
        for (Method thisMethod : working.getMethods()) {
            if (thisMethod.isAnnotationPresent(GeneratedFieldAccessor.class)) {
                GeneratedFieldAccessor fieldAnnotation = thisMethod.getAnnotation(GeneratedFieldAccessor.class);
                Field offsetField = null;
                try {
                    offsetField = classAnnotation.structureClass().getField(fieldAnnotation.offsetFieldName());
                } catch (SecurityException e) {
                    throw new Error("Unexpected security exception", e);
                } catch (NoSuchFieldException e) {
                    // This will happen if we reach for a field that doesn't exist on this level
                    continue;
                }
                int offset = -1;
                try {
                    offset = offsetField.getInt(null);
                } catch (Exception e) {
                    throw new Error(e);
                }
                DataType result = null;
                CorruptDataException cde = null;
                try {
                    result = (DataType) thisMethod.invoke(this);
                } catch (IllegalArgumentException e) {
                    throw new RuntimeException(e);
                } catch (IllegalAccessException e) {
                    throw new RuntimeException(e);
                } catch (InvocationTargetException e) {
                    Throwable cause = e.getCause();
                    if (cause instanceof CorruptDataException) {
                        cde = (CorruptDataException) cause;
                    } else {
                        throw new RuntimeException(e);
                    }
                }
                fields.add(new StructureField(thisMethod.getName(), fieldAnnotation.declaredType(), offset, result, cde));
            }
        }
        working = working.getSuperclass();
    }
    Collections.sort(fields);
    StructureField[] result = new StructureField[fields.size()];
    fields.toArray(result);
    return result;
}
Also used : GeneratedPointerClass(com.ibm.j9ddr.GeneratedPointerClass) Method(java.lang.reflect.Method) CorruptDataException(com.ibm.j9ddr.CorruptDataException) GeneratedFieldAccessor(com.ibm.j9ddr.GeneratedFieldAccessor) LinkedList(java.util.LinkedList) CorruptDataException(com.ibm.j9ddr.CorruptDataException) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) Field(java.lang.reflect.Field) DataType(com.ibm.j9ddr.vm29.j9.DataType)

Aggregations

CorruptDataException (com.ibm.j9ddr.CorruptDataException)2 GeneratedFieldAccessor (com.ibm.j9ddr.GeneratedFieldAccessor)2 GeneratedPointerClass (com.ibm.j9ddr.GeneratedPointerClass)2 DataType (com.ibm.j9ddr.vm29.j9.DataType)2 Field (java.lang.reflect.Field)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 Method (java.lang.reflect.Method)2 LinkedList (java.util.LinkedList)2