# This file is part of NIT (http://www.nitlanguage.org).
#
# Copyright 2014 Frédéric Vachon <fredvac@gmail.com>
+# Copyright 2015 Alexis Laferrière <alexis.laf@xymus.net>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
class CodeGenerator
- var with_attributes: Bool
- var comment_unknown_types: Bool
- var file_out: FileWriter
+ # Path to the output file
+ var file_name: String
+
+ # Model of Java class being wrapped
var java_class: JavaClass
- var nb_params: Int
- var module_name: nullable String = null
- init (file_name: String, jclass: JavaClass, with_attributes, comment: Bool)
- do
- file_out = new FileWriter.open(file_name)
+ # Comment out methods with unknown (unwrapped) types
+ var comment_unknown_types: Bool
- var nit_ext = ".nit"
- if file_name.has_suffix(nit_ext) then
- # Output file ends with .nit, we expect it to be a valid name
- module_name = file_name.strip_extension(nit_ext)
+ # Generate stub classes for unknown types used in the generated module
+ var stub_for_unknown_types: Bool
- # Otherwise, it may be anything so do not declare a module
- end
+ # Output file
+ var file_out: Writer = new FileWriter.open(file_name) is lazy, writable
- self.java_class = jclass
- self.with_attributes = with_attributes
- self.comment_unknown_types = comment
+ # Name of the Nit module to generate
+ var module_name: nullable String is lazy do
+ if file_name.file_extension == "nit" then
+ # Output file ends with .nit, we expect it to be a valid name
+ return file_name.basename(".nit")
+ else return null
end
+ # Generate the Nit module into `file_out`
fun generate
do
var jclass = self.java_class
class_content.add("\nend\n")
var wrappers = new Array[String]
- for jtype in jclass.unknown_types do
- if jtype == jclass.class_type then continue
- wrappers.add("\n")
- wrappers.add(gen_unknown_class_header(jtype))
+ if stub_for_unknown_types then
+ for jtype in jclass.unknown_types do
+ if jtype == jclass.class_type then continue
+ wrappers.add("\n")
+ wrappers.add(gen_unknown_class_header(jtype))
+ end
end
var imports = new Array[String]
imports.add("import android::{import_}\n")
end
- file_out.write(gen_licence)
+ file_out.write license
var module_name = module_name
if module_name != null then file_out.write "module {module_name}\n"
file_out.write(wrappers.join)
end
- fun gen_licence: String
- do
- return """
+ # License for the header of the generated Nit module
+ var license = """
# This file is part of NIT (http://www.nitlanguage.org).
#
# Licensed under the Apache License, Version 2.0 (the "License");
# limitations under the License.
# This code has been generated using `jwrapper`
-"""
- end
+""" is writable
fun gen_class_header(jtype: JavaType): String
do
if jparam.is_wrapped then
java_class.imports.add nit_type.mod.as(not null)
else
+ java_class.unknown_types.add jparam
if comment_unknown_types then
comment = "#"
else
nit_type = jparam.extern_name
- java_class.unknown_types.add(jparam)
end
end
end
if jreturn_type.is_wrapped then
java_class.imports.add return_type.mod.as(not null)
else
+ java_class.unknown_types.add jreturn_type
if comment_unknown_types then
comment = "#"
else
return_type = jreturn_type.extern_name
- java_class.unknown_types.add(jreturn_type)
end
end
end