Ejemplo n.º 1
0
        private void EnsureAttributesExist(TypeCompilationState compilationState)
        {
            var moduleBuilder = compilationState.ModuleBuilderOpt;

            if (moduleBuilder is null)
            {
                return;
            }

            if (RefKind == RefKind.RefReadOnly)
            {
                moduleBuilder.EnsureIsReadOnlyAttributeExists();
            }

            ParameterHelpers.EnsureIsReadOnlyAttributeExists(moduleBuilder, Parameters);

            if (moduleBuilder.Compilation.ShouldEmitNativeIntegerAttributes())
            {
                if (ReturnType.ContainsNativeIntegerWrapperType())
                {
                    moduleBuilder.EnsureNativeIntegerAttributeExists();
                }

                ParameterHelpers.EnsureNativeIntegerAttributeExists(moduleBuilder, Parameters);
            }

            ParameterHelpers.EnsureLifetimeAnnotationAttributeExists(moduleBuilder, Parameters);

            if (compilationState.Compilation.ShouldEmitNullableAttributes(this))
            {
                if (ShouldEmitNullableContextValue(out _))
                {
                    moduleBuilder.EnsureNullableContextAttributeExists();
                }

                if (ReturnTypeWithAnnotations.NeedsNullableAttribute())
                {
                    moduleBuilder.EnsureNullableAttributeExists();
                }
            }

            ParameterHelpers.EnsureNullableAttributeExists(moduleBuilder, this, Parameters);
        }