in ReSharper.FSharp/src/FSharp/FSharp.Psi/src/Impl/Cache2/Compiled/FSharpCompiledModule.cs [29:89]
public FSharpCompiledModule([NotNull] FSharpCompiledTypeRepresentation.Module repr,
[NotNull] FSharpMetadataEntity entity, [NotNull] ICompiledEntity parent,
[NotNull] IReflectionBuilder builder, [NotNull] IMetadataTypeInfo info) : base(entity, parent, builder, info)
{
AccessKind = GetModuleMembersAccessKind(info);
var valueNames = new LocalList<string>();
var functionNames = new LocalList<string>();
var literalNames = new LocalList<string>();
var activePatternNames = new LocalList<string>();
var activePatternCaseNames = new LocalList<string>();
var extensionMemberInfos = new LocalList<ICompiledExtensionMemberProxy>();
foreach (var value in repr.values)
{
if (value.IsExtensionMember)
{
extensionMemberInfos.Add(new FSharpCompiledExtensionMemberInfo(value, this));
}
// ApparentEnclosingTypeReference is set for every member, even for members coming from types inside the module
else if (value.IsPublic && value.ApparentEnclosingTypeReference == null)
{
var name = value.LogicalName;
if (!name.IsEmpty() && !PrettyNaming.IsIdentifierFirstCharacter(name[0]))
{
// todo: operators
if (!PrettyNaming.IsActivePatternName(name)) continue;
activePatternNames.Add(name);
foreach (var activePatternCaseName in name.Split('|'))
{
if (!activePatternCaseName.IsEmpty() && activePatternCaseName != "_")
activePatternCaseNames.Add(activePatternCaseName);
}
}
else
{
if (value.IsFunction)
{
functionNames.Add(name);
}
else
{
if (value.IsLiteral)
literalNames.Add(name);
else
valueNames.Add(name);
}
}
}
}
myExtensionMemberInfos = extensionMemberInfos.ToArray();
ValueNames = valueNames.ToArray();
FunctionNames = functionNames.ToArray();
LiteralNames = literalNames.ToArray();
ActivePatternNames = activePatternNames.ToArray();
ActivePatternCaseNames = activePatternCaseNames.ToArray();
}