From 9be1305636daa633a7219e102b22a4ffcf277690 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Thu, 29 Jun 2023 02:06:00 +0200
Subject: GlueGen Struct [17]: Handle void pointers, i.e. `void*`, within a
 struct as `Opaque` configured pointer-types

.. includes cross-ref'ed doc and unit test
---
 src/java/com/jogamp/gluegen/JavaEmitter.java | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

(limited to 'src/java/com/jogamp/gluegen/JavaEmitter.java')

diff --git a/src/java/com/jogamp/gluegen/JavaEmitter.java b/src/java/com/jogamp/gluegen/JavaEmitter.java
index f0bc8c7..3a86239 100644
--- a/src/java/com/jogamp/gluegen/JavaEmitter.java
+++ b/src/java/com/jogamp/gluegen/JavaEmitter.java
@@ -1741,8 +1741,11 @@ public class JavaEmitter implements GlueEmitter {
       final String baseElemSizeDenominator;
       final boolean useGetCStringLength;
       final boolean maxOneElement; // zero or one element
-      if( isOpaque && opaqueTypeInfo.pointerDepth() <= 1 || ( fieldType.isPrimitive() && !baseElemType.isFunctionPointer() ) ) {
-          // Overridden by JavaConfiguration.typeInfo(..), i.e. Opaque!
+      if( isOpaque && opaqueTypeInfo.pointerDepth() <= 1 ||                    // explicit 'Opaque' (config)
+          ( fieldType.isPrimitive() && !baseElemType.isFunctionPointer() ) ||  // a primitive and non-function-ptr
+          ( fieldType.isPointer() && baseElemType.isVoid() )                   // like 'void*' -> 'void'
+        )
+      {
           // Emulating array w/ 1 element
           isPrimitive = true;
           isPointer = false;
@@ -1837,14 +1840,6 @@ public class JavaEmitter implements GlueEmitter {
           if( GlueGen.debug() ) {
               System.err.printf("SE.ac.%02d: ownership %s%n", (i+1), ownership);
           }
-
-          if( !baseElemType.hasSize() ) { // like 'void*' -> 'void'
-              final String msg = "SKIP unsized field in struct: "+fqStructFieldName+": fieldType "+fieldType.getSignature(null).toString()+", baseType "+baseElemType.getSignature(null).toString();
-              unit.emitln("  // "+msg);
-              unit.emitln();
-              LOG.log(WARNING, structCType.getASTLocusTag(), msg);
-              return;
-          }
           baseIsPointer = baseElemType.isPointer();
           isConstValue = baseElemType.isConst();
           if( baseIsPointer ) {
-- 
cgit v1.2.3