From 092290e4f28363bbc5928dc6876b51930ca9c196 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Thu, 23 Jul 2015 09:11:22 -0400 Subject: [PATCH] contrib/jwrapper: intro a service to avoid property name conflicts MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- contrib/jwrapper/src/code_generator.nit | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/contrib/jwrapper/src/code_generator.nit b/contrib/jwrapper/src/code_generator.nit index 2d6012c..10c5175 100644 --- a/contrib/jwrapper/src/code_generator.nit +++ b/contrib/jwrapper/src/code_generator.nit @@ -181,6 +181,7 @@ class CodeGenerator # Method identifier var method_id = nmethod_id.to_nit_method_name + method_id = java_class.nit_name_for(method_id, jparam_list, java_class.methods[jmethod_id].length > 1) var nit_signature = new Array[String] nit_signature.add "\tfun {method_id}" @@ -275,3 +276,33 @@ redef class String return name end end + +redef class JavaClass + # Property names used in this class + private var used_name = new HashSet[String] + + # Get an available property name for the Java property with `name` and parameters + # + # If `use_parameters_name` then expect that there will be conflicts, + # so use the types of `parameters` to build the name. + private fun nit_name_for(name: String, parameters: Array[JavaType], use_parameters_name: Bool): String + do + # Append the name of each parameter + if use_parameters_name then + for param in parameters do + name += "_" + param.id + end + end + + # As a last resort, append numbers to the name + var base_name = name + var count = 1 + while used_name.has(name) do + name = base_name + count.to_s + count += 1 + end + + used_name.add name + return name + end +end -- 1.7.9.5