Scott Michel patch #1049496 to fix typesafe and proper Java enums with directors.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6481 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
452b7bedc5
commit
09ed1c1471
3 changed files with 20 additions and 4 deletions
|
|
@ -12,7 +12,7 @@
|
||||||
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
|
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
|
||||||
%typemap(out) enum SWIGTYPE %{ $result = (jint)$1; %}
|
%typemap(out) enum SWIGTYPE %{ $result = (jint)$1; %}
|
||||||
|
|
||||||
%typemap(directorin, descriptor="I") enum SWIGTYPE "$input = (jint) $1;"
|
%typemap(directorin, descriptor="L$packagepath/$javaclassname") enum SWIGTYPE "$input = (jint) $1;"
|
||||||
%typemap(javadirectorin) enum SWIGTYPE "$javaclassname.swigToEnum($jniinput)"
|
%typemap(javadirectorin) enum SWIGTYPE "$javaclassname.swigToEnum($jniinput)"
|
||||||
%typemap(javadirectorout) enum SWIGTYPE "($javacall).swigValue()"
|
%typemap(javadirectorout) enum SWIGTYPE "($javacall).swigValue()"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
|
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
|
||||||
%typemap(out) enum SWIGTYPE %{ $result = (jint)$1; %}
|
%typemap(out) enum SWIGTYPE %{ $result = (jint)$1; %}
|
||||||
|
|
||||||
%typemap(directorin, descriptor="I") enum SWIGTYPE "$input = (jint) $1;"
|
%typemap(directorin, descriptor="L$packagepath/$javaclassname;") enum SWIGTYPE "$input = (jint) $1;"
|
||||||
%typemap(javadirectorin) enum SWIGTYPE "$javaclassname.swigToEnum($jniinput)"
|
%typemap(javadirectorin) enum SWIGTYPE "$javaclassname.swigToEnum($jniinput)"
|
||||||
%typemap(javadirectorout) enum SWIGTYPE "($javacall).swigValue()"
|
%typemap(javadirectorout) enum SWIGTYPE "($javacall).swigValue()"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2723,11 +2723,26 @@ class JAVA : public Language {
|
||||||
*
|
*
|
||||||
* (scottm) There is probably a SWIG function to do this, but I
|
* (scottm) There is probably a SWIG function to do this, but I
|
||||||
* haven't found it yet.
|
* haven't found it yet.
|
||||||
|
* (william) Rewriting this area based on substituteClassname()
|
||||||
|
* should work - using getProxyName() and getEnumName().
|
||||||
* --------------------------------------------------------------- */
|
* --------------------------------------------------------------- */
|
||||||
|
|
||||||
Node *canonicalizeType(Node *n, String *classtype) {
|
Node *canonicalizeType(Node *n, String *classtype) {
|
||||||
String *reduced_type = SwigType_typedef_resolve_all(classtype);
|
String *reduced_type = SwigType_typedef_resolve_all(classtype);
|
||||||
String *base_type = SwigType_base(reduced_type);
|
String *base_type;
|
||||||
|
|
||||||
|
if (Strncmp(reduced_type, "enum ", 5)) {
|
||||||
|
/* Not an enum, most likely branch */
|
||||||
|
base_type = SwigType_base(reduced_type);
|
||||||
|
} else {
|
||||||
|
/* Enum handling code: Swig_typedef_resolve_all() will prefix an
|
||||||
|
* enumerated type with "enum ", leading to all kinds of headaches
|
||||||
|
* when above code is called. Need to call Swig_symbol_clookup
|
||||||
|
* with the unadorned enum name.
|
||||||
|
*/
|
||||||
|
base_type = classtype;
|
||||||
|
}
|
||||||
|
|
||||||
Node *classnode = Swig_symbol_clookup(base_type, Getattr(n, "sym:symtab"));
|
Node *classnode = Swig_symbol_clookup(base_type, Getattr(n, "sym:symtab"));
|
||||||
|
|
||||||
if (classnode != NULL) {
|
if (classnode != NULL) {
|
||||||
|
|
@ -2753,8 +2768,9 @@ class JAVA : public Language {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Delete(reduced_type);
|
if (base_type != classtype)
|
||||||
Delete(base_type);
|
Delete(base_type);
|
||||||
|
Delete(reduced_type);
|
||||||
|
|
||||||
return classnode;
|
return classnode;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue