Fix issue of package directory not being created when using jniclasspackage pragma. General cleanup of implementation.

This commit is contained in:
Brant K. Kyser 2013-01-12 00:50:23 -06:00 • committed by William S Fulton
commit 862d27f05a

View file

@ -160,6 +160,30 @@ public:
director_language = 1; director_language = 1;
} }
/* -----------------------------------------------------------------------------
* constructIntermediateClassName()
*
* Construct the fully qualified name of the intermidiate class and set
* the full_imclass_name attribute accordingly.
* ----------------------------------------------------------------------------- */
void constructIntermediateClassName(Node *n) {
String *nspace = Getattr(n, "sym:nspace");
if (imclass_class_package && package)
full_imclass_name = NewStringf("%s.%s.%s", package, imclass_class_package, imclass_name);
else if (package && nspace)
full_imclass_name = NewStringf("%s.%s", package, imclass_name);
else if (imclass_class_package)
full_imclass_name = NewStringf("%s.%s", imclass_class_package, imclass_name);
else
full_imclass_name = NewStringf("%s", imclass_name);
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);
}
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* getProxyName() * getProxyName()
* *
@ -365,7 +389,7 @@ public:
proxy_class_code = NewString(""); proxy_class_code = NewString("");
module_class_constants_code = NewString(""); module_class_constants_code = NewString("");
imclass_baseclass = NewString(""); imclass_baseclass = NewString("");
imclass_class_package = NewString(""); imclass_class_package = NULL;
imclass_interfaces = NewString(""); imclass_interfaces = NewString("");
imclass_class_modifiers = NewString(""); imclass_class_modifiers = NewString("");
module_class_code = NewString(""); module_class_code = NewString("");
@ -446,7 +470,7 @@ public:
} }
// Generate the intermediary class // Generate the intermediary class
{ {
String *filen = NewStringf("%s%s/%s.java", SWIG_output_directory(), imclass_class_package, imclass_name); String *filen = NewStringf("%s%s.java", outputDirectory(imclass_class_package), imclass_name);
File *f_im = NewFile(filen, "w", SWIG_output_files()); File *f_im = NewFile(filen, "w", SWIG_output_files());
if (!f_im) { if (!f_im) {
FileErrorDisplay(filen); FileErrorDisplay(filen);
@ -459,7 +483,9 @@ public:
// Start writing out the intermediary class file // Start writing out the intermediary class file
emitBanner(f_im); emitBanner(f_im);
if (Len(imclass_class_package)) if (imclass_class_package && package)
Printf(f_im, "package %s.%s;", package, imclass_class_package);
else if (imclass_class_package)
Printf(f_im, "package %s;", imclass_class_package); Printf(f_im, "package %s;", imclass_class_package);
else if (package) else if (package)
Printf(f_im, "package %s;\n", package); Printf(f_im, "package %s;\n", package);
@ -1182,19 +1208,9 @@ public:
String *nspace = Getattr(n, "sym:nspace"); // NSpace/getNSpace() only works during Language::enumDeclaration call String *nspace = Getattr(n, "sym:nspace"); // NSpace/getNSpace() only works during Language::enumDeclaration call
if (proxy_flag && !is_wrapping_class()) { if (proxy_flag && !is_wrapping_class()) {
// Global enums / enums in a namespace // Global enums / enums in a namespace
assert(!full_imclass_name); assert(!full_imclass_name);
constructIntermediateClassName(n);
if (!nspace) {
full_imclass_name = NewStringf("%s", imclass_name);
} else {
if (package) {
full_imclass_name = NewStringf("%s.%s", package, imclass_name);
} else {
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);
}
}
} }
enum_code = NewString(""); enum_code = NewString("");
@ -1899,38 +1915,35 @@ public:
if (proxy_flag) { if (proxy_flag) {
proxy_class_name = NewString(Getattr(n, "sym:name")); proxy_class_name = NewString(Getattr(n, "sym:name"));
String *nspace = getNSpace(); String *nspace = getNSpace();
constructIntermediateClassName(n);
if (!nspace) { if (!nspace) {
full_proxy_class_name = NewStringf("%s", proxy_class_name); full_proxy_class_name = NewStringf("%s", proxy_class_name);
full_imclass_name = NewStringf("%s", imclass_name);
if (Cmp(proxy_class_name, imclass_name) == 0) {
Printf(stderr, "Class name cannot be equal to intermediary class name: %s\n", proxy_class_name);
SWIG_exit(EXIT_FAILURE);
}
if (Cmp(proxy_class_name, module_class_name) == 0) { if (Cmp(proxy_class_name, imclass_name) == 0) {
Printf(stderr, "Class name cannot be equal to module class name: %s\n", proxy_class_name); Printf(stderr, "Class name cannot be equal to intermediary class name: %s\n", proxy_class_name);
SWIG_exit(EXIT_FAILURE); SWIG_exit(EXIT_FAILURE);
} }
if (Cmp(proxy_class_name, module_class_name) == 0) {
Printf(stderr, "Class name cannot be equal to module class name: %s\n", proxy_class_name);
SWIG_exit(EXIT_FAILURE);
}
} else { } else {
if (package) { if (package) {
full_proxy_class_name = NewStringf("%s.%s.%s", package, nspace, proxy_class_name); full_proxy_class_name = NewStringf("%s.%s.%s", package, nspace, proxy_class_name);
full_imclass_name = NewStringf("%s.%s", package, imclass_name); }
} else {
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);
}
} }
if (!addSymbol(proxy_class_name, n, nspace)) if (!addSymbol(proxy_class_name, n, nspace))
return SWIG_ERROR; return SWIG_ERROR;
String *output_directory = outputDirectory(nspace); String *output_directory = outputDirectory(nspace);
String *filen = NewStringf("%s%s.java", output_directory, proxy_class_name); String *filen = NewStringf("%s%s.java", output_directory, proxy_class_name);
f_proxy = NewFile(filen, "w", SWIG_output_files()); f_proxy = NewFile(filen, "w", SWIG_output_files());
if (!f_proxy) { if (!f_proxy) {
FileErrorDisplay(filen); FileErrorDisplay(filen);
SWIG_exit(EXIT_FAILURE); SWIG_exit(EXIT_FAILURE);
} }
Append(filenames_list, Copy(filen)); Append(filenames_list, Copy(filen));
Delete(filen); Delete(filen);