< 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 >