public void GetMemberFromClassMemberBookmark()
        {
            MockMethod mockMethod = MockMethod.CreateMockMethodWithoutAnyAttributes();

            mockMethod.Region = new DomRegion(1, 1);
            ClassMemberBookmark bookmark = new ClassMemberBookmark(mockMethod);

            Assert.IsTrue(Object.ReferenceEquals(mockMethod, TestableCondition.GetMember(bookmark)));
        }
        public static IMember GetMember(object caller)
        {
            ITestTreeView testTreeView = caller as ITestTreeView;

            if (testTreeView != null)
            {
                return(testTreeView.SelectedMethod);
            }
            MemberNode memberNode = caller as MemberNode;

            if (memberNode != null)
            {
                return(memberNode.Member);
            }
            else
            {
                ClassMemberBookmark mbookmark = caller as ClassMemberBookmark;
                if (mbookmark != null)
                {
                    return(mbookmark.Member);
                }
            }
            return(null);
        }
Beispiel #3
0
        public ToolStripItem[] BuildSubmenu(Codon codon, object owner)
        {
            ToolStripMenuItem item;

            TextEditorControl textEditorControl = (TextEditorControl)owner;

            if (textEditorControl.FileName == null)
            {
                return(new ToolStripItem[0]);
            }
            List <ToolStripItem> resultItems = new List <ToolStripItem>();
            TextArea             textArea    = textEditorControl.ActiveTextAreaControl.TextArea;
            IDocument            doc         = textArea.Document;
            int caretLine = textArea.Caret.Line;

            // list of dotnet names that have definition bookmarks in this line
            List <string> definitions = new List <string>();

            // Include definitions (use the bookmarks which should already be present)
            foreach (Bookmark mark in doc.BookmarkManager.Marks)
            {
                if (mark != null && mark.LineNumber == caretLine)
                {
                    ClassMemberBookmark cmb = mark as ClassMemberBookmark;
                    ClassBookmark       cb  = mark as ClassBookmark;
                    IClass type             = null;
                    if (cmb != null)
                    {
                        definitions.Add(cmb.Member.DotNetName);
                        item = new ToolStripMenuItem(MemberNode.GetText(cmb.Member),
                                                     ClassBrowserIconService.ImageList.Images[cmb.IconIndex]);
                        MenuService.AddItemsToMenu(item.DropDown.Items, mark, ClassMemberBookmark.ContextMenuPath);
                        resultItems.Add(item);
                        type = cmb.Member.DeclaringType;
                    }
                    else if (cb != null)
                    {
                        type = cb.Class;
                    }
                    if (type != null)
                    {
                        definitions.Add(type.DotNetName);
                        item = new ToolStripMenuItem(type.Name, ClassBrowserIconService.ImageList.Images[ClassBrowserIconService.GetIcon(type)]);
                        MenuService.AddItemsToMenu(item.DropDown.Items,
                                                   cb ?? new ClassBookmark(textArea.Document, type),
                                                   ClassBookmark.ContextMenuPath);
                        resultItems.Add(item);
                    }
                }
            }

            // Include menu for member that has been clicked on
            IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(textEditorControl.FileName);
            ExpressionResult  expressionResult;
            ResolveResult     rr;
            int insertIndex = resultItems.Count;                // Insert items at this position to get the outermost expression first, followed by the inner expressions (if any).

            expressionResult = FindFullExpressionAtCaret(textArea, expressionFinder);
repeatResolve:
            rr   = ResolveExpressionAtCaret(textArea, expressionResult);
            item = null;
            if (rr is MethodResolveResult)
            {
                item = MakeItem(definitions, ((MethodResolveResult)rr).GetMethodIfSingleOverload());
            }
            else if (rr is MemberResolveResult)
            {
                MemberResolveResult mrr = (MemberResolveResult)rr;
                item = MakeItem(definitions, mrr.ResolvedMember);
                if (RefactoringService.FixIndexerExpression(expressionFinder, ref expressionResult, mrr))
                {
                    if (item != null)
                    {
                        resultItems.Insert(insertIndex, item);
                    }
                    // Include menu for the underlying expression of the
                    // indexer expression as well.
                    goto repeatResolve;
                }
            }
            else if (rr is TypeResolveResult)
            {
                item = MakeItem(definitions, ((TypeResolveResult)rr).ResolvedClass);
            }
            else if (rr is LocalResolveResult)
            {
                item        = MakeItem((LocalResolveResult)rr, caretLine + 1 == ((LocalResolveResult)rr).Field.Region.BeginLine);
                insertIndex = 0;                        // Insert local variable menu item at the topmost position.
            }
            if (item != null)
            {
                resultItems.Insert(insertIndex, item);
            }

            // Include menu for current class and method
            IMember callingMember = null;

            if (rr != null)
            {
                callingMember = rr.CallingMember;
            }
            else
            {
                ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName);
                if (parseInfo != null)
                {
                    ICompilationUnit cu = parseInfo.MostRecentCompilationUnit;
                    if (cu != null)
                    {
                        IClass callingClass = cu.GetInnermostClass(caretLine + 1, textArea.Caret.Column + 1);
                        callingMember = GetCallingMember(callingClass, caretLine + 1, textArea.Caret.Column + 1);
                    }
                }
            }
            if (callingMember != null)
            {
                item = MakeItem(definitions, callingMember);
                if (item != null)
                {
                    item.Text = StringParser.Parse("${res:SharpDevelop.Refactoring.CurrentMethod}: ") + callingMember.Name;
                    resultItems.Add(item);
                }
            }

            if (resultItems.Count == 0)
            {
                return(new ToolStripItem[0]);
            }
            else
            {
                resultItems.Add(new MenuSeparator());
                return(resultItems.ToArray());
            }
        }
        public ToolStripItem[] BuildSubmenu(Codon codon, object owner)
        {
            MenuCommand cmd;
            IMember     member;
            MemberNode  memberNode = owner as MemberNode;

            if (memberNode != null)
            {
                member = memberNode.Member;
            }
            else
            {
                ClassMemberBookmark bookmark = (ClassMemberBookmark)owner;
                member = bookmark.Member;
            }
            IMethod method            = member as IMethod;
            List <ToolStripItem> list = new List <ToolStripItem>();

            bool canGenerateCode =
                member.DeclaringType.ProjectContent.Language.CodeGenerator != null &&
                !FindReferencesAndRenameHelper.IsReadOnly(member.DeclaringType);

            if (method == null || !method.IsConstructor)
            {
                if (!FindReferencesAndRenameHelper.IsReadOnly(member.DeclaringType) &&
                    !(member is IProperty && ((IProperty)member).IsIndexer))
                {
                    cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename);
                    cmd.Tag = member;
                    list.Add(cmd);
                }
            }
            if (member.IsOverride)
            {
                cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.GoToBaseClassCommand}", GoToBase);
                cmd.Tag = member;
                list.Add(cmd);
            }
            if (member.IsVirtual || member.IsAbstract || (member.IsOverride && !member.DeclaringType.IsSealed))
            {
                cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.FindOverridesCommand}", FindOverrides);
                cmd.Tag = member;
                list.Add(cmd);
            }

            cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.FindReferencesCommand}", FindReferences);
            cmd.Tag = member;
            list.Add(cmd);

            if (member is IField && member.DeclaringType.ClassType != ClassType.Enum)
            {
                IProperty foundProperty = FindReferencesAndRenameHelper.FindProperty(member as IField);
                if (foundProperty != null)
                {
                    cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.GoToProperty}", GotoTagMember);
                    cmd.Tag = foundProperty;
                    list.Add(cmd);
                }
                else
                {
                    if (canGenerateCode)
                    {
                        if (member.IsReadonly)
                        {
                            cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.CreateProperty}", CreateGetter);
                            cmd.Tag = member;
                            list.Add(cmd);
                        }
                        else
                        {
                            cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.CreateGetter}", CreateGetter);
                            cmd.Tag = member;
                            list.Add(cmd);
                            cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.CreateProperty}", CreateProperty);
                            cmd.Tag = member;
                            list.Add(cmd);
                        }
                    }
                }
            }
            if (member is IProperty)
            {
                if (((IProperty)member).CanSet && canGenerateCode)
                {
                    cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.CreateChangedEvent}", CreateChangedEvent);
                    cmd.Tag = member;
                    list.Add(cmd);
                }
            }
            if (member is IEvent)
            {
                if (canGenerateCode)
                {
                    cmd     = new MenuCommand("${res:SharpDevelop.Refactoring.CreateOnEventMethod}", CreateOnEventMethod);
                    cmd.Tag = member;
                    list.Add(cmd);
                }
            }

            return(list.ToArray());
        }
