Пример #1
0
 private static void RunProxyLargeDocLoad(int iterations, List <string> output, List <LargeDocumentViewModel> largeDocReference)
 {
     ClassConstructor.SetInstanceFactory(new ProxyInstanceFactory());
     _currentIsProxy = true;
     RunIterations(LoadLargeDocs, _largeDocumentReaders, iterations, output, "proxy", largeDocReference);
     ClassConstructor.SetInstanceFactory(new DefaultInstanceFactory());
 }
Пример #2
0
 private static void RunProxyBlogLoad(int iterations, List <string> output, List <BlogEntryViewModel> blogReferences)
 {
     ClassConstructor.SetInstanceFactory(new ProxyInstanceFactory());
     _currentIsProxy = true;
     RunIterations(LoadPosts, _blogPostReaders, iterations, output, "proxy", blogReferences);
     ClassConstructor.SetInstanceFactory(new DefaultInstanceFactory());
 }
Пример #3
0
        private static Action <TSrc, Targ> GetMapper <TSrc, Targ>()
        {
            Type target = typeof(Targ);
            Type src    = typeof(TSrc);
            var  name   = string.Format("{0}To{1}", Utility.GetValidString(src.FullName), Utility.GetValidString(target.FullName));

            return((Action <TSrc, Targ>)delegates.GetOrAdd(name, (n) =>
            {
                var srcProps = src.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                var trgtProps = target.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);

                var sr = Expression.Parameter(src);
                var trgt = Expression.Parameter(target);


                ClassConstructor cc = new ClassConstructor(name);
                MethodConstructor mc = new MethodConstructor("Copy",
                                                             Expression.Lambda <Action <TSrc, Targ> >(
                                                                 Expression.Block(
                                                                     (from item in trgtProps
                                                                      from s in srcProps
                                                                      where item.Name == s.Name && item.PropertyType == s.PropertyType
                                                                      select Expression.Assign(Expression.Property(trgt, item.Name), Expression.Property(sr, item.Name)))), sr, trgt),
                                                             System.Reflection.MethodAttributes.Public | System.Reflection.MethodAttributes.Static);
                cc.AddMethod(mc);
                _manager.AddType(cc);
                _manager.BuildClass(AppDomain.CurrentDomain, cc.Name);
                return mc.CreateDelegate(typeof(Action <TSrc, Targ>));
            }));
        }
 public ReadOnlyClassConstructor(IClassType declaringType, ClassConstructor constructor)
 {
     this.declaringType = declaringType;
     this.constructor   = constructor;
     body       = new ReadOnlyMethodBody(constructor.Statements);
     parameters = constructor.Parameters.ToArray(parameter => new ReadOnlyConstructorParameter(parameter));
 }
Пример #5
0
        void Generate(ClassConstructorModel model)
        {
            var template = new ClassConstructor(model);
            var content  = template.TransformText();
            var fileName = String.Concat(model.Name, "Constructor", _options.Extension);

            _files.Add(new GeneratedFile(content, fileName));
        }
Пример #6
0
        public ActionResult ValueShouldMatchCmsContent()
        {
            ClassConstructor.SetInstanceFactory(new DefaultInstanceFactory());
            var referenceModel = Vault.Context.GetByDocumentType <BlogEntryViewModel>().FirstOrDefault();

            ClassConstructor.SetInstanceFactory(new ProxyInstanceFactory());
            var proxyModel = Vault.Context.GetContentById <BlogEntryViewModel>(referenceModel.CmsContent.Id);

            var result = Content(FormatResult(referenceModel.Content, referenceModel.Content, proxyModel.Content), "text/html");

            ClassConstructor.SetInstanceFactory(new DefaultInstanceFactory());

            return(result);
        }
Пример #7
0
        public void TextExitEvent()
        {
            Guid newId = Guid.NewGuid();

            string tempFileName = Path.Combine(Path.GetTempPath(), newId.ToString());

            try
            {
                AcmaExternalExitEventCmd e = new AcmaExternalExitEventCmd();
                e.ID        = "test external event";
                e.RuleGroup = new RuleGroup()
                {
                    Operator = GroupOperator.Any
                };
                e.RuleGroup.Items.Add(new ObjectChangeRule()
                {
                    TriggerEvents = TriggerEvents.Add
                });
                e.CommandLine = "cmd.exe";
                e.Arguments   = new ValueDeclaration("/c dir >> " + tempFileName.Replace(@"\", @"\\"));

                if (!ActiveConfig.XmlConfig.ClassConstructors.Contains("person"))
                {
                    ClassConstructor constructor = new ClassConstructor();
                    constructor.ObjectClass = ActiveConfig.DB.GetObjectClass("person");
                    ActiveConfig.XmlConfig.ClassConstructors.Add(constructor);
                }

                ActiveConfig.XmlConfig.ClassConstructors["person"].ExitEvents.Add(e);

                MAObjectHologram sourceObject = ActiveConfig.DB.CreateMAObject(newId, "person");
                sourceObject.SetAttributeValue(ActiveConfig.DB.GetAttribute("mail"), "*****@*****.**");
                sourceObject.CommitCSEntryChange();

                if (!System.IO.File.Exists(tempFileName))
                {
                    Assert.Fail("The external event did not created the expected file");
                }
            }
            finally
            {
                if (System.IO.File.Exists(tempFileName))
                {
                    System.IO.File.Delete(tempFileName);
                }
            }
        }
Пример #8
0
        public ActionResult ValueShouldBeOverWritten()
        {
            const string OverrideContent = "This content has been overwritten";

            ClassConstructor.SetInstanceFactory(new DefaultInstanceFactory());
            var referenceModel = Vault.Context.GetByDocumentType <BlogEntryViewModel>().FirstOrDefault();

            ClassConstructor.SetInstanceFactory(new ProxyInstanceFactory());
            var proxyModel = Vault.Context.GetContentById <BlogEntryViewModel>(referenceModel.CmsContent.Id);

            proxyModel.Content = OverrideContent;

            var result = Content(FormatResult(referenceModel.Content, OverrideContent, proxyModel.Content), "text/html");

            ClassConstructor.SetInstanceFactory(new DefaultInstanceFactory());

            return(result);
        }
Пример #9
0
            public _Ctor(ClassConstructor def, VectorInstFromScriptClass inst) : base(inst)
            {
                var defParams = def.getParameters();

                var instParams = (defParams.length == 0)
                    ? Array.Empty <MethodTraitParameter>()
                    : new MethodTraitParameter[defParams.length];

                for (int i = 0; i < instParams.Length; i++)
                {
                    var defParam      = defParams[i];
                    var instParamType = inst._substituteElement(defParam.type);
                    instParams[i] = new MethodTraitParameter(
                        defParam.name, instParamType, defParam.isOptional, defParam.hasDefault, defParam.defaultValue);
                }

                setSignature(instParams, def.hasRest);
                setMetadata(def.metadata);
                setUnderlyingCtorInfo(def.underlyingConstructorInfo);
            }
Пример #10
0
        public override JSValue Evaluate(Context context)
        {
            JSValue variable = null;

            if ((_codeContext & CodeContext.InExpression) == 0)
            {
                variable = context.DefineVariable(Name);
            }

            var ctor = new ClassConstructor(context, _constructor, this)
            {
                RequireNewKeywordLevel = RequireNewKeywordLevel.WithNewOnly
            };

            if (_baseClass != null)
            {
                JSValue baseProto = _baseClass.Evaluate(context)._oValue as JSObject;
                if (baseProto == null)
                {
                    ctor.prototype.__proto__ = null;
                }
                else
                {
                    ctor.prototype.__proto__ = Tools.InvokeGetter(baseProto.GetProperty("prototype"), baseProto)._oValue as JSObject;
                }
                ctor.__proto__ = baseProto as JSObject;
            }

            foreach (var member in _members)
            {
                var value  = member.Value.Evaluate(context);
                var target = member.Static ? ctor : ctor.prototype;

                target.SetProperty(member.Name.Evaluate(null), value, true);
            }

            foreach (var prop in computedProperties)
            {
                JSObject target = prop.Static ? ctor : ctor.prototype._oValue as JSObject;

                var key   = prop._name.Evaluate(context).CloneImpl(false);
                var value = prop._value.Evaluate(context).CloneImpl(false);

                JSValue existedValue;
                Symbol  symbolKey = null;
                string  stringKey = null;
                if (key.Is <Symbol>())
                {
                    symbolKey = key.As <Symbol>();
                    if (target._symbols == null)
                    {
                        target._symbols = new Dictionary <Symbol, JSValue>();
                    }

                    if (!target._symbols.TryGetValue(symbolKey, out existedValue))
                    {
                        target._symbols[symbolKey] = existedValue = value;
                    }
                }
                else
                {
                    stringKey = key.As <string>();
                    if (!target._fields.TryGetValue(stringKey, out existedValue))
                    {
                        target._fields[stringKey] = existedValue = value;
                    }
                }

                if (existedValue == value)
                {
                    continue;
                }

                if (existedValue.Is(JSValueType.Property) && value.Is(JSValueType.Property))
                {
                    var egs = existedValue.As <Core.PropertyPair>();
                    var ngs = value.As <Core.PropertyPair>();
                    egs.getter = ngs.getter ?? egs.getter;
                    egs.setter = ngs.setter ?? egs.setter;
                }
                else
                {
                    if (key.Is <Symbol>())
                    {
                        target._symbols[symbolKey] = value;
                    }
                    else
                    {
                        target._fields[stringKey] = value;
                    }
                }
            }

            if ((_codeContext & CodeContext.InExpression) == 0)
            {
                variable.Assign(ctor);
            }
            return(ctor);
        }
Пример #11
0
        public void TestSerialization()
        {
            AttributeValueDeleteConstructor constructorToSerialize1 = new AttributeValueDeleteConstructor();

            constructorToSerialize1.Attribute   = ActiveConfig.DB.GetAttribute("sn");
            constructorToSerialize1.ID          = "abc123";
            constructorToSerialize1.Description = "some description";
            constructorToSerialize1.RuleGroup   = new RuleGroup()
            {
                Operator = GroupOperator.Any
            };
            constructorToSerialize1.RuleGroup.Items.Add(new ObjectChangeRule()
            {
                TriggerEvents = TriggerEvents.Delete
            });

            AttributeValueDeleteConstructor constructorToSerialize2 = new AttributeValueDeleteConstructor();

            constructorToSerialize2.Attribute   = ActiveConfig.DB.GetAttribute("sn");
            constructorToSerialize2.ID          = "abc123";
            constructorToSerialize2.Description = "some description";
            constructorToSerialize2.RuleGroup   = new RuleGroup()
            {
                Operator = GroupOperator.All
            };
            constructorToSerialize2.RuleGroup.Items.Add(new ObjectChangeRule()
            {
                TriggerEvents = TriggerEvents.Add
            });

            AttributeConstructorGroup groupToSerialize = new AttributeConstructorGroup();

            groupToSerialize.Description   = "my description";
            groupToSerialize.ID            = "myID";
            groupToSerialize.ExecutionRule = GroupExecutionRule.ExitAfterFirstSuccess;
            groupToSerialize.RuleGroup     = new RuleGroup()
            {
                Operator = GroupOperator.Any
            };
            groupToSerialize.RuleGroup.Items.Add(new ObjectChangeRule()
            {
                TriggerEvents = TriggerEvents.Delete
            });
            groupToSerialize.Constructors.Add(constructorToSerialize1);

            ClassConstructor classConstructorToSerialize = new ClassConstructor();

            classConstructorToSerialize.ObjectClass = ActiveConfig.DB.GetObjectClass("person");
            classConstructorToSerialize.ExitEvents.Add(new AcmaInternalExitEvent()
            {
                ID = "testName"
            });
            classConstructorToSerialize.Constructors.Add(groupToSerialize);
            classConstructorToSerialize.Constructors.Add(constructorToSerialize2);

            classConstructorToSerialize.ResurrectionParameters          = new DBQueryGroup();
            classConstructorToSerialize.ResurrectionParameters.Operator = GroupOperator.Any;
            classConstructorToSerialize.ResurrectionParameters.DBQueries.Add(new DBQueryByValue(ActiveConfig.DB.GetAttribute("sn"), ValueOperator.Equals, new ValueDeclaration("test")));
            classConstructorToSerialize.ResurrectionParameters.DBQueries.Add(new DBQueryByValue(ActiveConfig.DB.GetAttribute("sn"), ValueOperator.Equals, ActiveConfig.DB.GetAttribute("sn")));

            XmlConfigFile toSerialize = new XmlConfigFile();

            toSerialize.ClassConstructors.Add(classConstructorToSerialize);
            toSerialize.Transforms = new TransformKeyedCollection();
            toSerialize.Transforms.Add(new TrimStringTransform()
            {
                TrimType = TrimType.Both, ID = "trimboth"
            });
            UniqueIDCache.ClearIdCache();

            XmlConfigFile deserialized = UnitTestControl.XmlSerializeRoundTrip <XmlConfigFile>(toSerialize);

            Assert.AreEqual(toSerialize.ClassConstructors.Count, deserialized.ClassConstructors.Count);
            Assert.AreEqual(toSerialize.Transforms.Count, deserialized.Transforms.Count);
        }
Пример #12
0
        public void Add(TLDefinition tld, Stream srcStm)
        {
            TLFunction tlf = tld as TLFunction;

            if (tlf != null)
            {
                if (IsConstructor(tlf.Signature, tlf.Class))
                {
                    Constructors.Add(tlf, srcStm);
                }
                else if (tlf.Signature is SwiftClassConstructorType)
                {
                    if (ClassConstructor.Values.Count() == 0)
                    {
                        ClassConstructor.Add(tlf, srcStm);
                    }
                    else
                    {
                        throw ErrorHelper.CreateError(ReflectorError.kInventoryBase + 12, $"multiple type metadata accessors for {tlf.Class.ClassName.ToFullyQualifiedName ()}");
                    }
                }
                else if (IsDestructor(tlf.Signature, tlf.Class))
                {
                    Destructors.Add(tlf, srcStm);
                }
                else if (IsProperty(tlf.Signature, tlf.Class))
                {
                    if (IsSubscript(tlf.Signature, tlf.Class))
                    {
                        if (IsPrivateProperty(tlf.Signature, tlf.Class))
                        {
                            PrivateSubscripts.Add(tlf);
                        }
                        else
                        {
                            Subscripts.Add(tlf);
                        }
                    }
                    else
                    {
                        if (IsStaticProperty(tlf.Signature, tlf.Class))
                        {
                            if (IsPrivateProperty(tlf.Signature, tlf.Class))
                            {
                                StaticPrivateProperties.Add(tlf, srcStm);
                            }
                            else
                            {
                                StaticProperties.Add(tlf, srcStm);
                            }
                        }
                        else
                        {
                            if (IsPrivateProperty(tlf.Signature, tlf.Class))
                            {
                                PrivateProperties.Add(tlf, srcStm);
                            }
                            else
                            {
                                Properties.Add(tlf, srcStm);
                            }
                        }
                    }
                }
                else if (IsMethodOnClass(tlf.Signature, tlf.Class))
                {
                    if (tlf is TLMethodDescriptor)
                    {
                        MethodDescriptors.Add(tlf, srcStm);
                    }
                    else
                    {
                        Methods.Add(tlf, srcStm);
                    }
                }
                else if (IsStaticMethod(tlf.Signature, tlf.Class))
                {
                    StaticFunctions.Add(tlf, srcStm);
                }
                else if (IsWitnessTable(tlf.Signature, tlf.Class))
                {
                    WitnessTable.Add(tlf, srcStm);
                }
                else if (IsInitializer(tlf.Signature, tlf.Class))
                {
                    Initializers.Add(tlf, srcStm);
                }
                else
                {
                    FunctionsOfUnknownDestination.Add(tlf);
                }
                return;
            }
            var meta = tld as TLDirectMetadata;

            if (meta != null)
            {
                if (DirectMetadata != null)
                {
                    throw ErrorHelper.CreateError(ReflectorError.kInventoryBase + 13, $"duplicate direct metadata in class {DirectMetadata.Class.ClassName.ToFullyQualifiedName ()}");
                }
                DirectMetadata = meta;
                return;
            }
            var lazy = tld as TLLazyCacheVariable;

            if (lazy != null)
            {
                if (LazyCacheVariable != null)
                {
                    throw ErrorHelper.CreateError(ReflectorError.kInventoryBase + 14, $"duplicate lazy cache variable in class {LazyCacheVariable.Class.ClassName.ToFullyQualifiedName ()}");
                }
                LazyCacheVariable = lazy;
                return;
            }
            var mc = tld as TLMetaclass;

            if (mc != null)
            {
                if (Metaclass != null)
                {
                    throw ErrorHelper.CreateError(ReflectorError.kInventoryBase + 15, $"duplicate type meta data descriptor in class {Metaclass.Class.ClassName.ToFullyQualifiedName ()}");
                }
                Metaclass = mc;
                return;
            }
            var nom = tld as TLNominalTypeDescriptor;

            if (nom != null)
            {
                if (TypeDescriptor != null)
                {
                    throw ErrorHelper.CreateError(ReflectorError.kInventoryBase + 16, $"duplicate nominal type descriptor in class {TypeDescriptor.Class.ClassName.ToFullyQualifiedName ()}");
                }
                TypeDescriptor = nom;
                return;
            }
            var tlvar = tld as TLVariable;

            if (tlvar != null)
            {
                if (tlvar is TLPropertyDescriptor tlpropDesc)
                {
                    PropertyDescriptors.Add(tlpropDesc);
                }
                else
                {
                    Variables.Add(tlvar, srcStm);
                }
                return;
            }
            var tlprot = tld as TLProtocolConformanceDescriptor;

            if (tlprot != null)
            {
                ProtocolConformanceDescriptors.Add(tlprot);
                return;
            }
            DefinitionsOfUnknownDestination.Add(tld);
        }
Пример #13
0
        public void TestSerialization()
        {
            AttributeValueDeleteConstructor constructorToSerialize1 = new AttributeValueDeleteConstructor();

            constructorToSerialize1.Attribute   = ActiveConfig.DB.GetAttribute("sn");
            constructorToSerialize1.ID          = "abc123";
            constructorToSerialize1.Description = "some description";
            constructorToSerialize1.RuleGroup   = new RuleGroup()
            {
                Operator = GroupOperator.Any
            };
            constructorToSerialize1.RuleGroup.Items.Add(new ObjectChangeRule()
            {
                TriggerEvents = TriggerEvents.Delete
            });

            AttributeValueDeleteConstructor constructorToSerialize2 = new AttributeValueDeleteConstructor();

            constructorToSerialize2.Attribute   = ActiveConfig.DB.GetAttribute("sn");
            constructorToSerialize2.ID          = "abc123";
            constructorToSerialize2.Description = "some description";
            constructorToSerialize2.RuleGroup   = new RuleGroup()
            {
                Operator = GroupOperator.All
            };
            constructorToSerialize2.RuleGroup.Items.Add(new ObjectChangeRule()
            {
                TriggerEvents = TriggerEvents.Add
            });

            AttributeConstructorGroup groupToSerialize = new AttributeConstructorGroup();

            groupToSerialize.Description   = "my description";
            groupToSerialize.ID            = "myID";
            groupToSerialize.ExecutionRule = GroupExecutionRule.ExitAfterFirstSuccess;
            groupToSerialize.RuleGroup     = new RuleGroup()
            {
                Operator = GroupOperator.Any
            };
            groupToSerialize.RuleGroup.Items.Add(new ObjectChangeRule()
            {
                TriggerEvents = TriggerEvents.Delete
            });
            groupToSerialize.Constructors.Add(constructorToSerialize1);

            ClassConstructor toSerialize = new ClassConstructor();

            toSerialize.ObjectClass = ActiveConfig.DB.GetObjectClass("person");
            toSerialize.ExitEvents.Add(new AcmaInternalExitEvent()
            {
                ID = "testName"
            });
            toSerialize.Constructors.Add(groupToSerialize);
            toSerialize.Constructors.Add(constructorToSerialize2);

            toSerialize.ResurrectionParameters          = new DBQueryGroup();
            toSerialize.ResurrectionParameters.Operator = GroupOperator.Any;
            toSerialize.ResurrectionParameters.DBQueries.Add(new DBQueryByValue(ActiveConfig.DB.GetAttribute("sn"), ValueOperator.Equals, new ValueDeclaration("test")));
            toSerialize.ResurrectionParameters.DBQueries.Add(new DBQueryByValue(ActiveConfig.DB.GetAttribute("sn"), ValueOperator.Equals, ActiveConfig.DB.GetAttribute("sn")));

            UniqueIDCache.ClearIdCache();
            ClassConstructor deserialized = UnitTestControl.XmlSerializeRoundTrip <ClassConstructor>(toSerialize);

            Assert.AreEqual(groupToSerialize.ExecutionRule, ((AttributeConstructorGroup)deserialized.Constructors[0]).ExecutionRule);
            Assert.AreEqual(groupToSerialize.ID, ((AttributeConstructorGroup)deserialized.Constructors[0]).ID);
            Assert.AreEqual(groupToSerialize.Description, ((AttributeConstructorGroup)deserialized.Constructors[0]).Description);
            Assert.AreEqual(groupToSerialize.RuleGroup.Operator, ((AttributeConstructorGroup)deserialized.Constructors[0]).RuleGroup.Operator);
            Assert.AreEqual(((ObjectChangeRule)groupToSerialize.RuleGroup.Items[0]).TriggerEvents, ((ObjectChangeRule)((AttributeConstructorGroup)deserialized.Constructors[0]).RuleGroup.Items[0]).TriggerEvents);

            Assert.AreEqual(constructorToSerialize2.Attribute, ((AttributeConstructor)deserialized.Constructors[1]).Attribute);
            Assert.AreEqual(constructorToSerialize2.ID, ((AttributeConstructor)deserialized.Constructors[1]).ID);
            Assert.AreEqual(constructorToSerialize2.Description, ((AttributeConstructor)deserialized.Constructors[1]).Description);
            Assert.AreEqual(constructorToSerialize2.RuleGroup.Operator, ((AttributeConstructor)deserialized.Constructors[1]).RuleGroup.Operator);
            Assert.AreEqual(((ObjectChangeRule)constructorToSerialize2.RuleGroup.Items[0]).TriggerEvents, ((ObjectChangeRule)((AttributeConstructor)deserialized.Constructors[1]).RuleGroup.Items[0]).TriggerEvents);
        }
Пример #14
0
 protected override void OnApplicationStarting(object sender, EventArgs e)
 {
     RouteConfig.RegisterRoutes(RouteTable.Routes);
     ClassConstructor.SetInstanceFactory(new ProxyInstanceFactory());
 }
Пример #15
0
 internal new void setConstructor(ClassConstructor ctor) => base.setConstructor(ctor);