From 4aac3dd8d92e0356ada776ce22664e0c09d71c70 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Sun, 19 Jul 2015 23:34:36 -0400 Subject: [PATCH] contrib/jwrapper: avoid Nit keywords and mangle generated method names 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 | 27 ++++++++++++++++++++++++++- contrib/jwrapper/src/model.nit | 2 ++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/contrib/jwrapper/src/code_generator.nit b/contrib/jwrapper/src/code_generator.nit index 6ea8974..0520c23 100644 --- a/contrib/jwrapper/src/code_generator.nit +++ b/contrib/jwrapper/src/code_generator.nit @@ -232,7 +232,19 @@ class CodeGenerator end end +redef class Sys + # List of Nit keywords + # + # These may also be keywords in Java, but there they would be used capitalized. + private var nit_keywords: Array[String] = ["abort", "abstract", "and", "assert", + "break", "class", "continue", "do", "else", "end", "enum", "extern", "implies", + "import", "init", "interface", "intrude", "if", "in", "is", "isa", "for", "label", + "loop", "module", "new", "not", "null", "nullable", "or", "package", "private", + "protected", "public", "return", "self", "super", "then", "type", "var", "while"] +end + redef class String + # Convert the Java method name `self` to the Nit style # # * Converts to snake case @@ -244,9 +256,22 @@ redef class String if name.has_prefix("get_") then name = name.substring_from(4) else if name.has_prefix("set_") then - name = name.substring_from(4) + "=" + name = name.substring_from(4) + if nit_keywords.has(name) then name += "_" + name += "=" end + # Strip the '_' prefix + while name.has_prefix("_") do name = name.substring(1, name.length-1) + + # Escape Nit keywords + if nit_keywords.has(name) then name += "_" + + # If the name starts by something other than a letter, prefix with `java_` + if not name.chars.first.is_letter then name = "java_" + name + + name = name.replace("$", "_") + return name end end diff --git a/contrib/jwrapper/src/model.nit b/contrib/jwrapper/src/model.nit index 5dcd96d..4248b42 100644 --- a/contrib/jwrapper/src/model.nit +++ b/contrib/jwrapper/src/model.nit @@ -100,6 +100,8 @@ class JavaType name = "Java" + extern_class_name.join end + name = name.replace("-", "_") + var nit_type = new NitType(name) nit_type.is_complete = false return nit_type -- 1.7.9.5