Skip to content

Commit

Permalink
- adds a comment to clarify method intent
Browse files Browse the repository at this point in the history
- refactors default modules replacement to avoid duplication of code
  • Loading branch information
baywet committed Jul 13, 2021
1 parent aa18172 commit 4b69a56
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions src/Kiota.Builder/Refiners/CommonLanguageRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ protected CommonLanguageRefiner(GenerationConfiguration configuration) {
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
}
public abstract void Refine(CodeNamespace generatedCode);
/// <summary>
/// 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.
/// </summary>
protected void AddSerializationModulesImport(CodeElement generatedCode) {
if(generatedCode is CodeMethod currentMethod &&
currentMethod.IsOfKind(CodeMethodKind.ClientConstructor) &&
Expand All @@ -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<CodeMethod, List<string>> 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) {
Expand Down

0 comments on commit 4b69a56

Please sign in to comment.