Exemplo n.º 1
0
        public void Mod_Ref()
        {
            string doubledUp = "System.ValueType& modopt(System.Runtime.CompilerServices.IsBoxed)";
            string result    = MemberFormatter.RemoveMod(doubledUp);

            Assert.AreEqual("System.ValueType&", result);
        }
Exemplo n.º 2
0
        private void ProcessMember(MemberInfo memberInfo, List <KeyValuePair <int, MemberFormatter> > formatters, ref int count)
        {
            var keys = memberInfo.GetCustomAttributes <KeyAttribute>();

            foreach (var key in keys)
            {
                if (key.Value == -1)
                {
                    if (LastKeyAttribute == null)
                    {
                        LastKeyAttribute = new LastKeyAttribute();
                        Logger.Instance.Error("Type {0} contains unsetted keys, but it has no one [LastKey] attribute. Saves won't work properly!", Type.FullName);
                    }
                    key.Value = LastKeyAttribute.Value++;
                }

                if (key.DistributedSubPath != null)
                {
                    var flags             = key.Flags | SerializationFlags.Distributed;
                    var externalFormatter = MemberFormatter.CreateDistributed(memberInfo, flags, key.DistributedSubPath);
                    formatters.Add(new KeyValuePair <int, MemberFormatter>(key.Value, externalFormatter));
                }
                var formatter = MemberFormatter.Create(memberInfo, key.Flags);
                formatters.Add(new KeyValuePair <int, MemberFormatter>(key.Value, formatter));
                count = Math.Max(count, key.Value + 1);
            }
        }
Exemplo n.º 3
0
        public void DoubleMod_Pointer()
        {
            string doubledUp = "System.ValueType modreq(System.DateTime) modopt(System.Runtime.CompilerServices.IsBoxed)*";
            string result    = MemberFormatter.RemoveMod(doubledUp);

            Assert.AreEqual("System.ValueType*", result);
        }
Exemplo n.º 4
0
 public void Test_StaticEvent()
 => TestEventSignature(typeof(SomeClass),
                       "function onStaticEvent(eventArgs) { /* Your code */ }" + MemberFormatter.GetLineEnding() +
                       "mdoc.Test.SampleClasses.SomeClass.addEventListener(\"staticevent\", onStaticEvent);" + MemberFormatter.GetLineEnding() +
                       "mdoc.Test.SampleClasses.SomeClass.removeEventListener(\"staticevent\", onStaticEvent);" + MemberFormatter.GetLineEnding() +
                       "- or -" + MemberFormatter.GetLineEnding() +
                       "mdoc.Test.SampleClasses.SomeClass.onstaticevent = onStaticEvent;",
                       nameof(SomeClass.StaticEvent));
Exemplo n.º 5
0
 public void Test_Event()
 => TestEventSignature(typeof(SomeClass),
                       "function onAppMemoryUsageIncreased(eventArgs) { /* Your code */ }" + MemberFormatter.GetLineEnding() +
                       "someClass.addEventListener(\"appmemoryusageincreased\", onAppMemoryUsageIncreased);" + MemberFormatter.GetLineEnding() +
                       "someClass.removeEventListener(\"appmemoryusageincreased\", onAppMemoryUsageIncreased);" + MemberFormatter.GetLineEnding() +
                       "- or -" + MemberFormatter.GetLineEnding() +
                       "someClass.onappmemoryusageincreased = onAppMemoryUsageIncreased;",
                       nameof(SomeClass.AppMemoryUsageIncreased));
Exemplo n.º 6
0
        public int WriteMembers(SerializationFlags flags, object instance, ref byte[] bytes, int offset, IFormatterResolver formatterResolver, bool recursive = true)
        {
            var startOffset = offset;

            if (BaseMeta != null && recursive)
            {
                offset += BaseMeta.WriteMembers(flags, instance, ref bytes, offset, formatterResolver);
            }

            if (Flags.IsSerializable() && !Flags.IsSkipWriting())
            {
                if (MemberFormatterGroups == null)
                {
                    offset += MessagePackBinary.WriteNil(ref bytes, offset);
                }
                else
                {
                    var notNilCount = 0;
                    var formatters  = new MemberFormatter[MemberFormatterGroups.Length];
                    for (int i = 0; i < MemberFormatterGroups.Length; i++)
                    {
                        var formatter = MemberFormatterGroups[i]?.GetFormatter(flags);
                        if (formatter != null)
                        {
                            formatters[i] = formatter;
                            notNilCount   = i + 1;
                        }
                    }

                    bool hasAnnotations = Serializer.Instance.State.Settings.Flags.HasFlag(SerializationFlags.Annotations);
                    offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, notNilCount);
                    for (int i = 0; i < notNilCount; i++)
                    {
                        var formatter = formatters[i];
                        if (formatter == null)
                        {
                            offset += MessagePackBinary.WriteNil(ref bytes, offset);
                        }
                        else
                        {
                            if (hasAnnotations)
                            {
                                offset += MessagePackBinaryExtension.WriteComment(ref bytes, offset, formatter.MemberName + ":");
                            }

                            offset += formatter.Write(instance, ref bytes, offset, formatterResolver);
                        }
                    }
                }
            }

            return(offset - startOffset);
        }
Exemplo n.º 7
0
        public void Formatters_VerifyPrivateConstructorNull()
        {
            // this is a private constructor
            var method = GetMethod <TestClass> (m => m.IsConstructor && !m.IsPublic && m.Parameters.Count() == 1);

            MemberFormatter[] formatters = new MemberFormatter[]
            {
                new CSharpFullMemberFormatter(),
                new CSharpMemberFormatter(),
                new ILMemberFormatter(),
                new ILFullMemberFormatter()
            };
            var sigs = formatters.Select(f => f.GetDeclaration(method));

            foreach (var sig in sigs)
            {
                Assert.IsNull(sig);
            }
        }
Exemplo n.º 8
0
 protected static string FormatEndings(string s)
 {
     return(s?.Replace("\r\n", MemberFormatter.GetLineEnding()));
 }
Exemplo n.º 9
0
 public JsMemberFormatter(TypeMap map) : base(map)
 {
     usageFormatter = new JsUsageFormatter(map);
 }
Exemplo n.º 10
0
        private void DocumentMembers <T>(T[] members, string heading, bool forceDocumentation, MemberFormatter <T> format)
            where T : MemberInfo
        {
            bool foundOne = false;

            foreach (var m in members)
            {
                if (forceDocumentation || m.GetDocumentation() != null)
                {
                    foundOne = true;
                    break;
                }
            }

            if (foundOne)
            {
                Section("h3", heading, null);
                List <T> mems = new List <T>(members);
// ReSharper disable StringCompareIsCultureSpecific.1
                mems.Sort((m1, m2) => (string.Compare(m1.Name, m2.Name)));
// ReSharper restore StringCompareIsCultureSpecific.1
                Tag("dl", delegate
                {
                    foreach (var m in mems)
                    {
                        string doc = m.GetDocumentation();
                        if (m.Name != "value__" && (forceDocumentation || doc != null))
                        {
// ReSharper disable AccessToModifiedClosure
                            Tag("dt", () => format(m));
// ReSharper restore AccessToModifiedClosure
                            if (doc != null)
                            {
                                Tag("dd", doc);
                            }
                        }
                    }
                });
            }
        }