public static void Fixup(IList <ClassFile> classes) { foreach (var c in classes) { // See if this is a Kotlin class var attr = c.Attributes.OfType <RuntimeVisibleAnnotationsAttribute> ().FirstOrDefault(); var kotlin = attr?.Annotations.SingleOrDefault(a => a.Type == "Lkotlin/Metadata;"); if (kotlin is null) { continue; } try { var km = KotlinMetadata.FromAnnotation(kotlin); if (km.Kind == KotlinMetadataKind.Class) { var class_metadata = km.AsClassMetadata(); FixupClassVisibility(c, class_metadata); } else { // We don't have explicit support for other types of Kotlin constructs yet, // so they are unlikely to work. Mark them as private and consumers // can override that if they want to fix them up. c.AccessFlags = ClassAccessFlags.Private; } } catch (Exception ex) { Log.Warning(0, $"class-parse: warning: Unable to parse Kotlin metadata on '{c.ThisClass.Name}': {ex}"); } } }
private KotlinMetadata GetMetadataForClassFile(string file) { var c = LoadClassFile(file); var attr = c.Attributes.OfType <RuntimeVisibleAnnotationsAttribute> ().FirstOrDefault(); var kotlin = attr?.Annotations.FirstOrDefault(a => a.Type == "Lkotlin/Metadata;"); Assert.NotNull(kotlin); var meta = KotlinMetadata.FromAnnotation(kotlin); return(meta); }