@ -73,48 +73,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -73,48 +73,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
if ( resultItems . Count > 0 ) {
resultItems . Add ( new Separator ( ) ) ;
}
// TODO move to ClassBookmark
RefactoringMenuContext context = new RefactoringMenuContext {
Editor = textEditor ,
ResolveResult = ResolveExpressionAtCaret ( textEditor , expressionResult ) ,
ExpressionResult = expressionResult
} ;
AddContextItems ( resultItems , context ) ;
// end TODO move
return resultItems ;
}
void AddItemForCurrentClassAndMethod ( List < object > resultItems , ITextEditor textEditor , ExpressionResult expressionResult , List < string > definitions )
{
ResolveResult rr = ResolveExpressionAtCaret ( textEditor , expressionResult ) ;
MenuItem item = null ;
int caretLine = textEditor . Caret . Line ;
// Include menu for current class and method
ICompilationUnit cu = null ;
IMember callingMember = null ;
if ( rr ! = null & & rr . CallingMember ! = null ) {
callingMember = rr . CallingMember ;
} else {
ParseInformation parseInfo = ParserService . GetParseInformation ( textEditor . FileName ) ;
if ( parseInfo ! = null ) {
cu = parseInfo . CompilationUnit ;
if ( cu ! = null ) {
IClass callingClass = cu . GetInnermostClass ( caretLine , textEditor . Caret . Column ) ;
callingMember = GetCallingMember ( callingClass , caretLine , textEditor . Caret . Column ) ;
}
}
}
if ( callingMember ! = null ) {
item = MakeItem ( definitions , callingMember ) ;
if ( item ! = null ) {
item . Header = StringParser . Parse ( "${res:SharpDevelop.Refactoring.CurrentMethod}: " ) + callingMember . Name ;
resultItems . Add ( item ) ;
}
}
}
void AddTopLevelItems ( List < object > resultItems , ITextEditor textEditor , ExpressionResult expressionResult , List < string > definitions , bool addAsSubmenu )
{
// Insert items at this position to get the outermost expression first, followed by the inner expressions (if any).
@ -132,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -132,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} else if ( rr is MemberResolveResult ) {
MemberResolveResult mrr = ( MemberResolveResult ) rr ;
item = MakeItem ( definitions , mrr . ResolvedMember ) ;
// Seems not to be needed, as AddItemForCurrentClassAndMethod works for indexer as well (martin. konicek)
// Seems not to be needed, as AddItemForCurrentClassAndMethod works for indexer as well (martinkonicek)
/ * if ( RefactoringService . FixIndexerExpression ( expressionFinder , ref expressionResult , mrr ) ) {
if ( item ! = null ) {
// Insert this member
@ -161,75 +122,35 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -161,75 +122,35 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
#region AddTopLevelContextItems
/// <summary>
/// Adds top-level context items like "Go to definition", "Find references", "Find derived classes", "Find overrides"
/// </summary>
void AddContextItems ( List < object > resultItems , RefactoringMenuContext context )
{
var contextItems = MakeContextItems ( context ) ;
resultItems . AddRange ( contextItems ) ;
if ( contextItems . Count > 0 )
resultItems . Add ( new Separator ( ) ) ;
}
List < object > MakeContextItems ( RefactoringMenuContext context )
void AddItemForCurrentClassAndMethod ( List < object > resultItems , ITextEditor textEditor , ExpressionResult expressionResult , List < string > definitions )
{
var contextItems = new List < object > ( ) ;
if ( context . ResolveResult is TypeResolveResult ) {
var clickedClass = ( ( TypeResolveResult ) context . ResolveResult ) . ResolvedClass ;
contextItems . AddIfNotNull ( MakeFindDerivedClassesItem ( clickedClass , context ) ) ;
contextItems . AddIfNotNull ( MakeFindBaseClassesItem ( clickedClass , context ) ) ;
ResolveResult rr = ResolveExpressionAtCaret ( textEditor , expressionResult ) ;
MenuItem item = null ;
int caretLine = textEditor . Caret . Line ;
// Include menu for current class and method
ICompilationUnit cu = null ;
IMember callingMember = null ;
if ( rr ! = null & & rr . CallingMember ! = null ) {
callingMember = rr . CallingMember ;
} else {
ParseInformation parseInfo = ParserService . GetParseInformation ( textEditor . FileName ) ;
if ( parseInfo ! = null ) {
cu = parseInfo . CompilationUnit ;
if ( cu ! = null ) {
IClass callingClass = cu . GetInnermostClass ( caretLine , textEditor . Caret . Column ) ;
callingMember = GetCallingMember ( callingClass , caretLine , textEditor . Caret . Column ) ;
}
}
}
if ( context . ResolveResult is MemberResolveResult ) {
IMember member = ( ( MemberResolveResult ) context . ResolveResult ) . ResolvedMember as IMember ;
contextItems . AddIfNotNull ( MakeFindOverridesItem ( member , context ) ) ;
if ( callingMember ! = null ) {
item = MakeItem ( definitions , callingMember ) ;
if ( item ! = null ) {
item . Header = StringParser . Parse ( "${res:SharpDevelop.Refactoring.CurrentMethod}: " ) + callingMember . Name ;
resultItems . Add ( item ) ;
}
}
return contextItems ;
}
MenuItem MakeFindDerivedClassesItem ( IClass baseClass , RefactoringMenuContext context )
{
if ( baseClass = = null | | baseClass . IsStatic | | baseClass . IsSealed )
return null ;
var item = new MenuItem { Header = MenuService . ConvertLabel ( StringParser . Parse ( "${res:SharpDevelop.Refactoring.FindDerivedClassesCommand}" ) ) } ;
item . Icon = ClassBrowserIconService . Class . CreateImage ( ) ;
item . InputGestureText = new KeyGesture ( Key . F6 ) . GetDisplayStringForCulture ( Thread . CurrentThread . CurrentUICulture ) ;
item . Click + = delegate {
ContextActionsHelper . MakePopupWithDerivedClasses ( baseClass ) . OpenAtCaretAndFocus ( context . Editor ) ;
} ;
return item ;
}
MenuItem MakeFindBaseClassesItem ( IClass @class , RefactoringMenuContext context )
{
if ( @class = = null | | @class . BaseTypes = = null | | @class . BaseTypes . Count = = 0 )
return null ;
var item = new MenuItem { Header = MenuService . ConvertLabel ( "${res:SharpDevelop.Refactoring.FindBaseClassesCommand}" ) } ;
item . Icon = ClassBrowserIconService . Interface . CreateImage ( ) ;
//item.InputGestureText = new KeyGesture(Key.F10).GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture);
item . Click + = delegate {
ContextActionsHelper . MakePopupWithBaseClasses ( @class ) . OpenAtCaretAndFocus ( context . Editor ) ;
} ;
return item ;
}
MenuItem MakeFindOverridesItem ( IMember member , RefactoringMenuContext context )
{
if ( member = = null | | ! member . IsOverridable )
return null ;
var item = new MenuItem { Header = MenuService . ConvertLabel ( StringParser . Parse ( "${res:SharpDevelop.Refactoring.FindOverridesCommand}" ) ) } ;
item . Icon = ClassBrowserIconService . Method . CreateImage ( ) ;
item . InputGestureText = new KeyGesture ( Key . F6 ) . GetDisplayStringForCulture ( Thread . CurrentThread . CurrentUICulture ) ;
item . Click + = delegate {
ContextActionsHelper . MakePopupWithOverrides ( member ) . OpenAtCaretAndFocus ( context . Editor ) ;
} ;
return item ;
}
#endregion
IMember GetCallingMember ( IClass callingClass , int caretLine , int caretColumn )
{
if ( callingClass = = null ) {