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 ?