diff --git a/CSharpTranslator/antlr3/cs2jTest/TestDLLs/Various.cs b/CSharpTranslator/antlr3/cs2jTest/TestDLLs/Various.cs index 1da0c7b..977066d 100644 --- a/CSharpTranslator/antlr3/cs2jTest/TestDLLs/Various.cs +++ b/CSharpTranslator/antlr3/cs2jTest/TestDLLs/Various.cs @@ -22,6 +22,27 @@ namespace cs2jTest.Various.Features set { _testWOProperty = value;} } + public static explicit operator Various(int i) + { + return new Various(); + } + + public static implicit operator Various(string i) + { + return new Various(); + } + + public static explicit operator bool(Various v) + { + return true; + } + + public static implicit operator string(Various v) + { + return "Various"; + } + + } } diff --git a/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs b/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs index 05db088..d8589c5 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs +++ b/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs @@ -513,9 +513,22 @@ namespace RusticiSoftware.Translator.CLR { } - // TODO: fix cast java + public override string[] mkImports() { + if (From == null || To == null) { + return null; + } + else { + return new string[] {"CS2JNet." + From.Substring(0, From.LastIndexOf('.'))}; + } + } + public override string mkJava() { - return "/* FIXME Cast " + From + " to " + To + "*/"; + if (From == null || To == null) { + return null; + } + else { + return From.Substring(From.LastIndexOf('.') + 1) + ".__cast_" + To.Replace('.','_') + "(${expr})"; + } } #region Equality @@ -1356,7 +1369,6 @@ namespace RusticiSoftware.Translator.CLR } } - // Cast here? or in InterfaceRepT? private List _casts = null; [XmlArrayItem("Cast")] public List Casts { diff --git a/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs b/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs index b69d666..fbf5f49 100644 --- a/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs +++ b/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs @@ -157,6 +157,16 @@ namespace cs2j.Template.Utils fieldRep.Type = TypeHelper.buildTypeName(f.FieldType); klass.Fields.Add(fieldRep); } + // Grab Casts + foreach (MethodInfo m in t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static )) { + if (m.IsSpecialName && (m.Name == "op_Explicit" || m.Name == "op_Implicit")) { + CastRepTemplate cast = new CastRepTemplate(); + cast.To = TypeHelper.buildTypeName(m.ReturnType); + cast.From = TypeHelper.buildTypeName(m.GetParameters()[0].ParameterType); + klass.Casts.Add(cast); + } + + } }