/// <summary> /// Contains code that will be called when recipe execution begins. This is the first method in the lifecycle. /// </summary> /// <param name="currentValue">An <see cref="T:System.Object"/> that contains the current value of the argument.</param> /// <param name="newValue">When this method returns, contains an <see cref="T:System.Object"/> that contains /// the new value of the argument, if the returned value /// of the method is <see langword="true"/>. Otherwise, it is ignored.</param> /// <returns> /// <see langword="true"/> if the argument value should be replaced with /// the value in <paramref name="newValue"/>; otherwise, <see langword="false"/>. /// </returns> /// <remarks>By default, always returns <see langword="false"/>, unless overriden by a derived class.</remarks> public override bool OnBeginRecipe(object currentValue, out object newValue) { DTE vs = GetService <DTE>(); ProjectItem item = vs.ActiveDocument.ProjectItem; newValue = null; if (item != null && item.FileCodeModel != null) { newValue = FileCodeModelHelper.GetCodeElement(vs, item.FileCodeModel, this.Argument.Type); return(true); } return(false); }
/// <summary> /// Performs the validation of the item passed as target /// Returns true if the reference is allowed to be executed in the target /// that is if the target is the CodeElement specified in the CodeElementTypeName property. /// </summary> /// <param name="target"></param> /// <returns></returns> public override bool IsEnabledFor(object target) { DTE vs = GetService <DTE>(); if (vs == null || vs.ActiveDocument == null) { return(false); } ProjectItem item = vs.ActiveDocument.ProjectItem; ITypeResolutionService typeResolutionService = GetService <ITypeResolutionService>(); if (item != null && item.FileCodeModel != null) { object element = FileCodeModelHelper.GetCodeElement(vs, item.FileCodeModel, typeResolutionService.GetType(codeElementTypeName)); return(element != null); } return(false); }