Beispiel #1
0
        public static void InitFusion( )
        {
            MainVM = new ManagedHost( );

            ScriptSource   init_ide_src      = new ScriptSource("data/script/ide/ide_init.vs");
            Compiler       comp              = new Compiler();
            CompiledSource init_ide_compiled = comp.Compile(init_ide_src);

            MainVM.SetEntry(init_ide_compiled.EntryPoint);

            void InitIDE(int w, int h, int fs)
            {
                App       = new FusionIDE(w, h, fs == 1);
                InitState = new States.CodeScreen();

                App.Run();
            }

            CFuncLink initIDE = new CFuncLink
            {
                Link = (t) =>
                {
                    InitIDE(t[0], t[1], t[2]);
                    return(null);
                }
            };

            MainVM.AddCFunc("InitIDE", initIDE);
            CodeScope scope = MainVM.RunEntry( );
        }
Beispiel #2
0
        private void _WriteOneClassOrStruct(Type type, ExportFlags flags)
        {
            var classOrStruct = type.IsClass ? "class" : "struct";
            var sealedClass   = type.IsClass && EditorMetaCommon.IsFinalType(type) ? "sealed " : string.Empty;

            _writer.WriteLine("[Serializable]");
            _writer.WriteLine("{0}partial {1} {2} : {3}", sealedClass, classOrStruct, type.Name, typeof(ILoadable).Name);

            using (MacroScope.CreateEditorScope(_writer.BaseWriter))
            {
                _writer.WriteLine(", {0}", typeof(ISavable).Name);
            }

            using (CodeScope.CreateCSharpScope(_writer))
            {
                var nestedTypes = type.GetNestedTypes(BindingFlags.Instance | BindingFlags.Public);
                _WriteNestedTypes(nestedTypes, flags);

                var members = new List <MemberBase>();
                _CollectSerializableMembers(type, members);

                _WriteSaveMethod(type, members);
                _WriteLoadMethod(type, members);
                _WriteToStringMethod(type, members);
                _WriteGetMetadataTypeMethod(type);
            }
        }
