コード例 #1
0
        protected IEnumerable <BulbMenuItem> GetEventFunctionActions(ICSharpDeclaration declaration)
        {
            var result = new List <BulbMenuItem>();

            if (declaration is IMethodDeclaration methodDeclaration)
            {
                var declaredElement = methodDeclaration.DeclaredElement;
                var textControl     = Solution.GetComponent <ITextControlManager>().LastFocusedTextControl.Value;

                if (textControl != null && declaredElement != null)
                {
                    var isCoroutine = IsCoroutine(methodDeclaration, UnityApi);
                    if (isCoroutine.HasValue)
                    {
                        IBulbAction bulbAction;
                        if (isCoroutine.Value)
                        {
                            bulbAction = new ConvertFromCoroutineBulbAction(methodDeclaration);
                        }
                        else
                        {
                            bulbAction = new ConvertToCoroutineBulbAction(methodDeclaration);
                        }

                        result.Add(new BulbMenuItem(
                                       new IntentionAction.MyExecutableProxi(bulbAction, Solution, textControl),
                                       bulbAction.Text, BulbThemedIcons.ContextAction.Id,
                                       BulbMenuAnchors.FirstClassContextItems));
                    }

                    if (UnityApi.IsEventFunction(declaredElement))
                    {
                        var documentationNavigationAction = new DocumentationNavigationAction(
                            Solution.GetComponent <ShowUnityHelp>(), declaredElement, UnityApi);
                        result.Add(new BulbMenuItem(
                                       new IntentionAction.MyExecutableProxi(documentationNavigationAction, Solution,
                                                                             textControl), documentationNavigationAction.Text, CommonThemedIcons.Question.Id,
                                       BulbMenuAnchors.FirstClassContextItems));
                    }
                }
            }

            return(result);
        }
コード例 #2
0
        protected IReadOnlyList <BulbMenuItem> GetEventFunctionActions(ICSharpDeclaration declaration, IReadOnlyCallGraphContext context)
        {
            if (!(declaration is IMethodDeclaration methodDeclaration))
            {
                return(EmptyList <BulbMenuItem> .Instance);
            }

            var declaredElement = methodDeclaration.DeclaredElement;
            var textControl     = mySolution.GetComponent <ITextControlManager>().LastFocusedTextControl.Value;

            if (textControl == null || declaredElement == null)
            {
                return(EmptyList <BulbMenuItem> .Instance);
            }

            var isCoroutine = IsCoroutine(methodDeclaration, UnityApi);
            var result      = GetBulbMenuItems(declaration, context) as List <BulbMenuItem> ?? new List <BulbMenuItem>();

            if (isCoroutine.HasValue)
            {
                var bulbAction = isCoroutine.Value
                    ? (IBulbAction) new ConvertFromCoroutineBulbAction(methodDeclaration)
                    : new ConvertToCoroutineBulbAction(methodDeclaration);

                var menuITem = UnityCallGraphUtil.BulbActionToMenuItem(bulbAction, textControl, mySolution, BulbThemedIcons.ContextAction.Id);

                result.Add(menuITem);
            }

            if (UnityApi.IsEventFunction(declaredElement))
            {
                var showUnityHelp = mySolution.GetComponent <ShowUnityHelp>();
                var documentationNavigationAction = new DocumentationNavigationAction(showUnityHelp, declaredElement, UnityApi);
                var menuItem = UnityCallGraphUtil.BulbActionToMenuItem(documentationNavigationAction, textControl, mySolution, CommonThemedIcons.Question.Id);

                result.Add(menuItem);
            }

            return(result);
        }
        public IEnumerable <BulbMenuItem> CreateBulbItemsForUnityDeclaration(IDeclaration declaration)
        {
            var unityApi    = Solution.GetComponent <UnityApi>();
            var textControl = TextControlManager.LastFocusedTextControl.Value;

            if (textControl != null)
            {
                var result = new List <BulbMenuItem>();
                if (declaration is IClassLikeDeclaration classDeclaration)
                {
                    var fix = new GenerateUnityEventFunctionsFix(classDeclaration);
                    result.Add(
                        new BulbMenuItem(new IntentionAction.MyExecutableProxi(fix, Solution, textControl),
                                         "Generate Unity event functions", PsiFeaturesUnsortedThemedIcons.FuncZoneGenerate.Id,
                                         BulbMenuAnchors.FirstClassContextItems)
                        );
                }

                if (declaration is IMethodDeclaration methodDeclaration)
                {
                    var declaredElement = methodDeclaration.DeclaredElement;

                    if (declaredElement != null)
                    {
                        var isCoroutine = IsCoroutine(methodDeclaration, unityApi);
                        if (isCoroutine.HasValue)
                        {
                            IBulbAction bulbAction;
                            if (isCoroutine.Value)
                            {
                                bulbAction = new ConvertFromCoroutineBulbAction(methodDeclaration);
                            }
                            else
                            {
                                bulbAction = new ConvertToCoroutineBulbAction(methodDeclaration);
                            }

                            result.Add(new BulbMenuItem(
                                           new IntentionAction.MyExecutableProxi(bulbAction, Solution, textControl),
                                           bulbAction.Text, BulbThemedIcons.ContextAction.Id,
                                           BulbMenuAnchors.FirstClassContextItems));
                        }

                        if (unityApi.IsEventFunction(declaredElement))
                        {
                            var documentationNavigationAction = new DocumentationNavigationAction(
                                Solution.GetComponent <ShowUnityHelp>(), declaredElement, unityApi);
                            result.Add(new BulbMenuItem(
                                           new IntentionAction.MyExecutableProxi(documentationNavigationAction, Solution,
                                                                                 textControl), documentationNavigationAction.Text, BulbThemedIcons.ContextAction.Id,
                                           BulbMenuAnchors.FirstClassContextItems));
                        }
                    }
                }

                result.AddRange(CreateAdditionalMenuItem(declaration, unityApi, textControl));
                return(result);
            }

            return(EmptyList <BulbMenuItem> .Enumerable);
        }