in ReSharper.FSharp/src/FSharp/FSharp.Psi/src/Metadata/FSharpMetadataReader.cs [272:332]
private object ReadEntitySpec()
{
Interruption.Current.CheckAndThrow();
var index = ReadPackedInt();
var typeParameters = ReadArray(reader => reader.ReadTypeParameterSpec());
var logicalName = ReadUniqueString();
var compiledName = ReadOption(ReadUniqueStringFunc);
var range = ReadRange();
var publicPath = ReadOption(reader => reader.ReadPublicPath());
var accessibility = ReadAccessibility();
var representationAccessibility = ReadAccessibility();
var attributes = ReadAttributes();
var typeRepresentationFunc = ReadTypeRepresentation();
var typeAbbreviation = ReadOption(ReadTypeFunc);
var typeAugmentation = ReadTypeAugmentation();
var xmlDocId = ReadUniqueString(); // Should be an empty string.
var typeKind = ReadTypeKind();
var flags = (EntityFlags) ReadInt64();
var entityFlags = flags & ~EntityFlags.ReservedBit;
var isModuleOrNamespace = (entityFlags & EntityFlags.IsModuleOrNamespace) != 0;
var reprIsProvidedIlType = flags & EntityFlags.ReservedBit;
var compilationPathWithScopeRef = ReadOption(reader => reader.ReadCompilationPath());
var compilationPath = compilationPathWithScopeRef?.Value is var (_, path) ? path : [];
var accessRights = GetAccessRights(accessibility);
var entity = FSharpMetadataEntityModule.create(index, logicalName, compiledName, typeParameters.Length, compilationPath, accessRights);
myState.Push(entity);
Metadata.Entities[index] = entity;
var metadataValues = ReadModuleType(entity);
var exceptionRepresentation = ReadExceptionRepresentation();
var possibleXmlDoc = ReadPossibleXmlDoc();
var typeRepresentation = typeRepresentationFunc(reprIsProvidedIlType != 0);
if (isModuleOrNamespace)
{
if (entity.EntityKind != EntityKind.Namespace)
{
var nameKind = GetModuleNameKind(entity.EntityKind, range);
entity.Representation = FSharpCompiledTypeRepresentation.NewModule(nameKind, metadataValues);
Metadata.AddEntity(entity, myMetadataAssembly);
}
}
else
{
if (typeAbbreviation == null)
{
entity.Representation = typeRepresentation;
Metadata.AddEntity(entity, myMetadataAssembly);
}
}
myState.Pop();
return null;
}