public ProvidedTypeCreator()

in ReSharper.FSharp/src/FSharp.TypeProviders.Host/FSharp.TypeProviders.Host/src/ModelCreators/ProvidedTypeCreator.cs [13:68]


    public ProvidedTypeCreator(TypeProvidersContext typeProvidersContext) :
      base(typeProvidersContext.ProvidedTypesCache) => myTypeProvidersContext = typeProvidersContext;

    protected override RdOutOfProcessProvidedType CreateRdModelInternal(ProvidedType providedModel, int entityId,
      int typeProviderId)
    {
      var logger = myTypeProvidersContext.Logger;

      var isGenericParameter = logger.Catch(() => providedModel.IsGenericParameter);
      var isValueType = logger.Catch(() => !isGenericParameter && providedModel.IsValueType);
      var isClass = logger.Catch(() => !isGenericParameter && providedModel.IsClass);

      var baseTypeId = !isGenericParameter
        ? GetOrCreateId(providedModel.BaseType, typeProviderId)
        : ProvidedConst.DefaultId;

      var declaringTypeId = isGenericParameter ||
                            providedModel.IsArray && providedModel.GetElementType().IsGenericParameter
        ? ProvidedConst.DefaultId
        : GetOrCreateId(providedModel.DeclaringType, typeProviderId);

      var flags = RdProvidedTypeFlags.None;
      if (isClass) flags |= RdProvidedTypeFlags.IsClass;
      if (isValueType) flags |= RdProvidedTypeFlags.IsValueType;
      if (logger.Catch(() => providedModel.IsVoid)) flags |= RdProvidedTypeFlags.IsVoid;
      if (logger.Catch(() => !isClass && providedModel.IsEnum)) flags |= RdProvidedTypeFlags.IsEnum;
      if (logger.Catch(() => providedModel.IsArray)) flags |= RdProvidedTypeFlags.IsArray;
      if (logger.Catch(() => providedModel.IsByRef)) flags |= RdProvidedTypeFlags.IsByRef;
      if (logger.Catch(() => providedModel.IsSealed)) flags |= RdProvidedTypeFlags.IsSealed;
      if (logger.Catch(() => providedModel.IsPublic)) flags |= RdProvidedTypeFlags.IsPublic;
      if (logger.Catch(() => providedModel.IsErased)) flags |= RdProvidedTypeFlags.IsErased;
      if (logger.Catch(() => providedModel.IsMeasure)) flags |= RdProvidedTypeFlags.IsMeasure;
      if (logger.Catch(() => providedModel.IsPointer)) flags |= RdProvidedTypeFlags.IsPointer;
      if (logger.Catch(() => providedModel.IsAbstract)) flags |= RdProvidedTypeFlags.IsAbstract;
      if (logger.Catch(() => providedModel.IsInterface)) flags |= RdProvidedTypeFlags.IsInterface;
      if (logger.Catch(() => providedModel.IsGenericType)) flags |= RdProvidedTypeFlags.IsGenericType;
      if (logger.Catch(() => providedModel.IsNestedPublic)) flags |= RdProvidedTypeFlags.IsNestedPublic;
      if (logger.Catch(() => providedModel.IsSuppressRelocate)) flags |= RdProvidedTypeFlags.IsSuppressRelocate;
      if (isGenericParameter) flags |= RdProvidedTypeFlags.IsGenericParameter;
      if (providedModel.IsCreatedByProvider()) flags |= RdProvidedTypeFlags.IsCreatedByProvider;

      var genericParameters = providedModel.IsGenericType
        ? providedModel
          .GetGenericArguments()
          .CreateIds(myTypeProvidersContext.ProvidedTypeRdModelsCreator, typeProviderId)
        : null;

      var assembly = myTypeProvidersContext.ProvidedAssemblyRdModelsCreator.GetOrCreateId(
        logger.Catch(() => providedModel.Assembly), typeProviderId);

      var fullName = logger.Catch(() => providedModel.FullName) ?? "";
      var @namespace = logger.Catch(() => providedModel.Namespace) ?? "";

      return new RdOutOfProcessProvidedType(baseTypeId, declaringTypeId, fullName,
        @namespace, flags, genericParameters, assembly, providedModel.Name, entityId);
    }