Esempio n. 1
0
        public static TypeAugmentation IsTypePartDeclaration([NotNull] ITypeExtensionDeclaration extensionDeclaration)
        {
            var extNameInfo =
                new NameAndParametersCound(extensionDeclaration.SourceName, extensionDeclaration.TypeParameters.Count);

            var declaredTypeNames = new Dictionary <NameAndParametersCound, TypeAugmentation>();
            var moduleDeclaration = extensionDeclaration.GetContainingNode <IModuleLikeDeclaration>()
                                    .NotNull("moduleDeclaration != null");

            foreach (var member in moduleDeclaration.MembersEnumerable)
            {
                if (member is ITypeExtensionDeclaration || !(member is IFSharpTypeDeclaration declaration))
                {
                    continue;
                }

                var sourceName = declaration.SourceName;
                if (sourceName == SharedImplUtil.MISSING_DECLARATION_NAME)
                {
                    continue;
                }

                var compiledName = declaration.CompiledName;
                if (compiledName == SharedImplUtil.MISSING_DECLARATION_NAME)
                {
                    continue;
                }

                var parametersCount  = declaration.TypeParameters.Count;
                var augmentationInfo = TypeAugmentation.NewTypePart(compiledName, parametersCount, declaration.TypePartKind);

                var nameInfo = new NameAndParametersCound(sourceName, parametersCount);
                declaredTypeNames[nameInfo] = augmentationInfo;
            }

            return(declaredTypeNames.TryGetValue(extNameInfo, out var typeAugmentation)
        ? typeAugmentation
        : TypeAugmentation.Extension);
        }
Esempio n. 2
0
 protected override void ClearCachedData()
 {
     base.ClearCachedData();
     myTypeAugmentation = null;
 }