internal override bool TryParse(ResolutionResult resolutionResult, AddinResolution addin, BaseExtensionPointResolution parent,
                                 out ExtensionBuilderResolution result)
 {
     result = new NewOrUpdatedReferencedExtensionBuilderResolution(addin)
     {
         Name = Name,
         ExtensionPointName = ExtensionPointName,
         ParentPath         = ParentPath,
         Parent             = parent
     };
     if (_children != null)
     {
         foreach (var child in _children)
         {
             ExtensionBuilderResolution eb;
             if (!child.TryParse(resolutionResult, addin, result, out eb))
             {
                 return(false);
             }
             eb.ParentPath             = Path; // The parent path of an extension builder
             eb.ParentIsExtensionPoint = false;
             result.AddChild(eb);
         }
     }
     return(true);
 }
 internal override bool TryParse(IMessageDialog dialog, AddinResolution addin, BaseExtensionPointResolution parent,
                                 out ExtensionBuilderResolution result)
 {
     result = new NewReferencedExtensionBuilderResolution(addin)
     {
         Id = Id,
         ExtensionPointId = ExtensionPointId,
         ParentPath       = ParentPath,
         Parent           = parent
     };
     if (_children != null)
     {
         foreach (var child in _children)
         {
             ExtensionBuilderResolution eb;
             if (!child.TryParse(dialog, addin, result, out eb))
             {
                 return(false);
             }
             eb.ParentPath             = Path; // The parent path of an extension builder
             eb.ParentIsExtensionPoint = false;
             result.AddChild(eb);
         }
     }
     return(true);
 }
 public void UnregisterExtensionBuilder(ExtensionBuilderResolution extensionBuilder)
 {
     _path2ExtensionBuilders.Remove(extensionBuilder.Path);
     if (extensionBuilder.Uid != UidStorage.InvalidExtensionBuilderUid)
     {
         _uid2ExtensionBuilders.Remove(extensionBuilder.Uid);
     }
 }
 public void RegisterExtensionBuilder(ExtensionBuilderResolution extensionBuilder)
 {
     _path2ExtensionBuilders.Add(extensionBuilder.Path, extensionBuilder);
     if (extensionBuilder.Uid != UidStorage.InvalidExtensionBuilderUid)
     {
         _uid2ExtensionBuilders.Add(extensionBuilder.Uid, extensionBuilder);
     }
 }
 // returns null if sucessful, otherwise return an existing ExtensionPointResolution
 public bool TryRegisterExtensionBuilder(ResolutionResult resolutionResult, ExtensionBuilderResolution newExtensionBuilder,
                                         out ExtensionBuilderResolution existingExtensionBuilder)
 {
     if (_path2ExtensionBuilders.TryGetValue(newExtensionBuilder.Path, out existingExtensionBuilder))
     {
         resolutionResult.AddError("&&&&&&&&&&&&&&&&");
         return(false);
     }
     _path2ExtensionBuilders.Add(newExtensionBuilder.Path, newExtensionBuilder);
     return(true);
 }
示例#6
0
 // returns null if sucessful, otherwise return an existing ExtensionPointResolution
 public bool TryRegisterExtensionBuilder(IMessageDialog dialog, ExtensionBuilderResolution newExtensionBuilder,
                                         out ExtensionBuilderResolution existingExtensionBuilder)
 {
     if (_path2ExtensionBuilders.TryGetValue(newExtensionBuilder.Path, out existingExtensionBuilder))
     {
         dialog.AddError("");
         return(false);
     }
     _path2ExtensionBuilders.Add(newExtensionBuilder.Path, newExtensionBuilder);
     return(true);
 }
        /// <summary>
        /// The extension type of the extension builders must be the same as that of its parent.
        /// </summary>
        internal static bool ExtensionTypeMatchesParent(this ExtensionBuilderResolution eb, IMessageDialog dialog, TypeResolution extensionType)
        {
            var result    = extensionType.Equals(eb.Parent.ExtensionType); // can not use ReferenceEquals here!!!!
            var parenteEb = eb.Parent as ExtensionBuilderResolution;

            if (!result)
            {
                dialog.AddError(string.Format(
                                    "The extension type of extension builder must match that of its parent, while the extension type of the extension builder [{0}] is [{1}], and that of its parent [{2}] is [{3}], which does not match!", eb.Path, extensionType.TypeName, parenteEb != null ? parenteEb.Path : eb.Parent.Id, eb.Parent.ExtensionType.TypeName));
            }
            return(result);
        }
