Example #1
0
        protected FSharpTypePart([NotNull] T declaration, [NotNull] string shortName, MemberDecoration memberDecoration,
                                 int typeParameters, [NotNull] ICacheBuilder cacheBuilder) : base(declaration, shortName, typeParameters)
        {
            Modifiers = memberDecoration;

            var attrNames = new FrugalLocalHashSet <string>();

            foreach (var attr in declaration.GetAttributes())
            {
                attrNames.Add(cacheBuilder.Intern(attr.LongIdentifier?.Name.GetAttributeShortName()));
            }
            AttributeClassNames = attrNames.ToArray();

            if (!attrNames.Contains("Extension"))
            {
                return;
            }

            var methods = new LocalList <ExtensionMethodInfo>();

            foreach (var member in declaration.MemberDeclarations)
            {
                if (!member.GetAttributes().Any(a => a.ShortNameEquals("Extension")))
                {
                    continue;
                }

                var offset = member.GetTreeStartOffset().Offset;
                methods.Add(new ExtensionMethodInfo(AnyCandidateType.INSTANCE, offset, member.DeclaredName)
                {
                    Owner = this
                });
            }

            ExtensionMethodInfos = methods.ToArray();
        }