diff --git a/tools/class-parse/Program.cs b/tools/class-parse/Program.cs index 5c21d5588..bf3b2f178 100644 --- a/tools/class-parse/Program.cs +++ b/tools/class-parse/Program.cs @@ -8,6 +8,8 @@ using Mono.Options; using Xamarin.Android.Tools.Bytecode; +using System.Text.Json; +using System.Text.Json.Serialization; namespace Xamarin.Android.Tools { @@ -159,6 +161,32 @@ static void DumpClassFile (ClassFile c, TextWriter output) output.WriteLine ("\t\t{0}", attr); } } + + // Output Kotlin metadata if it exists + var kotlin_metadata = c.Attributes.OfType () + .FirstOrDefault ()?.Annotations + .FirstOrDefault (a => a.Type == "Lkotlin/Metadata;"); + + if (kotlin_metadata is not null) { + var meta = KotlinMetadata.FromAnnotation (kotlin_metadata); + var jopt = new JsonSerializerOptions { + ReferenceHandler = ReferenceHandler.Preserve, + WriteIndented = true, + }; + + if (meta.AsClassMetadata () is KotlinClass kc) { + output.WriteLine (); + var json = JsonSerializer.Serialize (kc, jopt); + output.WriteLine ($"Kotlin Class Metadata [{meta.MetadataVersion}]: {json}"); + } else if (meta.AsFileMetadata () is KotlinFile kf) { + output.WriteLine (); + var json = JsonSerializer.Serialize (kf, jopt); + output.WriteLine ($"Kotlin File Metadata [{meta.MetadataVersion}]: {json}"); + } + + output.WriteLine (); + output.WriteLine ($"Kotlin Metadata String Table: {JsonSerializer.Serialize (meta.Data2, jopt)}"); + } } } }