Example #1
0
        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();
        }
Example #2
0
        protected FSharpTypeMembersOwnerTypePart([NotNull] IFSharpTypeOldDeclaration declaration,
                                                 [NotNull] ICacheBuilder cacheBuilder)
            : base(declaration, ModifiersUtil.GetDecoration(declaration.AccessModifier, declaration.Attributes),
                   declaration.TypeParameters, cacheBuilder)
        {
            var extendListShortNames = new FrugalLocalHashSet <string>();

            extendListShortNames = ProcessMembers(declaration.TypeMembersEnumerable, extendListShortNames);

            if (declaration is IFSharpTypeDeclaration {
                TypeRepresentation : IObjectModelTypeRepresentation repr
            })
Example #3
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.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();
        }
Example #4
0
        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());
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }