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(); }