public class FSharpReflectionElementPropertiesProvider()

in ReSharper.FSharp/src/FSharp/FSharp.Psi/src/Metadata/FSharpReflectionElementPropertiesProvider.cs [9:79]


  public class FSharpReflectionElementPropertiesProvider(FSharpMetadata metadata) : ReflectionElementPropertiesProvider
  {
    public FSharpMetadata Metadata { get; } = metadata;

    public override CompiledTypeElementFactory ClassProperties { get; } = new FSharpCompiledClassFactory(metadata);
    public override CompiledTypeElementFactory DelegateProperties { get; } = new FSharpCompiledDelegateFactory(metadata);
    public override CompiledTypeElementFactory EnumProperties { get; } = new FSharpCompiledEnumFactory(metadata);
    public override CompiledTypeElementFactory InterfaceProperties { get; } = new FSharpCompiledInterfaceFactory(metadata);
    public override CompiledTypeElementFactory StructProperties { get; } = new FSharpCompiledStructFactory(metadata);

    public class FSharpCompiledClassFactory(FSharpMetadata metadata) : ClassFactory
    {
      public FSharpMetadata Metadata { get; } = metadata;

      public override CompiledTypeElement Create(ICompiledEntity parent, IReflectionBuilder builder,
        IMetadataTypeInfo info)
      {
        if (Metadata.EntitiesByName.TryGetValue(info.FullyQualifiedName, out var entity) &&
            entity.Representation is FSharpCompiledTypeRepresentation.Module moduleRepresentation)
          return new FSharpCompiledModule(moduleRepresentation, entity, parent, builder, info);

        return new FSharpCompiledClass(entity, parent, builder, info);
      }
    }

    public class FSharpCompiledStructFactory(FSharpMetadata metadata) : StructFactory
    {
      public FSharpMetadata Metadata { get; } = metadata;

      public override CompiledTypeElement Create(ICompiledEntity parent, IReflectionBuilder builder, IMetadataTypeInfo info)
      {
        Metadata.EntitiesByName.TryGetValue(info.FullyQualifiedName, out var entity);
        return new FSharpCompiledStruct(entity, parent, builder, info);
      }
    }

    public class FSharpCompiledInterfaceFactory(FSharpMetadata metadata) : InterfaceFactory
    {
      public FSharpMetadata Metadata { get; } = metadata;

      public override CompiledTypeElement Create(ICompiledEntity parent, IReflectionBuilder builder,
        IMetadataTypeInfo info)
      {
        Metadata.EntitiesByName.TryGetValue(info.FullyQualifiedName, out var entity);
        return new FSharpCompiledInterface(entity, parent, builder, info);
      }
    }

    public class FSharpCompiledEnumFactory(FSharpMetadata metadata) : InterfaceFactory
    {
      public FSharpMetadata Metadata { get; } = metadata;

      public override CompiledTypeElement Create(ICompiledEntity parent, IReflectionBuilder builder,
        IMetadataTypeInfo info)
      {
        Metadata.EntitiesByName.TryGetValue(info.FullyQualifiedName, out var entity);
        return new FSharpCompiledEnum(entity, parent, builder, info);
      }
    }

    public class FSharpCompiledDelegateFactory(FSharpMetadata metadata) : InterfaceFactory
    {
      public FSharpMetadata Metadata { get; } = metadata;

      public override CompiledTypeElement Create(ICompiledEntity parent, IReflectionBuilder builder, IMetadataTypeInfo info)
      {
        Metadata.EntitiesByName.TryGetValue(info.FullyQualifiedName, out var entity);
        return new FSharpCompiledDelegate(entity, parent, builder, info);
      }
    }
  }