From b75004cd20422ec8031a1fb9f5d5e633607fb0de Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Thu, 13 Oct 2011 15:58:39 +0200 Subject: [PATCH] Can make a fresh copy by calling Instantiate(null) --- .../CS2JTemplate/TranslationTemplate.cs | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs index 6828cca..b693b05 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs @@ -58,7 +58,7 @@ namespace Twiglet.CS2J.Translator.TypeRep public static string SubstituteInType(String type, Dictionary argMap) { - if (String.IsNullOrEmpty(type)) + if (String.IsNullOrEmpty(type) || argMap == null) return type; TypeVarMapper mapper = new TypeVarMapper(argMap); @@ -2139,6 +2139,7 @@ namespace Twiglet.CS2J.Translator.TypeRep Variant = copyFrom.Variant; BoxedJava = copyFrom.BoxedJava; HasBoxedRep = copyFrom.HasBoxedRep; + Tree = copyFrom.Tree; } protected TypeRepTemplate(string tName, string[] tParams, string[] usePath, AliasRepTemplate[] aliases, string[] imports, string javaTemplate) @@ -2214,10 +2215,12 @@ namespace Twiglet.CS2J.Translator.TypeRep Inherits[i] = TemplateUtilities.SubstituteInType(Inherits[i],args); } } - InstantiatedTypes = new TypeRepTemplate[args.Count]; - for (int i = 0; i < TypeParams.Length; i++) - { - InstantiatedTypes[i] = args[TypeParams[i]]; + InstantiatedTypes = new TypeRepTemplate[InstantiatedTypes.Length]; + if (args != null) { + for (int i = 0; i < TypeParams.Length; i++) + { + InstantiatedTypes[i] = args[TypeParams[i]]; + } } BoxedJava = TemplateUtilities.SubstituteInType(BoxedJava,args); base.Apply(args); @@ -2874,7 +2877,9 @@ namespace Twiglet.CS2J.Translator.TypeRep public override TypeRepTemplate Instantiate(ICollection args) { EnumRepTemplate copy = new EnumRepTemplate(this); - copy.Apply(mkTypeMap(args)); + if (args != null && args.Count != 0) { + copy.Apply(mkTypeMap(args)); + } return copy; } #region Equality @@ -2955,6 +2960,19 @@ namespace Twiglet.CS2J.Translator.TypeRep } } + public override ResolveResult Resolve(String name, IList args, DirectoryHT AppEnv) + { + + if ("Invoke" == name && matchParamsToArgs(Invoke.Params, Invoke.ParamArray, args, AppEnv)) + { + ResolveResult res = new ResolveResult(); + res.Result = Invoke; + res.ResultType = BuildType(Invoke.Return, AppEnv); + return res; + } + return base.Resolve(name, args, AppEnv); + } + public override void Apply(Dictionary args) { Invoke.Apply(args); @@ -2963,7 +2981,9 @@ namespace Twiglet.CS2J.Translator.TypeRep public override TypeRepTemplate Instantiate(ICollection args) { DelegateRepTemplate copy = new DelegateRepTemplate(this); - copy.Apply(mkTypeMap(args)); + if (args != null && args.Count != 0) { + copy.Apply(mkTypeMap(args)); + } return copy; } @@ -3333,7 +3353,9 @@ namespace Twiglet.CS2J.Translator.TypeRep public override TypeRepTemplate Instantiate(ICollection args) { InterfaceRepTemplate copy = new InterfaceRepTemplate(this); - copy.Apply(mkTypeMap(args)); + if (args != null && args.Count != 0) { + copy.Apply(mkTypeMap(args)); + } return copy; } @@ -3645,7 +3667,9 @@ namespace Twiglet.CS2J.Translator.TypeRep public override TypeRepTemplate Instantiate(ICollection args) { ClassRepTemplate copy = new ClassRepTemplate(this); - copy.Apply(copy.mkTypeMap(args)); + if (args != null && args.Count != 0) { + copy.Apply(mkTypeMap(args)); + } return copy; }