Beispiel #5
0
        public override void Run()
        {
            IClass  c;
            IMember m;

            MemberNode mn = this.Owner as MemberNode;

            if (mn != null)
            {
                m = mn.Member;
                c = m.DeclaringType;
            }
            else
            {
                ClassNode cn = this.Owner as ClassNode;
                if (cn != null)
                {
                    c = cn.Class;
                    m = null;
                }
                else
                {
                    ClassMemberBookmark cmbm = this.Owner as ClassMemberBookmark;
                    if (cmbm != null)
                    {
                        m = cmbm.Member;
                        c = m.DeclaringType;
                    }
                    else
                    {
                        ClassBookmark cbm = this.Owner as ClassBookmark;
                        if (cbm != null)
                        {
                            c = cbm.Class;
                            m = null;
                        }
                        else
                        {
                            MessageService.ShowWarning("Reflector AddIn: Could not determine the class for the selected element. Owner: " + ((this.Owner == null) ? "<null>" : this.Owner.ToString()));
                            return;
                        }
                    }
                }
            }

            if (c == null)
            {
                MessageService.ShowWarning("Reflector AddIn: Could not determine the class for the selected element (known owner). Owner: " + this.Owner.ToString());
                return;
            }


            // Try to find the assembly which contains the resolved type
            IProjectContent          pc  = c.ProjectContent;
            ReflectionProjectContent rpc = pc as ReflectionProjectContent;
            string assemblyLocation      = null;

            if (rpc != null)
            {
                assemblyLocation = rpc.AssemblyLocation;
            }
            else
            {
                IProject project = pc.Project as IProject;
                if (project != null)
                {
                    assemblyLocation = project.OutputAssemblyFullPath;
                }
            }

            if (String.IsNullOrEmpty(assemblyLocation))
            {
                MessageService.ShowWarning("Reflector AddIn: Could not determine the assembly location for " + c.ToString() + ".");
                return;
            }


            AbstractEntity entity = m as AbstractEntity;

            if (entity == null)
            {
                entity = c as AbstractEntity;
            }
            if (entity != null)
            {
                LoggingService.Debug("ReflectorAddIn: Trying to go to " + entity.DocumentationTag + " in " + assemblyLocation);
                ReflectorController.TryGoTo(assemblyLocation, entity);
            }
        }
        public override void Run()
        {
            IClass  c;
            IMember m;

            MemberNode mn = this.Owner as MemberNode;

            if (mn != null)
            {
                m = mn.Member;
                c = m.DeclaringType;
            }
            else
            {
                ClassNode cn = this.Owner as ClassNode;
                if (cn != null)
                {
                    c = cn.Class;
                    m = null;
                }
                else
                {
                    ClassMemberBookmark cmbm = this.Owner as ClassMemberBookmark;
                    if (cmbm != null)
                    {
                        m = cmbm.Member;
                        c = m.DeclaringType;
                    }
                    else
                    {
                        ClassBookmark cbm = this.Owner as ClassBookmark;
                        if (cbm != null)
                        {
                            c = cbm.Class;
                            m = null;
                        }
                        else
                        {
                            MessageService.ShowWarning("ILSpy AddIn: Could not determine the class for the selected element. Owner: " + ((this.Owner == null) ? "<null>" : this.Owner.ToString()));
                            return;
                        }
                    }
                }
            }

            if (c == null)
            {
                MessageService.ShowWarning("ILSpy AddIn: Could not determine the class for the selected element (known owner). Owner: " + this.Owner.ToString());
                return;
            }

            AbstractEntity entity = m as AbstractEntity;

            if (entity == null)
            {
                entity = c as AbstractEntity;
            }
            if (entity != null)
            {
                ILSpyController.TryGoTo(entity);
            }
        }