protected FSharpTypeMembersOwnerTypePart([NotNull] IFSharpTypeDeclaration declaration, [NotNull] ICacheBuilder cacheBuilder) : base(declaration, ModifiersUtil.GetDecoration(declaration.AccessModifier, declaration.AllAttributes), declaration.TypeParameters, cacheBuilder) { var extendListShortNames = new FrugalLocalHashSet <string>(); foreach (var member in declaration.TypeMembersEnumerable) { var baseTypeIdentifier = (member as ITypeInherit)?.TypeName?.Identifier; if (baseTypeIdentifier != null) { extendListShortNames.Add(baseTypeIdentifier.Name); continue; } var interfaceImplTypeIdentifier = (member as IInterfaceImplementation)?.TypeName?.Identifier; if (interfaceImplTypeIdentifier != null) { extendListShortNames.Add(interfaceImplTypeIdentifier.Name); continue; } var interfaceInheritTypeIdentifier = (member as IInterfaceInherit)?.TypeName?.Identifier; if (interfaceInheritTypeIdentifier != null) { extendListShortNames.Add(interfaceInheritTypeIdentifier.Name); } } ExtendsListShortNames = extendListShortNames.ToArray(); }
public ObjectExpressionTypePart([NotNull] IObjExpr declaration, [NotNull] ICacheBuilder cacheBuilder) : base(declaration, declaration.DeclaredName, MemberDecoration.DefaultValue, 0, cacheBuilder) { var extendListShortNames = new FrugalLocalHashSet <string>(); var baseClassOrInterfaceName = declaration.TypeName?.Identifier?.Name; if (baseClassOrInterfaceName != null) { extendListShortNames.Add(baseClassOrInterfaceName); } foreach (var interfaceImplementation in declaration.InterfaceImplementations) { var interfaceName = interfaceImplementation.TypeName?.Identifier?.Name; if (interfaceName != null) { extendListShortNames.Add(interfaceName); } } ExtendsListShortNames = extendListShortNames.ToArray(); }
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.GetShortName())); } AttributeClassNames = attrNames.ToArray(); var methods = new LocalList <ExtensionMethodInfo>(); foreach (var member in declaration.MemberDeclarations) { // There are two interesting scenarios: // * Members in types // * Bindings in modules // Type declaration as a member can only appear in module and we ignore it. if (member is ITypeDeclaration) { continue; } // A cheap check until we have a proper attributes resolve during cache building. 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 }); } if (methods.IsEmpty()) { return; } ExtensionMethodInfos = methods.ToArray(); }
public static string[] GetQualifiersAndName(this FSharpIdentifierToken token) { if (!(token.Parent is ILongIdentifier longIdentifier)) { return new[] { FSharpNamesUtil.RemoveBackticks(token.GetText()) } } ; var names = new FrugalLocalHashSet <string>(); foreach (var id in longIdentifier.IdentifiersEnumerable) { names.Add(FSharpNamesUtil.RemoveBackticks(id.GetText())); if (id == token) { break; } } return(names.ToArray()); }
protected FSharpTypePart([NotNull] T declaration, [NotNull] string shortName, MemberDecoration memberDecoration, int typeParameters, [NotNull] ICacheBuilder cacheBuilder) : base(declaration, shortName, typeParameters) { Modifiers = memberDecoration; var attributes = declaration.GetAttributes(); var attrNames = new FrugalLocalHashSet <string>(); foreach (var attr in attributes) { attrNames.Add(cacheBuilder.Intern(attr.LongIdentifier?.Name.GetAttributeShortName())); } AttributeClassNames = attrNames.ToArray(); if (!attributes.Any(a => a.ShortNameEquals("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(); }