示例#1
0
        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}");
                }
            }
        }
示例#2
0
        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);
        }