X-Git-Url: http://nitlanguage.org diff --git a/src/ffi/extra_java_files.nit b/src/ffi/extra_java_files.nit index 67a5f9d..c355441 100644 --- a/src/ffi/extra_java_files.nit +++ b/src/ffi/extra_java_files.nit @@ -28,8 +28,8 @@ redef class ToolContext end redef class MModule - # Extra Java files to compile with the project - private var extra_java_files: nullable Array[JavaFile] = null + # Extra Java files to compile with the module + private var extra_java_files: nullable Array[ExtraJavaFile] = null end private class JavaExtraFilesPhase @@ -45,13 +45,13 @@ private class JavaExtraFilesPhase var modelbuilder = toolcontext.modelbuilder if not nmoduledecl isa AModuledecl then - modelbuilder.error(nat, "Syntax error: only the declaration of modules may use \"{annot_name}\".") + modelbuilder.error(nat, "Syntax Error: only the declaration of modules may use `{annot_name}`.") return end var args = nat.n_args if args.is_empty then - modelbuilder.error(nat, "Syntax error: \"{annot_name}\" expects at least one argument.") + modelbuilder.error(nat, "Syntax Error: `{annot_name}` expects at least one argument.") return end @@ -60,28 +60,30 @@ private class JavaExtraFilesPhase var mmodule = nmodule.mmodule.as(not null) var java_files = mmodule.extra_java_files if java_files == null then - java_files = new Array[JavaFile] + java_files = new Array[ExtraJavaFile] mmodule.extra_java_files = java_files end - var format_error = "Syntax error: \"{annot_name}\" expects its arguments to be paths to java files." + var format_error = "Syntax Error: `{annot_name}` expects its arguments to be paths to java files." for arg in args do - var path = arg.as_string - if path == null then + var name = arg.as_string + if name == null or name.is_empty then modelbuilder.error(arg, format_error) return end + var path = name.split(".").last + ".java" + # Append specified path to directory of the Nit source file var source_file = nat.location.file if source_file != null then path = "{source_file.filename.dirname}/{path}" if not path.file_exists then - modelbuilder.error(nat, "FFI with Java error: file \"{path}\" not found.") + modelbuilder.error(nat, "FFI with Java Error: file `{path}` not found.") continue end - var file = new JavaFile(path) + var file = new ExtraJavaFile(name, path) mmodule.ffi_files.add file java_files.add file end @@ -93,11 +95,28 @@ redef class JavaLanguage do super - # also copy over the java files + # Also copy over the extra Java files var extra_java_files = mmodule.extra_java_files if extra_java_files != null then for file in extra_java_files do - var path = file.filename - path.file_copy_to("{compdir}/{path.basename("")}") + + var dir = compdir / file.filename.dirname + dir.mkdir + + file.src_path.file_copy_to(compdir/file.filename) end end end + +# User supplied Java file to include with the app for use from the FFI +class ExtraJavaFile + super JavaFile + + autoinit full_name, src_path + + redef var full_name + + # Path to the original user file + var src_path: String + + redef fun filename do return full_name.replace(".", "/") + ".java" +end