public override bool OnBeginRecipe(object currentValue, out object newValue)
        {
            newValue = null;
            if (currentValue == null)
            {
                CodeClass currentDSAClass = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                                                          currentDSAClassExpression) as CodeClass;
                string propertyName = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                                                    propertyNameExpression) as string;

                bool   built      = true;
                object builtValue = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                                                  builtExpression);
                if (builtValue != null)
                {
                    built = (bool)builtValue;
                }

                if (currentDSAClass != null && built)
                {
                    Type dsaType = DteConverter.ToType(currentDSAClass);
                    if (dsaType != null)
                    {
                        newValue = dsaType.InvokeMember(propertyName, BindingFlags.Static | BindingFlags.Public | BindingFlags.GetProperty, null, null, null);
                        if (newValue != null)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
        public override bool OnBeginRecipe(object currentValue, out object newValue)
        {
            newValue = null;
            if (currentValue == null)
            {
                CodeClass currentDSAClass = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                currentDSAClassExpression) as CodeClass;
                string methodName = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                methodNameExpression) as string;

                bool built = true;
                object builtValue = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                builtExpression);
                if (builtValue != null)
                { built = (bool)builtValue; }

                if (currentDSAClass != null && built)
                {
                    Type dsaType = DteConverter.ToType(currentDSAClass);
                    if (dsaType != null)
                    {
                        MethodInfo method=dsaType.GetMethod(methodName);
                        if (method != null
                            && method.IsStatic
                            && method.GetParameters().Length==0)
                        {
                            newValue = method.Invoke(null, null);
                            newValue = MethodBehaviorHelper.TranslateToOfflineBehavior(newValue);
                        }
                    }
                }

            }
            return currentValue!=newValue;
        }
        public override bool OnBeginRecipe(object currentValue, out object newValue)
        {
            newValue = null;
            if (currentValue == null)
            {
                CodeClass currentDSAClass = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                                                          currentDSAClassExpression) as CodeClass;
                Type proxyType = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                                               proxyTypeExpression) as Type;

                if (currentDSAClass != null && proxyType != null)
                {
                    Type dsaType = DteConverter.ToType(currentDSAClass);
                    if (dsaType != null)
                    {
                        newValue = MethodBehaviorHelper.GetMethodsBehavior(dsaType, proxyType);
                    }
                }
            }
            return(currentValue != newValue);
        }
Esempio n. 4
0
        public override bool OnBeginRecipe(object currentValue, out object newValue)
        {
            DTE vs = GetService <DTE>(true);

            newValue = null;
            if (vs.SelectedItems.Item(1).Project == null)
            {
                ProjectItem webRef = vs.SelectedItems.Item(1).ProjectItem;
                if (webRef == null)
                {
                    throw new InvalidOperationException(Properties.Resources.NoProxyFound);
                }

                ProjectItem proxyItem = FindProxyClass(webRef.ProjectItems);
                if (proxyItem == null)
                {
                    throw new InvalidOperationException(Properties.Resources.NoProxyFound);
                }
                if (proxyItem.FileCodeModel == null)
                {
                    throw new InvalidOperationException(Properties.Resources.NoProxyFound);
                }

                bool   built      = true;
                object builtValue = ExpressionEvaluationHelper.EvaluateExpression((IDictionaryService)GetService(typeof(IDictionaryService)),
                                                                                  builtExpression);
                if (builtValue != null)
                {
                    built = (bool)builtValue;
                }

                if (built)
                {
                    CodeClass proxyTypeCodeClass = CodeModelHelper.FindFirstClass(proxyItem.FileCodeModel.CodeElements, CodeModelHelper.IsProxyClass);
                    newValue = DteConverter.ToType(proxyTypeCodeClass);
                }
            }
            return(true);
        }