Beispiel #3
0
        private void _WriteSaveMethod(Type type, List <MemberBase> members)
        {
            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("[Export(ExportFlags.AutoCode)]");
                _writer.WriteLine("public virtual void Save (IOctetsWriter writer)");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                using (MacroScope.CreateEditorScope(_writer.BaseWriter))
                {
                    _writer.WriteLine("[Export(ExportFlags.AutoCode)]");

                    var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                    _writer.WriteLine("public {0}void Save (IOctetsWriter writer)", overrideText);
                    using (CodeScope.Create(_writer, "{\n", "}\n"))
                    {
                        for (int index = 0; index < members.Count; ++index)
                        {
                            var member = members[index];
                            member.WriteSave(_writer);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        private void _WriteGetMetadataTypeMethod(Type type)
        {
            _writer.WriteLine("[Export(ExportFlags.AutoCode)]");

            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("public virtual ushort GetMetadataType ()");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                _writer.WriteLine("public {0}ushort GetMetadataType ()", overrideText);

                using (CodeScope.CreateCSharpScope(_writer))
                {
                    //var typeName = EditorMetaCommon.GetMetaTypeName(type);
                    //_writer.WriteLine("return (ushort) MetadataType.{0};", typeName);
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
        }
Beispiel #5
0
 public override void WriteNotEqualsReturn(CodeWriter writer)
 {
     writer.WriteLine("if ((!string.IsNullOrEmpty({0}) || !string.IsNullOrEmpty(that.{0})) && ({0} != that.{0}))", _name);
     using (CodeScope.CreateCSharpScope(writer))
     {
         writer.WriteLine("return false;");
     }
 }
Beispiel #6
0
 private void PopupTypes(string reference, CodeScope scope)
 {
     this.Callback.TextEditorBox.UIExtensions.PopupItems(
         CreatePopupTypes(scope),
         null,
         null,
         searchingKey: reference);
 }
Beispiel #7
0
 public override void WriteNotEqualsReturn(CodeWriter writer)
 {
     writer.WriteLine("if ({0} != that.{0})", _name);
     using (CodeScope.CreateCSharpScope(writer))
     {
         writer.WriteLine("return false;");
     }
 }
Beispiel #8
0
 private void PopupGenericParameters(string reference, CodeScope scope)
 {
     this.Callback.TextEditorBox.UIExtensions.PopupItems(
         PopupGenericParameters(scope),
         null,
         null,
         searchingKey: reference);
 }
Beispiel #9
0
 private void PopupConcepts(CodeScope scope)
 {
     this.Callback.TextEditorBox.UIExtensions.PopupItems(
         CreatePopupConcepts(scope),
         null,
         null,
         forceClosingPrevious: true);
 }
Beispiel #10
0
 public override void WriteNotEqualsReturn(CodeWriter writer)
 {
     writer.WriteLine("if (!Unique.ColorTools.IsEqual({0}, that.{0}))", _name);
     using (CodeScope.CreateCSharpScope(writer))
     {
         writer.WriteLine("return false;");
     }
 }
Beispiel #11
0
 private void PopupInstanceFunctions(string reference, string conceptName, CodeScope scope)
 {
     this.Callback.TextEditorBox.UIExtensions.PopupItems(
         CreatePopupInstanceFunctions(conceptName, scope),
         null,
         null,
         searchingKey: reference,
         forceClosingPrevious: true);
 }
Beispiel #12
0
 private void PopupExpressionsAndTypesAndStatements(string reference, CodeScope scope)
 {
     this.Callback.TextEditorBox.UIExtensions.PopupItems(
         CreatePopupExpressions(scope)
         .Concat(CreatePopupStatementKeywords())
         .Concat(CreatePopupTypes(scope)),
         this.Snippets,
         Images.Snippet,
         searchingKey: reference);
 }
Beispiel #13
0
            public CodeScope(CodeScope parent, int scopeTokenStartPos)
            {
#if DEBUG
                if (parent == null)
                {
                    throw new ArgumentNullException("parent");
                }
#endif
                _parent   = parent;
                _startPos = scopeTokenStartPos;
            }
Beispiel #14
0
        private void _WriteToStringMethod(Type type, List <MemberBase> members)
        {
            //			_writer.WriteLine("[Export(ExportFlags.AutoCode)]");
            _writer.WriteLine("public override string ToString ()");
            using (CodeScope.Create(_writer, "{\n", "}\n"))
            {
                var memberCount = members.Count;

                if (memberCount > 0)
                {
                    _sbText.Append("return string.Format(\"[");
                    _sbText.Append(type.Name);
                    _sbText.Append(":ToString()] ");

                    for (int index = 0; index < memberCount; ++index)
                    {
                        _sbText.Append(members[index].GetMemberName());
                        _sbText.Append("={");
                        _sbText.Append(index);
                        _sbText.Append("}");

                        if (index < memberCount - 1)
                        {
                            _sbText.Append(", ");
                        }
                    }

                    _sbText.Append("\", ");

                    for (int index = 0; index < memberCount; ++index)
                    {
                        _sbText.Append(members[index].GetMemberName());

                        if (index < memberCount - 1)
                        {
                            _sbText.Append(", ");
                        }
                    }

                    _sbText.Append(");");
                }
                else
                {
                    _sbText.Append("return \"[");
                    _sbText.Append(type.Name);
                    _sbText.Append(":ToString()]\";");
                }

                _writer.WriteLine(_sbText.ToString());
                _sbText.Length = 0;
            }
        }
Beispiel #15
0
        private bool TryReadFunctionArgument(CodeScope scope, bool createDefinitions, List <ArgumentDescriptor> args, List <Definition> newDefList)
        {
            var dataType = DataType.TryParse(new DataType.ParseArgs
            {
                Code             = _code,
                DataTypeCallback = GlobalDataTypeCallback,
                VariableCallback = GlobalVariableCallback
            });

            if (dataType == null)
            {
                return(false);
            }

            PassByMethod passByMethod = PassByMethod.Value;

            if (_code.ReadExact("&"))                   // Optional reference
            {
                if (_code.ReadExact("+"))               // Optional &+
                {
                    passByMethod = PassByMethod.ReferencePlus;
                }
                else
                {
                    passByMethod = PassByMethod.Reference;
                }
            }

            string name = null;

            if (_code.ReadWord())
            {
                name = _code.Text;
            }

            args.Add(new ArgumentDescriptor(name, dataType, passByMethod));

            if (name != null && createDefinitions)              // Optional var name
            {
                var arrayLength = TryReadArrayDecl();

                var localPos = _source.GetFilePosition(_code.TokenStartPostion);
                var def      = new VariableDefinition(_code.Text, localPos, dataType, true, arrayLength, VariableType.Argument);
                scope.AddDefinition(def);
                if (!_visible || localPos.PrimaryFile)
                {
                    newDefList.Add(def);
                }
            }

            return(true);
        }
Beispiel #16
0
        public override void WriteSave(CodeWriter writer)
        {
            writer.WriteLine("int {0}Count = null != {0} ? {0}.Count : 0 ;", _name);
            writer.WriteLine("writer.Write ({0}Count);", _name);
            writer.WriteLine("for (int index= 0; index < {0}Count; ++index)", _name);

            using (CodeScope.CreateCSharpScope(writer))
            {
                writer.WriteLine("var item = {0}[index];", _name);
                var elementType = _type.GetGenericArguments()[0];
                _WriteSaveType(writer, elementType, "item");
            }
        }
Beispiel #17
0
        public override void WriteSave(CodeWriter writer)
        {
            writer.WriteLine("int {0}Length = null != {0} ? {0}.Length : 0 ;", _name);
            writer.WriteLine("writer.Write ({0}Length);", _name);
            writer.WriteLine("for (int i{1}= 0; i{1} < {0}Length; ++i{1})", _name, writer.Indent);

            using (CodeScope.CreateCSharpScope(writer))
            {
                writer.WriteLine("var item{1} = {0}[i{1}];", _name, writer.Indent - 1);
                var elementType = _type.GetElementType();
                _WriteSaveType(writer, elementType, string.Format("item{0}", writer.Indent - 1));
            }
        }
Beispiel #18
0
        private bool TryReadVariableDeclaration(CodeScope scope, List <Definition> newDefList)
        {
            var dataType = DataType.TryParse(new DataType.ParseArgs
            {
                Code             = _code,
                DataTypeCallback = GlobalDataTypeCallback,
                VariableCallback = GlobalVariableCallback
            });

            if (dataType == null)
            {
                return(false);
            }

            var gotVars = false;

            while (!_code.EndOfFile)
            {
                if (!_code.ReadWord())
                {
                    break;
                }

                var varName  = _code.Text;
                var localPos = _source.GetFilePosition(_code.TokenStartPostion);

                var arrayLength = TryReadArrayDecl();

                var def = new VariableDefinition(varName, localPos, dataType, false, arrayLength, VariableType.Local);
                scope.AddDefinition(def);
                if (!_visible || localPos.PrimaryFile)
                {
                    newDefList.Add(def);
                }
                gotVars = true;

                if (_code.ReadExact(','))
                {
                    continue;
                }
                if (_code.ReadExact(';'))
                {
                    break;
                }
                break;
            }

            return(gotVars);
        }
Beispiel #19
0
        public override void WriteLoad(CodeWriter writer)
        {
            Type   elementType     = _type.GetGenericArguments() [0];
            string elementTypeName = EditorMetaCommon.GetNestedClassName(elementType);

            writer.WriteLine("int {0}Count = reader.ReadInt32();", _name);
            writer.WriteLine("if (null == {0}) {{ {0} = new List<{1}>({0}Count); }} else {{ {0}.Clear(); }}", _name, elementTypeName);
            writer.WriteLine("for (int index= 0; index < {0}Count; ++index)", _name);

            using (CodeScope.CreateCSharpScope(writer))
            {
                writer.WriteLine("{0}.Add (default({1}));", _name, elementTypeName);
                _WriteLoadType(writer, elementType, _name + "[index]");
            }
        }
Beispiel #20
0
 public override void WriteLoad(CodeWriter writer)
 {
     if (_type.IsClass)
     {
         writer.WriteLine();
         writer.WriteLine("if (reader.ReadBoolean())");
         using (CodeScope.CreateCSharpScope(writer))
         {
             _WriteLoadMetadata(writer);
         }
     }
     else if (_type.IsValueType)
     {
         writer.WriteLine("{0}.Load(reader);", _name);
     }
 }
Beispiel #21
0
 public override void WriteSave(CodeWriter writer)
 {
     if (_type.IsClass)
     {
         writer.WriteLine();
         writer.WriteLine("writer.Write(null != {0});", _name);
         writer.WriteLine("if (null != {0})", _name);
         using (CodeScope.CreateCSharpScope(writer))
         {
             _WriteSaveMetadata(writer);
         }
     }
     else if (_type.IsValueType)
     {
         writer.WriteLine("{0}.Save(writer);", _name);
     }
 }
Beispiel #22
0
        public override NativeXAbstractType Unwrap(List <string> unwrappedReferences)
        {
            CodeScope scope = this.Scope;
            string    name  = this.ReferenceName;

            while (true)
            {
                if (scope == null || name == null || unwrappedReferences.Contains(name))
                {
                    break;
                }
                unwrappedReferences.Add(name);
                CodeNode node = this.Scope.Find(name);

                NativeXTypeRenameDeclaration typeRenameDeclaration = node as NativeXTypeRenameDeclaration;
                if (typeRenameDeclaration != null)
                {
                    NativeXAbstractReferenceType reference = typeRenameDeclaration.AbstractType as NativeXAbstractReferenceType;
                    if (reference != null)
                    {
                        scope = reference.Scope;
                        name  = reference.ReferenceName;
                    }
                }

                NativeXDeclaration declaration = node as NativeXDeclaration;
                if (declaration != null)
                {
                    NativeXAbstractType type = declaration.AbstractType;
                    return(type == null ? null : type.Unwrap(unwrappedReferences));
                }

                NativeXGenericParameter genericParameter = node as NativeXGenericParameter;
                if (genericParameter != null && genericParameter.ParameterName != null)
                {
                    return new NativeXAbstractGenericParameterType()
                           {
                               ParameterName = genericParameter.ParameterName
                           }
                }
                ;
            }
            return(base.Unwrap(unwrappedReferences));
        }
    }
Beispiel #23
0
        protected IEnumerable <TextEditorPopupItem> PopupGenericParameters(CodeScope scope)
        {
            Bitmap parameterImage            = null;
            List <TextEditorPopupItem> items = new List <TextEditorPopupItem>();

            foreach (CodeNode node in scope.FindAllDistinct())
            {
                NativeXGenericParameter genparam = node as NativeXGenericParameter;
                if (genparam != null && genparam.ParameterName != null)
                {
                    items.Add(new TextEditorPopupItem()
                    {
                        Text  = genparam.ParameterName,
                        Image = (parameterImage ?? (parameterImage = Images.Parameter))
                    });
                }
            }
            return(items);
        }
Beispiel #24
0
        protected IEnumerable <TextEditorPopupItem> CreatePopupConcepts(CodeScope scope)
        {
            Bitmap templateImage             = null;
            List <TextEditorPopupItem> items = new List <TextEditorPopupItem>();

            foreach (CodeNode node in scope.FindAllDistinct())
            {
                NativeXConceptDeclaration conceptdecl = node as NativeXConceptDeclaration;
                if (conceptdecl != null && conceptdecl.Name != null)
                {
                    items.Add(new TextEditorPopupItem()
                    {
                        Text  = conceptdecl.Name,
                        Image = (templateImage ?? (templateImage = Images.Template))
                    });
                }
            }
            return(items);
        }
Beispiel #25
0
 public override void WriteNotEqualsReturn(CodeWriter writer)
 {
     if (_type.IsValueType)
     {
         writer.WriteLine("if (!{0}.EqualsTo (that.{0}))", _name);
         using (CodeScope.CreateCSharpScope(writer))
         {
             writer.WriteLine("return false;");
         }
     }
     else
     {
         writer.WriteLine("if (null == {0} && null != that.{0} || null != {0} && !{0}.EqualsTo (that.{0}))", _name);
         using (CodeScope.CreateCSharpScope(writer))
         {
             writer.WriteLine("return false;");
         }
     }
 }
Beispiel #26
0
        public override void WriteNotEqualsReturn(CodeWriter writer)
        {
            writer.WriteLine("int {0}Length1 = null != {0} ? {0}.Length : 0 ;", _name);
            writer.WriteLine("int {0}Length2 = null != that.{0} ? that.{0}.Length : 0 ;", _name);
            writer.WriteLine("if ({0}Length1 != {0}Length2)", _name);
            using (CodeScope.CreateCSharpScope(writer))
            {
                writer.WriteLine("return false;");
            }

            writer.WriteLine("for (int i{1}= 0; i{1} < {0}Length1; ++i{1})", _name, writer.Indent);

            using (CodeScope.CreateCSharpScope(writer))
            {
                var elementType = _type.GetElementType();
                var itemName    = string.Format("{0}[i{1}]", _name, writer.Indent - 1);
                _WriteNotEqualsReturn(writer, elementType, itemName);
            }
        }
Beispiel #27
0
        private void _WriteEqualsToMethod(Type type, List <MemberBase> members)
        {
            _writer.WriteLine("[Export(ExportFlags.AutoCode)]");
            if (_rootTypes.Contains(type))
            {
                _writer.WriteLine("public virtual bool EqualsTo (IMetadata other)");
                using (CodeScope.CreateCSharpScope(_writer))
                {
                    _writer.WriteLine("throw new NotImplementedException(\"This method should be override~\");");
                }
            }
            else
            {
                var overrideText = _rootTypes.Contains(EditorMetaCommon.GetRootMetadata(type)) ? "override " : string.Empty;
                _writer.WriteLine("public {0}bool EqualsTo (IMetadata other)", overrideText);

                using (CodeScope.CreateCSharpScope(_writer))
                {
                    var typeName = EditorMetaCommon.GetNestedClassName(type);
                    _writer.WriteLine("var that = ({0}) other;", typeName);

                    if (type.IsClass)
                    {
                        _writer.WriteLine("if (null == that)");
                        using (CodeScope.CreateCSharpScope(_writer))
                        {
                            _writer.WriteLine("return false;");
                        }
                    }

                    var memberCount = members.Count;

                    for (int index = 0; index < memberCount; ++index)
                    {
                        var member = members[index];
                        member.WriteNotEqualsReturn(_writer);
                    }

                    _writer.WriteLine("return true;");
                }
            }
        }
Beispiel #28
0
        public override void WriteLoad(CodeWriter writer)
        {
            string childtype = EditorMetaCommon.GetNestedClassName(_type.GetElementType()).Replace("+", ".");
            string prefix    = childtype;
            string postfix   = string.Empty;
            int    first     = childtype.IndexOf("[", StringComparison.Ordinal);

            if (first >= 0)
            {
                prefix  = childtype.Substring(0, first);
                postfix = childtype.Substring(first);
            }

            writer.WriteLine("{0} = new {1}[reader.ReadInt32()]{2};", _name, prefix, postfix);
            writer.WriteLine("for (int i{1} = 0; i{1} < {0}.Length; i{1}++)", _name, writer.Indent);
            using (CodeScope.CreateCSharpScope(writer))
            {
                _WriteLoadType(writer, _type.GetElementType(), _name + string.Format("[i{0}]", writer.Indent - 1));
            }
        }
Beispiel #29
0
 private void _WriterMetadataManagerConfigs(List <string> configs)
 {
     using (_writer = new CodeWriter(_GetConfigManagerPath()))
     {
         _WriteFileHead();
         using (CodeScope.Create(_writer, "{\n", "}"))
         {
             _writer.WriteLine("public partial class ConfigManager");
             using (CodeScope.CreateCSharpScope(_writer))
             {
                 _writer.WriteLine("partial void _LoadConfigs()");
                 using (CodeScope.CreateCSharpScope(_writer))
                 {
                     foreach (var config in configs)
                     {
                         _writer.WriteLine("_AddLoaderConfig<{0}>();", config);
                     }
                 }
             }
         }
     }
 }
Beispiel #30
0
 private void _WriteMetadataManagerTemplates(List <string> templates)
 {
     using (_writer = new CodeWriter(_GetTemplateManagerPath()))
     {
         _WriteFileHead();
         using (CodeScope.Create(_writer, "{\n", "}"))
         {
             _writer.WriteLine("public partial class TemplateManager");
             using (CodeScope.CreateCSharpScope(_writer))
             {
                 _writer.WriteLine("partial void _LoadTemplates()");
                 using (CodeScope.CreateCSharpScope(_writer))
                 {
                     foreach (var template in templates)
                     {
                         _writer.WriteLine("_AddLoaderTemplate<{0}>();", template);
                     }
                 }
             }
         }
     }
 }
 public CodeMapEventArgs(CodeScope address)
 {
     CodeAddress = address;
 }
Beispiel #32
0
        public Error(Exception exp, StackFrame[] frames = null, bool snapshot = true)
        {
            #region HResult [Exception Type Code]

            HResult = exp.HResult;

            #endregion

            #region Error Line Column

            LineColumn = new CodeScope(exp);

            #endregion

            #region Method

            Method = (exp.TargetSite != null && exp.TargetSite.ReflectedType != null) ?
                    exp.TargetSite.ReflectedType.FullName + "." + exp.TargetSite : "";

            #endregion

            #region Id = HashCode
            Id = GetHashCode();
            #endregion

            #region Screen Capture

            // First initialize Snapshot of Error, because that's speed is important!
            if (!CacheController.SdfManager.ErrorIds.ContainsKey(Id) && snapshot)
            {
                Snapshot = ScreenCapture.Capture();

                if (Snapshot != null && ErrorHandlingOption.ResizeSnapshots)
                    Snapshot = Snapshot.ResizeImage(ScreenCapture.ReSizeAspectRatio.Width, ScreenCapture.ReSizeAspectRatio.Height);
            }

            #endregion

            #region StackTrace

            StackTrace = CodeScope.StackFramesToString(frames) ??
                (exp.InnerException != null
                ? exp.InnerException.StackTrace ?? ""
                : exp.StackTrace ?? "");

            #endregion

            #region Error Date Time

            ErrorDateTime = DateTime.Now;

            #endregion

            #region Server Date Time

            ServerDateTime = ErrorHandlingOption.FetchServerDateTime
                ? ServerTransmitter.SqlServerManager.GetServerDateTime()
                : DateTime.Now;

            #endregion

            #region Current Culture

            CurrentCulture = String.Format("{0} ({1})",
                    InputLanguage.CurrentInputLanguage.Culture.NativeName,
                    InputLanguage.CurrentInputLanguage.Culture.Name);

            #endregion

            #region Message

            Message = exp.InnerException != null ? exp.InnerException.Message : exp.Message;

            #endregion

            #region Member Type

            MemberType = (exp.TargetSite != null)
                    ? exp.TargetSite.MemberType.ToString()
                    : "";

            #endregion

            #region Module Name

            ModuleName =
                    (exp.TargetSite != null) ? exp.TargetSite.Module.Name : "";

            #endregion

            #region User [Domain.UserName]

            User = Environment.UserDomainName + "\\" + Environment.UserName;

            #endregion

            #region Host [Machine Name]

            Host = Environment.MachineName;

            #endregion

            #region Operation System Information

            OS = new OperationSystemInfo(true).ToString();

            #endregion

            #region Application Name [Name  v#####]

            AppName = Connection.GetRunningAppNameVersion();

            #endregion

            #region Process Name String List

            Processes = new CurrentProcesses().ToString();

            #endregion

            #region IsHandled default value is true

            IsHandled = true;

            #endregion

            #region Current Static Valid IPv4 Address

            IPv4Address = NetworkHelper.GetIpAddress();

            #endregion

            #region Network Physical Address [MAC HEX]

            MacAddress = NetworkHelper.GetMacAddress();

            #endregion

            #region Common Language Runtime Version [Major.Minor.Build.Revison]

            ClrVersion = Environment.Version.ToString();

            #endregion

            #region Error Type

            ErrorType = exp.GetType().Name;

            #endregion

            #region Source

            Source = exp.Source;

            #endregion

            #region Data

            Data = DictionaryToXml(GetAdditionalData(exp), "ExtraProperties");

            #endregion
        }