# Services to generate extern class `in "Java"`
module code_generator
-intrude import types
+intrude import model
class CodeGenerator
var file_out: OFStream
var java_class: JavaClass
var nb_params: Int
- var module_name: String
- fun code_warehouse: CodeWarehouse do return once new CodeWarehouse
+ var module_name: nullable String = null
init (file_name: String, jclass: JavaClass, with_attributes, comment: Bool)
do
file_out = new OFStream.open(file_name)
- module_name = file_name.substring(0, file_name.search(".nit").from)
+
+ 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)
+
+ # Otherwise, it may be anything so do not declare a module
+ end
+
self.java_class = jclass
self.with_attributes = with_attributes
self.comment_unknown_types = comment
end
file_out.write(gen_licence)
- file_out.write("module {module_name}\n")
+
+ var module_name = module_name
+ if module_name != null then file_out.write "module {module_name}\n"
+
+ file_out.write("\n")
file_out.write(imports.join(""))
file_out.write("\n")
file_out.write(class_content.join(""))
fun gen_licence: String
do
- return """# This file is part of NIT (http://www.nitlanguage.org).
-#
-# Copyright [Year] [Author name] <Author e-mail>
+ return """
+# This file is part of NIT (http://www.nitlanguage.org).
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# See the License for the specific language governing permissions and
# limitations under the License.
-# This code has been generated using `javap`
+# This code has been generated using `jwrapper`
"""
end
end
end
-# Contains raw code mostly used to copy collections
-class CodeWarehouse
-
- private fun create_imports(nit_type: NitType, is_param: Bool): String
- do
- var imports = ""
- var ntype = nit_type.to_s
- var gen_type = nit_type.generic_params.join(", ")
-
- if not is_param then
- if nit_type.is_map then
- imports = """ import {{{ntype}}}, {{{ntype}}}.[]="""
- else
- imports = """ import {{{ntype}}}, {{{ntype}}}.add"""
- end
- else if nit_type.id == "Array" then
- imports = """ import {{{ntype}}}, {{{ntype}}}.length, {{{ntype}}}.[]"""
- else if nit_type.is_map then
- imports = """ import {{{ntype}}}.iterator, Iterator[{{{gen_type}}}].is_ok, Iterator[{{{gen_type}}}].next, Iterator[{{{gen_type}}}].item, Iterator[{{{gen_type}}}].key"""
- else
- imports = """ import {{{ntype}}}.iterator, Iterator[{{{gen_type}}}].is_ok, Iterator[{{{gen_type}}}].next, Iterator[{{{gen_type}}}].item"""
- end
-
- return imports
- end
-end
-
redef class String
# Convert the Java method name `self` to the Nit style
#
# * Add suffix `=` to setters
fun to_nit_method_name: String
do
- var name
- if self.has_prefix("Get") then
- name = self.substring_from(3)
- else if self.has_prefix("Set") then
- name = self.substring_from(3)
- name += "="
- else
- name = self
+ var name = self.to_snake_case
+ if name.has_prefix("get_") then
+ name = name.substring_from(4)
+ else if name.has_prefix("set_") then
+ name = name.substring_from(4) + "="
end
- return name.to_snake_case
+ return name
end
end