< prev index next >
src/java.base/share/classes/jdk/internal/foreign/HeaderImplGenerator.java
Print this page
*** 86,96 ****
}
@Override
protected void generateMembers(BinderClassWriter cw) {
Class<?> headerClass = interfaces[0];
! String declarations = headerClass.getAnnotation(NativeHeader.class).declarations();
for (Map.Entry<String, Object> declEntry : DescriptorParser.parseHeaderDeclarations(declarations).entrySet()) {
if (declEntry.getValue() instanceof Layout) {
Layout l = (Layout)declEntry.getValue();
for (Map.Entry<AccessorKind, String> accessorEntry : AccessorKind.from(l).entrySet()) {
nameToInfo.put(accessorEntry.getValue(), new GlobalVarInfo(declEntry.getKey(), l, accessorEntry.getKey()));
--- 86,108 ----
}
@Override
protected void generateMembers(BinderClassWriter cw) {
Class<?> headerClass = interfaces[0];
! handleDeclarations(headerClass);
! super.generateMembers(cw);
! }
!
! private void handleDeclarations(Class<?> cls) {
! for (Class<?> si : cls.getInterfaces()) {
! handleDeclarations(si);
! }
! if (!cls.isAnnotationPresent(NativeHeader.class)) {
! // nothing to do!
! return;
! }
! String declarations = cls.getAnnotation(NativeHeader.class).declarations();
for (Map.Entry<String, Object> declEntry : DescriptorParser.parseHeaderDeclarations(declarations).entrySet()) {
if (declEntry.getValue() instanceof Layout) {
Layout l = (Layout)declEntry.getValue();
for (Map.Entry<AccessorKind, String> accessorEntry : AccessorKind.from(l).entrySet()) {
nameToInfo.put(accessorEntry.getValue(), new GlobalVarInfo(declEntry.getKey(), l, accessorEntry.getKey()));
*** 98,108 ****
} else {
Function f = (Function)declEntry.getValue();
nameToInfo.put(declEntry.getKey(), new FunctionInfo(declEntry.getKey(), f));
}
}
- super.generateMembers(cw);
}
@Override
protected void generateConstructor(BinderClassWriter cw) {
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
--- 110,119 ----
< prev index next >