internal static bool ShouldIncludeEntity(this IHandleNameWrapper entity, ISet <string> excludeMembersAttributes, ISet <string> excludeAttributes)
        {
            if (entity is IHandleTypeNamedWrapper typeNamedWrapper)
            {
                if (!typeNamedWrapper.ShouldIncludeEntityAccessibility())
                {
                    return(false);
                }
            }

            if (entity is AttributeWrapper attributeWrapper && excludeAttributes.Contains(attributeWrapper.ReflectionFullName))
            {
                return(false);
            }

            if (entity is IHasAttributes hasAttributes)
            {
                var attributes = hasAttributes.Attributes;

                if (attributes == null)
                {
                    return(true);
                }

                return(!attributes.Any(attr => excludeMembersAttributes.Contains(attr.ReflectionFullName)));
            }

            return(true);
        }
        public static ParameterSyntax?Generate(IHandleNameWrapper nameWrapper, ISet <string> excludeMembersAttributes, ISet <string> excludeAttributes, Nullability currentNullability, bool isExtensionMethod)
        {
            if (!(nameWrapper is ParameterWrapper parameterWrapper))
            {
                return(null);
            }

            EqualsValueClauseSyntax?equals = null;

            if (parameterWrapper.HasDefaultValue)
            {
                var valueSyntax = SyntaxHelper.GetValueExpression(parameterWrapper.ParameterType, parameterWrapper.DefaultValue !);

                if (valueSyntax != null)
                {
                    equals = EqualsValueClause(valueSyntax);
                }
            }

            parameterWrapper.Attributes.TryGetNullable(out var nullability);

            var name          = parameterWrapper.Name;
            var attributes    = GeneratorFactory.Generate(parameterWrapper.Attributes, excludeMembersAttributes, excludeAttributes);
            var modifiers     = parameterWrapper.GetModifiers(isExtensionMethod);
            var parameterType = parameterWrapper.ParameterType.GetTypeSyntax(nameWrapper, currentNullability, nullability, false);

            return(Parameter(attributes, modifiers, parameterType, name, equals !));
        }
        /// <summary>
        /// Gets the value tuple elements and attribute if the class has one.
        /// </summary>
        /// <param name="wrapper">The wrapper to get the value tuples for.</param>
        /// <param name="tupleElementNames">The tuple element names if there is any.</param>
        /// <returns>If we were able to retrieve the values.</returns>
        public static bool HasTupleElementNamesAttribute(this IHandleNameWrapper wrapper, out string?[] tupleElementNames)
        {
            if (wrapper is null)
            {
                throw new ArgumentNullException(nameof(wrapper));
            }

            if (wrapper is IHasAttributes hasAttributes && hasAttributes.Attributes.TryGetKnownAttribute(KnownAttribute.TupleElementNames, out var attributeWrapper))
            {
                tupleElementNames = ProcessStringFixedValue(attributeWrapper.FixedArguments[0].Value);
                return(true);
            }

            if (wrapper is IHasReturnAttributes returnAttributes)
            {
                if (returnAttributes.ReturnAttributes.TryGetKnownAttribute(KnownAttribute.TupleElementNames, out attributeWrapper))
                {
                    tupleElementNames = ProcessStringFixedValue(attributeWrapper.FixedArguments[0].Value);
                    return(true);
                }
            }

            tupleElementNames = Array.Empty <string>();
            return(false);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Determines if the specified type is a KnownTypeCode.
        /// </summary>
        /// <param name="typeDefinition">The type to check.</param>
        /// <returns>The known type code, None if it's not a known type code.</returns>
        internal static KnownTypeCode ToKnownTypeCode(this IHandleNameWrapper typeDefinition)
        {
            if (typeDefinition == null)
            {
                return(KnownTypeCode.None);
            }

            string name = typeDefinition.FullName;

            if (_nameToTypeCodes.TryGetValue(name, out var knownTypeCode))
            {
                return(knownTypeCode);
            }

            return(KnownTypeCode.None);
        }