mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Bug 217485 - Can't set method breakpoints from the editor unless the method/function name is selected.
This commit is contained in:
parent
48c5584887
commit
3a0793732b
1 changed files with 38 additions and 57 deletions
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2007 QNX Software Systems and others.
|
||||
* Copyright (c) 2004, 2008 QNX Software Systems and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -8,6 +8,7 @@
|
|||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Freescale Semiconductor - Address watchpoints, https://bugs.eclipse.org/bugs/show_bug.cgi?id=118299
|
||||
* Warren Paul (Nokia) - Bug 217485
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||
|
||||
|
@ -172,30 +173,9 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
|
|||
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#toggleMethodBreakpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
public void toggleMethodBreakpoints( IWorkbenchPart part, ISelection selection ) throws CoreException {
|
||||
if ( selection instanceof ITextSelection ) {
|
||||
String text = ((ITextSelection)selection).getText();
|
||||
if ( text != null ) {
|
||||
IResource resource = getResource( part );
|
||||
if ( resource instanceof IFile ) {
|
||||
ITranslationUnit tu = getTranslationUnit( (IFile)resource );
|
||||
if ( tu != null ) {
|
||||
try {
|
||||
ICElement element = tu.getElement( text.trim() );
|
||||
if ( element instanceof IFunction || element instanceof IMethod ) {
|
||||
toggleMethodBreakpoints0( (IDeclaration)element );
|
||||
}
|
||||
}
|
||||
catch( CModelException e ) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( selection instanceof IStructuredSelection ) {
|
||||
IStructuredSelection ss = (IStructuredSelection)selection;
|
||||
if ( ss.size() == 1 && (ss.getFirstElement() instanceof IFunction || ss.getFirstElement() instanceof IMethod) ) {
|
||||
toggleMethodBreakpoints0( (IDeclaration)ss.getFirstElement() );
|
||||
}
|
||||
ICElement element = getCElementFromSelection( part, selection );
|
||||
if ( element instanceof IFunction || element instanceof IMethod ) {
|
||||
toggleMethodBreakpoints0( (IDeclaration)element );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -203,8 +183,14 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
|
|||
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleMethodBreakpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
public boolean canToggleMethodBreakpoints( IWorkbenchPart part, ISelection selection ) {
|
||||
ICElement element = getCElementFromSelection( part, selection );
|
||||
return ( element instanceof IFunction || element instanceof IMethod );
|
||||
}
|
||||
|
||||
protected ICElement getCElementFromSelection( IWorkbenchPart part, ISelection selection ) {
|
||||
if ( selection instanceof ITextSelection ) {
|
||||
String text = ((ITextSelection)selection).getText();
|
||||
ITextSelection textSelection = (ITextSelection)selection;
|
||||
String text = textSelection.getText();
|
||||
if ( text != null ) {
|
||||
IResource resource = getResource( part );
|
||||
if ( resource instanceof IFile ) {
|
||||
|
@ -212,7 +198,10 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
|
|||
if ( tu != null ) {
|
||||
try {
|
||||
ICElement element = tu.getElement( text.trim() );
|
||||
return ( element instanceof IFunction || element instanceof IMethod );
|
||||
if ( element == null ) {
|
||||
element = tu.getElementAtLine( textSelection.getStartLine() );
|
||||
}
|
||||
return element;
|
||||
}
|
||||
catch( CModelException e ) {
|
||||
}
|
||||
|
@ -223,16 +212,33 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
|
|||
else if ( selection instanceof IStructuredSelection ) {
|
||||
IStructuredSelection ss = (IStructuredSelection)selection;
|
||||
if ( ss.size() == 1 ) {
|
||||
return ( ss.getFirstElement() instanceof IFunction || ss.getFirstElement() instanceof IMethod );
|
||||
Object object = ss.getFirstElement();
|
||||
if ( object instanceof ICElement ) {
|
||||
return (ICElement)object;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#toggleWatchpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
public void toggleWatchpoints( IWorkbenchPart part, ISelection selection ) throws CoreException {
|
||||
IVariable variable = getVariableFromSelection( part, selection );
|
||||
if ( variable != null ) {
|
||||
toggleVariableWatchpoint( part, variable );
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleWatchpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
public boolean canToggleWatchpoints( IWorkbenchPart part, ISelection selection ) {
|
||||
return getVariableFromSelection( part, selection ) != null;
|
||||
}
|
||||
|
||||
protected IVariable getVariableFromSelection( IWorkbenchPart part, ISelection selection ) {
|
||||
if ( selection instanceof ITextSelection ) {
|
||||
String text = ((ITextSelection)selection).getText();
|
||||
if ( text != null ) {
|
||||
|
@ -242,8 +248,8 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
|
|||
if ( tu != null ) {
|
||||
try {
|
||||
ICElement element = tu.getElement( text.trim() );
|
||||
if ( element instanceof IVariable ) {
|
||||
toggleVariableWatchpoint( part, (IVariable)element );
|
||||
if (element instanceof IVariable) {
|
||||
return (IVariable)element;
|
||||
}
|
||||
}
|
||||
catch( CModelException e ) {
|
||||
|
@ -254,39 +260,14 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
|
|||
}
|
||||
else if ( selection instanceof IStructuredSelection ) {
|
||||
IStructuredSelection ss = (IStructuredSelection)selection;
|
||||
if ( ss.size() == 1 && ss.getFirstElement() instanceof IVariable ) {
|
||||
toggleVariableWatchpoint( part, (IVariable)ss.getFirstElement() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleWatchpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
public boolean canToggleWatchpoints( IWorkbenchPart part, ISelection selection ) {
|
||||
if ( selection instanceof ITextSelection ) {
|
||||
String text = ((ITextSelection)selection).getText();
|
||||
if ( text != null ) {
|
||||
IResource resource = getResource( part );
|
||||
if ( resource instanceof IFile ) {
|
||||
ITranslationUnit tu = getTranslationUnit( (IFile)resource );
|
||||
if ( tu != null ) {
|
||||
try {
|
||||
return ( tu.getElement( text.trim() ) instanceof IVariable );
|
||||
}
|
||||
catch( CModelException e ) {
|
||||
}
|
||||
}
|
||||
if ( ss.size() == 1 ) {
|
||||
Object selected = ss.getFirstElement();
|
||||
if (selected instanceof IVariable) {
|
||||
return (IVariable)selected;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( selection instanceof IStructuredSelection ) {
|
||||
IStructuredSelection ss = (IStructuredSelection)selection;
|
||||
if ( ss.size() == 1 ) {
|
||||
return ( ss.getFirstElement() instanceof IVariable );
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void report( String message, IWorkbenchPart part ) {
|
||||
|
|
Loading…
Add table
Reference in a new issue