Tidy up last few commits for Java new jniclasspackage pragma
This commit is contained in:
parent
36ce54da8d
commit
bd3e93ae61
4 changed files with 29 additions and 6 deletions
|
|
@ -5,6 +5,11 @@ See the RELEASENOTES file for a summary of changes in each release.
|
|||
Version 2.0.10 (in progress)
|
||||
============================
|
||||
|
||||
2013-01-18: Brant Kyser
|
||||
[Java] Patch #15 - Allow the use of the nspace feature without the -package commandline option.
|
||||
This works as long and the new jniclasspackage pragma is used to place the JNI intermediate class
|
||||
into a package and the nspace feature is used to place all exposed types into a package.
|
||||
|
||||
2013-01-15: wsfulton
|
||||
Fix Visual Studio examples to work when SWIG is unzipped into a directory containing spaces.
|
||||
|
||||
|
|
|
|||
|
|
@ -1924,7 +1924,21 @@ Note that it only works for classes, structs, unions and enums declared within a
|
|||
When the nspace feature is used, the C++ namespaces are converted into Java packages of the same name.
|
||||
Proxy classes are thus declared within a package and this proxy makes numerous calls to the JNI intermediary class which is declared in the unnamed package by default.
|
||||
As Java does not support types declared in a named package accessing types declared in an unnamed package, the <tt>-package</tt> commandline option described earlier generally should be used to provide a parent package.
|
||||
So if SWIG is run using the <tt>-package com.myco</tt> option, a wrapped class, <tt>MyWorld::Material::Color</tt>, can then be accessed as <tt>com.myco.MyWorld.Material.Color</tt>. If you don't specify a package, you will get a warning 186. If it is undesirable to have a single top level package, the nspace feature may be used without the <tt>-package<tt> commandline option (and the resulting warning ignored) if all of the types exposed using Swig are placed in a package using the nspace feature and the jniclasspackage pragma is used to specify a package for the JNI intermediate class.
|
||||
So if SWIG is run using the <tt>-package com.myco</tt> option, a wrapped class, <tt>MyWorld::Material::Color</tt>, can then be accessed as <tt>com.myco.MyWorld.Material.Color</tt>.
|
||||
If you don't specify a package, you will get the following warning:
|
||||
</p>
|
||||
|
||||
<div class="shell">
|
||||
<pre>
|
||||
example.i:16: Warning 826: The nspace feature is used on 'MyWorld::Material::Color' without -package. The generated code
|
||||
may not compile as Java does not support types declared in a named package accessing types declared in an unnamed package.
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
If it is undesirable to have a single top level package, the nspace feature may be used without the <tt>-package</tt> commandline option
|
||||
(and the resulting warning ignored) if all of the types exposed using SWIG are placed in a package using the nspace feature and the
|
||||
'jniclasspackage' pragma is used to specify a package for the JNI intermediary class.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
|||
|
|
@ -551,6 +551,8 @@ example.i(4) : Syntax error in input.
|
|||
<li>822. Covariant return types not supported in Java. Proxy method will return <em>basetype</em> (Java).
|
||||
<li>823. No javaconstruct typemap defined for <em>type</em> (Java).
|
||||
<li>824. Missing JNI descriptor in directorin typemap defined for <em>type</em> (Java).
|
||||
<li>825. "directorconnect" attribute missing in <em>type</em> "javaconstruct" typemap. (Java).
|
||||
<li>826. The nspace feature is used on '<em>type</em>' without -package. The generated code may not compile as Java does not support types declared in a named package accessing types declared in an unnamed package. (Java).
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class JAVA:public Language {
|
|||
String *imclass_imports; //intermediary class imports from %pragma
|
||||
String *module_imports; //module imports from %pragma
|
||||
String *imclass_baseclass; //inheritance for intermediary class class from %pragma
|
||||
String *imclass_package; //package in which to generate the jni class
|
||||
String *imclass_package; //package in which to generate the intermediary class
|
||||
String *module_baseclass; //inheritance for module class from %pragma
|
||||
String *imclass_interfaces; //interfaces for intermediary class class from %pragma
|
||||
String *module_interfaces; //interfaces for module class from %pragma
|
||||
|
|
@ -180,7 +180,9 @@ public:
|
|||
|
||||
if (nspace && !package) {
|
||||
String *name = Getattr(n, "name") ? Getattr(n, "name") : NewString("<unnamed>");
|
||||
Swig_warning(WARN_JAVA_NSPACE_WITHOUT_PACKAGE, Getfile(n), Getline(n), "The nspace feature is used on '%s' without a package is specified with -package - This may result in generated code that does not compile as Java does not support types declared in a named package accessing types declared in an unnamed package.\n", name);
|
||||
Swig_warning(WARN_JAVA_NSPACE_WITHOUT_PACKAGE, Getfile(n), Getline(n),
|
||||
"The nspace feature is used on '%s' without -package. "
|
||||
"The generated code may not compile as Java does not support types declared in a named package accessing types declared in an unnamed package.\n", name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1595,8 +1597,8 @@ public:
|
|||
* pragmaDirective()
|
||||
*
|
||||
* Valid Pragmas:
|
||||
* jniclassbase - base (extends) for the intermediary
|
||||
* jniclasspackage - package in which to generate the jni class
|
||||
* jniclassbase - base (extends) for the intermediary class
|
||||
* jniclasspackage - package in which to generate the intermediary class
|
||||
* jniclassclassmodifiers - class modifiers for the intermediary class
|
||||
* jniclasscode - text (java code) is copied verbatim to the intermediary class
|
||||
* jniclassimports - import statements for the intermediary class
|
||||
|
|
@ -1937,7 +1939,7 @@ public:
|
|||
}
|
||||
|
||||
if (!addSymbol(proxy_class_name, n, nspace))
|
||||
return SWIG_ERROR;
|
||||
return SWIG_ERROR;
|
||||
|
||||
String *output_directory = outputDirectory(nspace);
|
||||
String *filen = NewStringf("%s%s.java", output_directory, proxy_class_name);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue