Esempio n. 1
0
        void EndListenerCheck(string tid)
        {
            IWriter[] writers = (IWriter[])ctx.GetExtensionObjects("/SimpleApp/ExtraWriters", typeof(IWriter));

            Hashtable newwriters = new Hashtable();

            for (int n = 0; n < writers.Length; n++)
            {
                string nwrit = writers[n].Id;

                // Check added events
                if (oldwriters.Contains(nwrit))
                {
                    Assert.IsFalse(added.Contains(nwrit), tid + ": incorrect Add event for node: " + writers[n].Write());
                    Assert.IsFalse(removed.Contains(nwrit), tid + ": incorrect Remove event for node: " + writers[n].Write());
                }
                else
                {
                    Assert.IsTrue(added.Contains(nwrit), tid + ": Add event not sent for node: " + writers[n].Write());
                }
                newwriters [nwrit] = nwrit;
            }

            // Check remove events
            foreach (string old in oldwriters.Keys)
            {
                if (!newwriters.Contains(old))
                {
                    Assert.IsTrue(removed.Contains(old), tid + ": Remove event not sent for node: " + old);
                }
            }

            ctx.RemoveExtensionNodeHandler("/SimpleApp/ExtraWriters", OnExtensionAddRemove);
        }
Esempio n. 2
0
        internal ProjectServiceExtension GetExtensionChain(IBuildTarget target)
        {
            ProjectServiceExtension chain;

            if (target != null)
            {
                lock (target) {
                    ExtensionChainInfo einfo = (ExtensionChainInfo)target.ExtendedProperties [typeof(ExtensionChainInfo)];
                    if (einfo == null)
                    {
                        einfo = new ExtensionChainInfo();
                        ExtensionContext ctx = AddinManager.CreateExtensionContext();
                        einfo.ExtensionContext         = ctx;
                        einfo.ItemTypeCondition        = new ItemTypeCondition(target.GetType());
                        einfo.ProjectLanguageCondition = new ProjectLanguageCondition(target);
                        ctx.RegisterCondition("ItemType", einfo.ItemTypeCondition);
                        ctx.RegisterCondition("ProjectLanguage", einfo.ProjectLanguageCondition);
                        target.ExtendedProperties [typeof(ExtensionChainInfo)] = einfo;
                    }
                    else
                    {
                        einfo.ItemTypeCondition.ObjType = target.GetType();
                        einfo.ProjectLanguageCondition.TargetProject = target;
                    }
                    ProjectServiceExtension[] extensions = einfo.ExtensionContext.GetExtensionObjects <ProjectServiceExtension> ("/MonoDevelop/ProjectModel/ProjectServiceExtensions");
                    chain = CreateExtensionChain(extensions);

                    // After creating the chain there is no need to keep the reference to the target
                    einfo.ProjectLanguageCondition.TargetProject = null;
                }
            }
            else
            {
                if (defaultExtensionChain == null)
                {
                    ExtensionContext ctx = AddinManager.CreateExtensionContext();
                    ctx.RegisterCondition("ItemType", new ItemTypeCondition(typeof(UnknownItem)));
                    ctx.RegisterCondition("ProjectLanguage", new ProjectLanguageCondition(UnknownItem.Instance));
                    ProjectServiceExtension[] extensions = ctx.GetExtensionObjects <ProjectServiceExtension> ("/MonoDevelop/ProjectModel/ProjectServiceExtensions");
                    defaultExtensionChain = CreateExtensionChain(extensions);
                }
                chain  = defaultExtensionChain;
                target = UnknownItem.Instance;
            }

            if (chain.SupportsItem(target))
            {
                return(chain);
            }
            else
            {
                return(chain.GetNext(target));
            }
        }
Esempio n. 3
0
        public ProjectServiceExtension GetExtensionChain(IBuildTarget target)
        {
            ProjectServiceExtension chain;

            if (target != null)
            {
                ExtensionChainInfo einfo = (ExtensionChainInfo)Thread.GetData(extensionChainSlot);
                if (einfo == null)
                {
                    einfo = new ExtensionChainInfo();
                    ExtensionContext ctx = AddinManager.CreateExtensionContext();
                    einfo.ExtensionContext         = ctx;
                    einfo.ItemTypeCondition        = new ItemTypeCondition(target.GetType());
                    einfo.ProjectLanguageCondition = new ProjectLanguageCondition(target);
                    ctx.RegisterCondition("ItemType", einfo.ItemTypeCondition);
                    ctx.RegisterCondition("ProjectLanguage", einfo.ProjectLanguageCondition);
                    Thread.SetData(extensionChainSlot, einfo);
                }
                else
                {
                    einfo.ItemTypeCondition.ObjType = target.GetType();
                    einfo.ProjectLanguageCondition.TargetProject = target;
                }
                ProjectServiceExtension[] extensions = einfo.ExtensionContext.GetExtensionObjects("/MonoDevelop/ProjectModel/ProjectServiceExtensions", typeof(ProjectServiceExtension)).Cast <ProjectServiceExtension> ().ToArray();
                chain = CreateExtensionChain(extensions);
            }
            else
            {
                if (defaultExtensionChain == null)
                {
                    ExtensionContext ctx = AddinManager.CreateExtensionContext();
                    ctx.RegisterCondition("ItemType", new ItemTypeCondition(typeof(UnknownItem)));
                    ctx.RegisterCondition("ProjectLanguage", new ProjectLanguageCondition(UnknownItem.Instance));
                    ProjectServiceExtension[] extensions = ctx.GetExtensionObjects("/MonoDevelop/ProjectModel/ProjectServiceExtensions", typeof(ProjectServiceExtension)).Cast <ProjectServiceExtension> ().ToArray();
                    defaultExtensionChain = CreateExtensionChain(extensions);
                }
                chain  = defaultExtensionChain;
                target = UnknownItem.Instance;
            }

            if (chain.SupportsItem(target))
            {
                return(chain);
            }
            else
            {
                return(chain.GetNext(target));
            }
        }
Esempio n. 4
0
        void CheckWriters(string test, ExtensionContext ctx, string path, params string[] values)
        {
            IWriter[] nodes;
            if (ctx != null)
            {
                nodes = (IWriter[])ctx.GetExtensionObjects(path, typeof(IWriter));
            }
            else
            {
                nodes = (IWriter[])AddinManager.GetExtensionObjects(path, typeof(IWriter));
            }

            Assert.AreEqual(nodes.Length, values.Length, test + " (count)");
            for (int n = 0; n < values.Length; n++)
            {
                Assert.AreEqual(values[n], nodes[n].Write(), test + " (result #" + n + ")");
            }
        }
 public IWriter[] GetWriters()
 {
     // Returns the IWriter objects registered in the Writers path
     return((IWriter[])ctx.GetExtensionObjects("/WriterService/Writers", typeof(IWriter)));
 }