From 4b69a563aaa65324474a94e75540fd2b50d0290a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 13 Jul 2021 09:31:26 -0400 Subject: [PATCH] - adds a comment to clarify method intent - refactors default modules replacement to avoid duplication of code --- .../Refiners/CommonLanguageRefiner.cs | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs b/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs index 4b4eacdb9d..9d65911c15 100644 --- a/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs +++ b/src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs @@ -12,6 +12,10 @@ protected CommonLanguageRefiner(GenerationConfiguration configuration) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); } public abstract void Refine(CodeNamespace generatedCode); + /// + /// This method adds the imports for the default serializers and deserializers to the api client class. + /// It also updates the module names to replace the fully qualified class name by the class name without the namespace. + /// protected void AddSerializationModulesImport(CodeElement generatedCode) { if(generatedCode is CodeMethod currentMethod && currentMethod.IsOfKind(CodeMethodKind.ClientConstructor) && @@ -32,27 +36,29 @@ currentMethod.Parent is CodeClass currentClass && CrawlTree(generatedCode, AddSerializationModulesImport); } public void ReplaceDefaultSerializationModules(CodeElement generatedCode, params string[] moduleNames) { - if(generatedCode is CodeMethod currentMethod && - currentMethod.IsOfKind(CodeMethodKind.ClientConstructor) && - currentMethod.SerializerModules.Count == 1 && - currentMethod.SerializerModules.Any(x => "Microsoft.Kiota.Serialization.Json.JsonSerializationWriterFactory".Equals(x, StringComparison.OrdinalIgnoreCase))) { - currentMethod.SerializerModules.Clear(); - currentMethod.SerializerModules.AddRange(moduleNames); + if(ReplaceSerializationModules(generatedCode, x => x.SerializerModules, "Microsoft.Kiota.Serialization.Json.JsonSerializationWriterFactory", moduleNames)) return; - } CrawlTree(generatedCode, (x) => ReplaceDefaultSerializationModules(x, moduleNames)); } public void ReplaceDefaultDeserializationModules(CodeElement generatedCode, params string[] moduleNames) { - if(generatedCode is CodeMethod currentMethod && - currentMethod.IsOfKind(CodeMethodKind.ClientConstructor) && - currentMethod.DeserializerModules.Count == 1 && - currentMethod.DeserializerModules.Any(x => "Microsoft.Kiota.Serialization.Json.JsonParseNodeFactory".Equals(x, StringComparison.OrdinalIgnoreCase))) { - currentMethod.DeserializerModules.Clear(); - currentMethod.DeserializerModules.AddRange(moduleNames); + if(ReplaceSerializationModules(generatedCode, x => x.DeserializerModules, "Microsoft.Kiota.Serialization.Json.JsonParseNodeFactory", moduleNames)) return; - } CrawlTree(generatedCode, (x) => ReplaceDefaultDeserializationModules(x, moduleNames)); } + private bool ReplaceSerializationModules(CodeElement generatedCode, Func> propertyGetter, string initialName, params string[] moduleNames) { + if(generatedCode is CodeMethod currentMethod && + currentMethod.IsOfKind(CodeMethodKind.ClientConstructor)) { + var modules = propertyGetter.Invoke(currentMethod); + if(modules.Count == 1 && + modules.Any(x => initialName.Equals(x, StringComparison.OrdinalIgnoreCase))) { + modules.Clear(); + modules.AddRange(moduleNames); + return true; + } + } + + return false; + } internal const string GetterPrefix = "get-"; internal const string SetterPrefix = "set-"; protected static void CorrectCoreTypesForBackingStoreUsings(CodeElement currentElement, string storeNamespace) {