@Override public void visit(final int i, final int i1, final String name, final String s, final String parent, final String[] interfaces) { boolean enhanced = interfaces != null && interfaces.length > 0 && asList(interfaces).contains("org/apache/openjpa/enhance/PersistenceCapable"); if (!enhanced && name != null && parent != null && !"java/lang/Object".equals(parent) && !name.equals(parent)) { enhanced = isEnhanced(bytes(parent)); } throw new EnhancedStatusException(enhanced); } }, 0);
@Override public void visit(final int i, final int i1, final String name, final String s, final String parent, final String[] interfaces) { boolean enhanced = interfaces != null && interfaces.length > 0 && asList(interfaces).contains("org/apache/openjpa/enhance/PersistenceCapable"); if (!enhanced && name != null && parent != null && !"java/lang/Object".equals(parent) && !name.equals(parent)) { enhanced = isEnhanced(bytes(parent)); } throw new EnhancedStatusException(enhanced); } }, 0);
/** * Analyze the bytecode to see if the given class definition implements * {@link PersistenceCapable}. */ private static boolean isEnhanced(byte[] b) { if (AsmAdaptor.use()) { return AsmAdaptor.isEnhanced(b); } ConstantPoolTable table = new ConstantPoolTable(b); int idx = table.getEndIndex(); idx += 6; // skip access, cls, super int ifaces = table.readUnsignedShort(idx); int clsEntry, utfEntry; String name; for (int i = 0; i < ifaces; i++) { idx += 2; clsEntry = table.readUnsignedShort(idx); utfEntry = table.readUnsignedShort(table.get(clsEntry)); name = table.readString(table.get(utfEntry)); if ("org/apache/openjpa/enhance/PersistenceCapable".equals(name)) return true; } return false; } }
/** * Analyze the bytecode to see if the given class definition implements * {@link PersistenceCapable}. */ private static boolean isEnhanced(byte[] b) { if (AsmAdaptor.use()) { return AsmAdaptor.isEnhanced(b); } ConstantPoolTable table = new ConstantPoolTable(b); int idx = table.getEndIndex(); idx += 6; // skip access, cls, super int ifaces = table.readUnsignedShort(idx); int clsEntry, utfEntry; String name; for (int i = 0; i < ifaces; i++) { idx += 2; clsEntry = table.readUnsignedShort(idx); utfEntry = table.readUnsignedShort(table.get(clsEntry)); name = table.readString(table.get(utfEntry)); if ("org/apache/openjpa/enhance/PersistenceCapable".equals(name)) return true; } return false; } }