Exemple #1
0
        void AddAttachedMemberToTarget(string name, MemberType memberType, Method underlyingMethod, DataType returnType, DataType parentDataType, HashSet <DocumentViewModel> target)
        {
            var uxAttribute = underlyingMethod.Attributes.SingleOrDefault(e => e.ReturnType.QualifiedName == ExportConstants.UxAttachedPropertySetterAttributeName ||
                                                                          e.ReturnType.QualifiedName == ExportConstants.UxAttachedEventAdderAttributeName);

            if (uxAttribute == null)
            {
                throw new ArgumentException($"UX attached attribute not found on {underlyingMethod.UnoName}");
            }

            var uxAttributeName = uxAttribute.Arguments.Length == 0 ? null : uxAttribute.Arguments[0].ConstantString;

            if (string.IsNullOrWhiteSpace(uxAttributeName))
            {
                throw new ArgumentException($"UX attached attribute did not contain any on {underlyingMethod.UnoName}");
            }
            uxAttributeName = uxAttributeName.ToLowerInvariant()
                              .Replace(".", "_");

            var id     = parentDataType.GetUri() + "/" + uxAttributeName + "_" + underlyingMethod.GetUriSignature();
            var titles = new TitlesViewModel(Naming.GetPageTitle(underlyingMethod),
                                             uxAttribute.Arguments[0].ConstantString,
                                             uxAttribute.Arguments[0].ConstantString,
                                             Naming.GetNavigationTitle(underlyingMethod),
                                             Naming.GetFullIndexTitle(underlyingMethod));
            var declaredIn = new DataTypeBuilder(Naming, Syntax, Exportable, AttachedMembers, _commentParser).BuildReference(underlyingMethod.DeclaringType);
            var parameters = GetParameters(underlyingMethod);
            var returns    = GetReturns(underlyingMethod, returnType);
            var values     = BuildValues(returnType);
            var source     = new AttachedMemberSourceViewModel(underlyingMethod.DeclaringType.GetUri(), Naming.GetIndexTitle(underlyingMethod.DeclaringType));
            var comment    = _commentParser.Read(underlyingMethod);

            if (!Exportable.IsExportableAndVisible(underlyingMethod.DeclaringType))
            {
                throw new Exception($"Found attached UX member {underlyingMethod.FullName} declared inside non-exportable class {underlyingMethod.DeclaringType.FullName}");
            }

            var viewModel = new AttachedMemberViewModel(new DocumentIdViewModel(id, parentDataType.GetUri(), "AttachedUx" + memberType.ToString("G"), new List <string>()),
                                                        new DocumentUriViewModel(id, underlyingMethod.GetUri(), true),
                                                        titles,
                                                        declaredIn,
                                                        parameters,
                                                        returns,
                                                        values,
                                                        source,
                                                        new CommentViewModel(comment),
                                                        underlyingMethod);

            target.AddIfNotExists(viewModel);
        }
 public AttachedMemberViewModel(DocumentIdViewModel id,
                                DocumentUriViewModel uri,
                                TitlesViewModel titles,
                                DocumentReferenceViewModel declaredIn,
                                ParametersViewModel parameters,
                                ReturnsViewModel returns,
                                ValuesViewModel values,
                                AttachedMemberSourceViewModel source,
                                CommentViewModel comment,
                                IEntity underlyingEntity)
     : base(id, uri, titles, null, comment, declaredIn, underlyingEntity)
 {
     Parameters = parameters;
     Returns    = returns;
     Values     = values;
     Source     = source;
 }