nativelibs4java / JNAerator

JNAerator: native bindings generator for JNA / BridJ / Node.js

Home Page:http://jnaerator.googlecode.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NullPointerException raised while generating Java classes

ochafik opened this issue · comments

From @Signalis-POE on October 30, 2014 8:37

I noticed a regression between the version 0.12-SNAPSHOT-20130727 and 0.12-20140626.234513-58-shaded.
I use JNAerator in order to bind a Java project to VLC.
I was able to create Java classes with the version 0.12-SNAPSHOT-20130727 and with the last version it's no more possible.
I looked for the root cause, it's seem be related to the struct type field inside the following union:

typedef struct libvlc_event_t
{
int type; /< Event type (see @ref libvlc_event_e) */
void *p_obj; /
< Object emitting the event /
union
{
/
media descriptor */
struct
{
libvlc_meta_t meta_type;
} media_meta_changed;
struct
{
libvlc_media_t * new_child;
} media_subitem_added;
struct
{
int64_t new_duration;
} media_duration_changed;
struct
{
int new_status;
} media_parsed_changed;
struct
{
libvlc_media_t * md;
} media_freed;
struct
{
libvlc_state_t new_state;
} media_state_changed;
struct
{
libvlc_media_t * item;
} media_subitemtree_added;

    /* media instance */
    struct
    {
        float new_cache;
    } media_player_buffering;
    struct
    {
        float new_position;
    } media_player_position_changed;
    struct
    {
        libvlc_time_t new_time;
    } media_player_time_changed;
    struct
    {
        int new_title;
    } media_player_title_changed;
    struct
    {
        int new_seekable;
    } media_player_seekable_changed;
    struct
    {
        int new_pausable;
    } media_player_pausable_changed;
    struct
    {
        int new_count;
    } media_player_vout;

    /* media list */
    struct
    {
        libvlc_media_t * item;
        int index;
    } media_list_item_added;
    struct
    {
        libvlc_media_t * item;
        int index;
    } media_list_will_add_item;
    struct
    {
        libvlc_media_t * item;
        int index;
    } media_list_item_deleted;
    struct
    {
        libvlc_media_t * item;
        int index;
    } media_list_will_delete_item;

    /* media list player */
    struct
    {
        libvlc_media_t * item;
    } media_list_player_next_item_set;

    /* snapshot taken */
    struct
    {
         char* psz_filename ;
    } media_player_snapshot_taken ;

    /* Length changed */
    struct
    {
        libvlc_time_t   new_length;
    } media_player_length_changed;

    /* VLM media */
    struct
    {
        const char * psz_media_name;
        const char * psz_instance_name;
    } vlm_media_event;

    /* Extra MediaPlayer */
    struct
    {
        libvlc_media_t * new_media;
    } media_player_media_changed;
} u; /**< Type-dependent event description */

} libvlc_event_t;

If I keep only the basic like int or float and remove the type like libvlc_time_t then the generation is successful.