示例#8
0
        // if we can find the referenced extension builder, the resolution is done.
        protected override ResolutionStatus DoResolve(ResolutionResult resolutionResult, ConvertionManager convertionManager, ResolutionContext ctx)
        {
            // Tries to get the parent
            if (Parent == null)
            {
                BaseExtensionPointResolution objParent;
                if (ParentIsExtensionPoint)
                {
                    ExtensionPointResolution parent;
                    if (!ctx.TryGetExtensionPoint(resolutionResult, ParentPath, out parent))
                    {
                        resolutionResult.AddError(string.Format("Can not find the parent of the specified extension builder [{0}] with path [{1}]!", TypeName, ParentPath));
                        return(ResolutionStatus.Failed);
                    }

                    Parent = parent;
                    DeclaringAddin.AddExtendedExtensionPoint(parent);
                    objParent = parent;
                }
                else
                {
                    ExtensionBuilderResolution parent;
                    if (!ctx.TryGetExtensionBuilder(resolutionResult, ParentPath, out parent))
                    {
                        resolutionResult.AddError(string.Format("Can not find the parent of the specified extension builder [{0}] with path [{1}]!", TypeName, ParentPath));
                        return(ResolutionStatus.Failed);
                    }

                    Parent = parent;
                    var ep = GetExtensionPointFor(parent);
                    if (ep == null)
                    {
                        return(ResolutionStatus.Pending); // the extension point is probably not available right now.
                    }
                    DeclaringAddin.AddExtendedExtensionPoint(ep);
                    objParent = parent;
                }

                if (objParent.DeclaringAddin != null && !ReferenceEquals(objParent.DeclaringAddin, DeclaringAddin))
                {
                    if (objParent.Type == null)
                    {
                        return(ResolutionStatus.Pending);
                    }
                    // The parent of current extension builder is not defined in the same addin as it is,
                    // so we needs to add its declaring addin as a reference (the type of the parent must
                    // be loaded before this extension builder at start up).
                    AssemblyResolutionSet assemblySet;
                    if (!ctx.TryGetAssemblySet(objParent.Type.Assembly.AssemblyKey, out assemblySet))
                    {
                        throw new Exception();
                    }
                    DeclaringAddin.AddReferencedAssemblySet(assemblySet);
                }
            }

            if (_referenced == null)
            {
                var referenced = TryFindReferencedExtensionBuilder(Parent, Name);
                if (referenced == null)
                {
                    if (!ctx.TryGetExtensionBuilder(resolutionResult, Path, out referenced))
                    {
                        return(ResolutionStatus.Failed);
                    }
                }

                if (referenced.DeclaringAddin != null && !ReferenceEquals(referenced.DeclaringAddin, DeclaringAddin))
                {
                    if (referenced.Type == null)
                    {
                        return(ResolutionStatus.Pending);
                    }
                    // The parent of current extension builder is not defined in the same addin as it is,
                    // so we needs to add its declaring addin as a reference (the type of the parent must
                    // be loaded before this extension builder at start up).
                    AssemblyResolutionSet assemblySet;
                    if (!ctx.TryGetAssemblySet(referenced.Type.Assembly.AssemblyKey, out assemblySet))
                    {
                        throw new Exception();
                    }
                    DeclaringAddin.AddReferencedAssemblySet(assemblySet);
                }

                _referenced = referenced;
            }

            return(ResolveAddin(Parent) | _referenced.Resolve(resolutionResult, convertionManager, ctx));
        }
 public bool TryGetExtensionBuilder(ResolutionResult resolutionResult, int extensionBuilderUid, out ExtensionBuilderResolution extensionBuilder)
 {
     return(_uid2ExtensionBuilders.TryGetValue(extensionBuilderUid, out extensionBuilder));
 }
 public bool TryGetExtensionBuilder(ResolutionResult resolutionResult, string extensionBuilderPath, out ExtensionBuilderResolution extensionBuilder)
 {
     return(_path2ExtensionBuilders.TryGetValue(extensionBuilderPath, out extensionBuilder));
 }
示例#11
0
 public bool TryGetExtensionBuilder(IMessageDialog dialog, int extensionBuilderUid, out ExtensionBuilderResolution extensionBuilder)
 {
     return(_uid2ExtensionBuilders.TryGetValue(extensionBuilderUid, out extensionBuilder));
 }
示例#12
0
 public bool TryGetExtensionBuilder(IMessageDialog dialog, string extensionBuilderPath, out ExtensionBuilderResolution extensionBuilder)
 {
     return(_path2ExtensionBuilders.TryGetValue(extensionBuilderPath, out extensionBuilder));
 }
 internal abstract bool TryParse(ResolutionResult resolutionResult, AddinResolution addin, BaseExtensionPointResolution parent,
                                 out ExtensionBuilderResolution result);
 internal static bool InheritFromCompositeExtensionBuilderInterface(
     this ExtensionBuilderResolution eb, IMessageDialog dialog, ResolutionContext ctx, out TypeResolution extensionType)
 {
     return(eb.Type.ImplementsCompositeExtensionBuilderInterface(dialog, ctx, out extensionType));
 }
 internal abstract bool TryParse(IMessageDialog dialog, AddinResolution addin, BaseExtensionPointResolution parent,
                                 out ExtensionBuilderResolution result);