The following stack trace is displayed when generating:
java.lang.NullPointerException
at com.ochafik.lang.jnaerator.Result.getFakePointer(Result.java:215)
at com.ochafik.lang.jnaerator.JNATypeConversion$1.visitSimpleTypeRef(JNATypeConversion.java:580)
at com.ochafik.lang.jnaerator.parser.TypeRef$SimpleTypeRef.accept(TypeRef.java:146)
at com.ochafik.lang.jnaerator.parser.Scanner.visit(Scanner.java:466)
at com.ochafik.lang.jnaerator.parser.Scanner.visitTargettedTypeRef(Scanner.java:206)
at com.ochafik.lang.jnaerator.parser.Scanner.visitPointer(Scanner.java:216)
at com.ochafik.lang.jnaerator.parser.TypeRef$Pointer.accept(TypeRef.java:280)
at com.ochafik.lang.jnaerator.parser.Scanner.visit(Scanner.java:466)
at com.ochafik.lang.jnaerator.parser.Scanner.visitDeclaration(Scanner.java:117)
at com.ochafik.lang.jnaerator.parser.Scanner.visitArg(Scanner.java:77)
at com.ochafik.lang.jnaerator.parser.Arg.accept(Arg.java:115)
at com.ochafik.lang.jnaerator.JNATypeConversion.resolveTypeDef(JNATypeConversion.java:502)
at com.ochafik.lang.jnaerator.JNATypeConversion.resolveTypeDef(JNATypeConversion.java:477)
at com.ochafik.lang.jnaerator.JNATypeConversion.convertTypeToJNA(JNATypeConversion.java:63)
at com.ochafik.lang.jnaerator.JNADeclarationsConverter.convertVariablesDeclarationToJNA(JNADeclarationsConverter.java:598)
at com.ochafik.lang.jnaerator.JNADeclarationsConverter.convertVariablesDeclaration(JNADeclarationsConverter.java:671)
at com.ochafik.lang.jnaerator.JNADeclarationsConverter.convertStruct(JNADeclarationsConverter.java:430)
at com.ochafik.lang.jnaerator.DeclarationsConverter.outputConvertedStruct(DeclarationsConverter.java:623)
at com.ochafik.lang.jnaerator.JNADeclarationsConverter.convertStruct(JNADeclarationsConverter.java:435)
at com.ochafik.lang.jnaerator.DeclarationsConverter.outputConvertedStruct(DeclarationsConverter.java:623)
at com.ochafik.lang.jnaerator.JNADeclarationsConverter.convertStruct(JNADeclarationsConverter.java:435)
at com.ochafik.lang.jnaerator.DeclarationsConverter.outputConvertedStruct(DeclarationsConverter.java:623)
at com.ochafik.lang.jnaerator.DeclarationsConverter.convertStructs(DeclarationsConverter.java:676)
at com.ochafik.lang.jnaerator.DeclarationsConverter.fillLibraryMapping(DeclarationsConverter.java:895)
at com.ochafik.lang.jnaerator.JNADeclarationsConverter.generateLibraryFiles(JNADeclarationsConverter.java:1143)
at com.ochafik.lang.jnaerator.JNAerator.generateLibraryFiles(JNAerator.java:1474)
at com.ochafik.lang.jnaerator.JNAerator.jnaerationCore(JNAerator.java:1446)
at com.ochafik.lang.jnaerator.JNAerator.jnaerate(JNAerator.java:999)
at com.ochafik.lang.jnaerator.JNAerator$1.finished(JNAerator.java:767)
at com.ochafik.lang.jnaerator.JNAeratorCommandLineArgs$ArgsParser.parse(JNAeratorCommandLineArgs.java:148)
at com.ochafik.lang.jnaerator.JNAerator.main(JNAerator.java:224)
at com.ochafik.lang.jnaerator.JNAerator.main(JNAerator.java:197)
java.lang.NullPointerException
at com.ochafik.lang.jnaerator.JNAerator$1$2.setFinished(JNAerator.java:734)
at com.ochafik.lang.jnaerator.JNAerator.jnaerate(JNAerator.java:1047)
at com.ochafik.lang.jnaerator.JNAerator$1.finished(JNAerator.java:767)
at com.ochafik.lang.jnaerator.JNAeratorCommandLineArgs$ArgsParser.parse(JNAeratorCommandLineArgs.java:148)
at com.ochafik.lang.jnaerator.JNAerator.main(JNAerator.java:224)
at com.ochafik.lang.jnaerator.JNAerator.main(JNAerator.java:197)

ERROR: JNAeration failed !

java.lang.NullPointerException

Here the arguments used:
java -jar jnaerator-0.12-20140116.215420-36-shaded.jar -f -runtime JNA -mode Directory -preferJavac -I /home/ollive_p/sdk_vlc_include -I /usr/lib/gcc/i686-pc-cygwin/4.3.4/include -o /cygdrive/c/workspace/SMF_HEAD/leoVLC/src -package com.signalis.video.smf.vlc.binding -library libvlc /home/ollive_p/sdk_vlc_include/vlc/*.h

Same problem encountered in both cygwin and RedHat 6.2.
I managed to generate with the previous version using cygwin, but I cannot used that on RedHat because of a link issue between BridJ and glibc on RedHat, this link issue seems to not be present in the last version.

Copied from original issue: nativelibs4java/nativelibs4java#536

From @Signalis-POE on December 16, 2014 14:44

Any inputs about this issue ?

Hi There

I'm having a similar problem with openCV.
Was the issue ever resolved ?