mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-16 20:55:44 +02:00
Fix for 185221 by Ed Swartz, show errors when open call|type hierarchy fails.
This commit is contained in:
parent
60ba6f2213
commit
39e4ee536e
8 changed files with 98 additions and 42 deletions
|
@ -16,6 +16,7 @@ import org.eclipse.osgi.util.NLS;
|
||||||
public class CHMessages extends NLS {
|
public class CHMessages extends NLS {
|
||||||
private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.ui.callhierarchy.CHMessages"; //$NON-NLS-1$
|
private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.ui.callhierarchy.CHMessages"; //$NON-NLS-1$
|
||||||
public static String CallHierarchyUI_label;
|
public static String CallHierarchyUI_label;
|
||||||
|
public static String CallHierarchyUI_openFailureMessage;
|
||||||
public static String CallHierarchyUI_selectMessage;
|
public static String CallHierarchyUI_selectMessage;
|
||||||
public static String CHHistoryListAction_HistoryDialog_title;
|
public static String CHHistoryListAction_HistoryDialog_title;
|
||||||
public static String CHHistoryListAction_HistoryList_label;
|
public static String CHHistoryListAction_HistoryList_label;
|
||||||
|
|
|
@ -44,6 +44,7 @@ OpenCallHierarchyAction_label=Open Call H&ierarchy
|
||||||
OpenCallHierarchyAction_tooltip=Open Call Hierarchy
|
OpenCallHierarchyAction_tooltip=Open Call Hierarchy
|
||||||
CallHierarchyUI_label=Open Call Hierarchy
|
CallHierarchyUI_label=Open Call Hierarchy
|
||||||
CallHierarchyUI_selectMessage=Select one element from the list
|
CallHierarchyUI_selectMessage=Select one element from the list
|
||||||
|
CallHierarchyUI_openFailureMessage=Cannot resolve selected text to a defined function or member
|
||||||
OpenElementInCallHierarchyAction_errorDlgTitle=Open Element in Call Hierarchy
|
OpenElementInCallHierarchyAction_errorDlgTitle=Open Element in Call Hierarchy
|
||||||
OpenElementInCallHierarchyAction_title=Open Element in Call Hierarchy
|
OpenElementInCallHierarchyAction_title=Open Element in Call Hierarchy
|
||||||
OpenElementInCallHierarchyAction_upperListLabel=&Matching Elements:
|
OpenElementInCallHierarchyAction_upperListLabel=&Matching Elements:
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.eclipse.jface.text.ITextSelection;
|
||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.ui.IEditorInput;
|
import org.eclipse.ui.IEditorInput;
|
||||||
import org.eclipse.ui.IWorkbenchPage;
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
|
import org.eclipse.ui.IWorkbenchSite;
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
import org.eclipse.ui.IWorkbenchWindow;
|
||||||
import org.eclipse.ui.texteditor.ITextEditor;
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.actions.OpenActionUtil;
|
import org.eclipse.cdt.internal.ui.actions.OpenActionUtil;
|
||||||
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.StatusLineHandler;
|
||||||
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
|
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
|
||||||
|
|
||||||
public class CallHierarchyUI {
|
public class CallHierarchyUI {
|
||||||
|
@ -68,7 +70,9 @@ public class CallHierarchyUI {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CHViewPart openInViewPart(IWorkbenchWindow window, ICElement[] input) {
|
private static CHViewPart openInViewPart(IWorkbenchSite site, ICElement[] input) {
|
||||||
|
IWorkbenchWindow window = site.getWorkbenchWindow();
|
||||||
|
StatusLineHandler.clearStatusLine(site);
|
||||||
ICElement elem = null;
|
ICElement elem = null;
|
||||||
switch (input.length) {
|
switch (input.length) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -87,6 +91,9 @@ public class CallHierarchyUI {
|
||||||
}
|
}
|
||||||
if (elem != null) {
|
if (elem != null) {
|
||||||
return openInViewPart(window, elem);
|
return openInViewPart(window, elem);
|
||||||
|
} else {
|
||||||
|
StatusLineHandler.showStatusLineMessage(site,
|
||||||
|
CHMessages.CallHierarchyUI_openFailureMessage);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -102,12 +109,16 @@ public class CallHierarchyUI {
|
||||||
Job job= new Job(CHMessages.CallHierarchyUI_label) {
|
Job job= new Job(CHMessages.CallHierarchyUI_label) {
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
try {
|
try {
|
||||||
|
StatusLineHandler.clearStatusLine(editor.getSite());
|
||||||
final ICElement[] elems= findDefinitions(project, editorInput, sel);
|
final ICElement[] elems= findDefinitions(project, editorInput, sel);
|
||||||
if (elems != null && elems.length > 0) {
|
if (elems != null && elems.length > 0) {
|
||||||
display.asyncExec(new Runnable() {
|
display.asyncExec(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
openInViewPart(editor.getSite().getWorkbenchWindow(), elems);
|
openInViewPart(editor.getSite(), elems);
|
||||||
}});
|
}});
|
||||||
|
} else {
|
||||||
|
StatusLineHandler.showStatusLineMessage(editor.getSite(),
|
||||||
|
CHMessages.CallHierarchyUI_openFailureMessage);
|
||||||
}
|
}
|
||||||
return Status.OK_STATUS;
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,15 +19,12 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
import org.eclipse.jface.action.IStatusLineManager;
|
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.ITextSelection;
|
import org.eclipse.jface.text.ITextSelection;
|
||||||
import org.eclipse.jface.text.TextSelection;
|
import org.eclipse.jface.text.TextSelection;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.ui.IEditorPart;
|
import org.eclipse.ui.IEditorPart;
|
||||||
import org.eclipse.ui.IEditorSite;
|
|
||||||
import org.eclipse.ui.IViewSite;
|
|
||||||
import org.eclipse.ui.IWorkbenchSite;
|
import org.eclipse.ui.IWorkbenchSite;
|
||||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||||
import org.eclipse.ui.texteditor.ITextEditor;
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
@ -35,11 +32,11 @@ import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
import org.eclipse.cdt.core.dom.IName;
|
import org.eclipse.cdt.core.dom.IName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.parser.Keywords;
|
import org.eclipse.cdt.core.parser.Keywords;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
||||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.StatusLineHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
|
@ -74,44 +71,10 @@ public class SelectionParseAction extends Action {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void showStatusLineMessage(final String message) {
|
protected void showStatusLineMessage(final String message) {
|
||||||
// run the code to update the status line on the Display thread
|
StatusLineHandler.showStatusLineMessage(fSite, message);
|
||||||
// this way any other thread can invoke operationNotAvailable(String)
|
|
||||||
CUIPlugin.getStandardDisplay().asyncExec(new Runnable(){
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see java.lang.Runnable#run()
|
|
||||||
*/
|
|
||||||
public void run() {
|
|
||||||
IStatusLineManager statusManager = null;
|
|
||||||
if (fSite instanceof IViewSite){
|
|
||||||
statusManager = ((IViewSite) fSite).getActionBars().getStatusLineManager();
|
|
||||||
}
|
|
||||||
else if (fSite instanceof IEditorSite){
|
|
||||||
statusManager = ((IEditorSite) fSite).getActionBars().getStatusLineManager();
|
|
||||||
}
|
|
||||||
if( statusManager != null )
|
|
||||||
statusManager.setErrorMessage(message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
protected void clearStatusLine() {
|
protected void clearStatusLine() {
|
||||||
// run the code to update the status line on the Display thread
|
StatusLineHandler.clearStatusLine(fSite);
|
||||||
// this way any other thread can invoke clearStatusLine()
|
|
||||||
CUIPlugin.getStandardDisplay().asyncExec(new Runnable(){
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see java.lang.Runnable#run()
|
|
||||||
*/
|
|
||||||
public void run() {
|
|
||||||
IStatusLineManager statusManager = null;
|
|
||||||
if (fSite instanceof IViewSite){
|
|
||||||
statusManager = ((IViewSite) fSite).getActionBars().getStatusLineManager();
|
|
||||||
}
|
|
||||||
else if (fSite instanceof IEditorSite){
|
|
||||||
statusManager = ((IEditorSite) fSite).getActionBars().getStatusLineManager();
|
|
||||||
}
|
|
||||||
if( statusManager != null )
|
|
||||||
statusManager.setErrorMessage( "" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Change this to work with qualified identifiers
|
//TODO: Change this to work with qualified identifiers
|
||||||
|
|
|
@ -63,6 +63,7 @@ public class Messages extends NLS {
|
||||||
public static String THViewPart_SupertypeHierarchy;
|
public static String THViewPart_SupertypeHierarchy;
|
||||||
public static String THViewPart_SupertypeHierarchy_tooltip;
|
public static String THViewPart_SupertypeHierarchy_tooltip;
|
||||||
public static String THViewPart_VerticalOrientation;
|
public static String THViewPart_VerticalOrientation;
|
||||||
|
public static String TypeHierarchyUI_OpenFailure_message;
|
||||||
public static String TypeHierarchyUI_OpenTypeHierarchy;
|
public static String TypeHierarchyUI_OpenTypeHierarchy;
|
||||||
public static String TypeHierarchyUI_SelectFromList;
|
public static String TypeHierarchyUI_SelectFromList;
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -49,6 +49,7 @@ import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.StatusLineHandler;
|
||||||
import org.eclipse.cdt.internal.ui.viewsupport.FindNameForSelectionVisitor;
|
import org.eclipse.cdt.internal.ui.viewsupport.FindNameForSelectionVisitor;
|
||||||
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
|
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
|
||||||
|
|
||||||
|
@ -115,6 +116,7 @@ public class TypeHierarchyUI {
|
||||||
Job job= new Job(Messages.TypeHierarchyUI_OpenTypeHierarchy) {
|
Job job= new Job(Messages.TypeHierarchyUI_OpenTypeHierarchy) {
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
try {
|
try {
|
||||||
|
StatusLineHandler.clearStatusLine(editor.getSite());
|
||||||
IRegion reg= new Region(sel.getOffset(), sel.getLength());
|
IRegion reg= new Region(sel.getOffset(), sel.getLength());
|
||||||
final ICElement[] elems= findInput(project, editorInput, reg);
|
final ICElement[] elems= findInput(project, editorInput, reg);
|
||||||
if (elems != null && elems.length == 2) {
|
if (elems != null && elems.length == 2) {
|
||||||
|
@ -122,6 +124,9 @@ public class TypeHierarchyUI {
|
||||||
public void run() {
|
public void run() {
|
||||||
openInViewPart(editor.getSite().getWorkbenchWindow(), elems[0], elems[1]);
|
openInViewPart(editor.getSite().getWorkbenchWindow(), elems[0], elems[1]);
|
||||||
}});
|
}});
|
||||||
|
} else {
|
||||||
|
StatusLineHandler.showStatusLineMessage(editor.getSite(),
|
||||||
|
Messages.TypeHierarchyUI_OpenFailure_message);
|
||||||
}
|
}
|
||||||
return Status.OK_STATUS;
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ THViewPart_LayoutMenu=Layout
|
||||||
THViewPart_FocusOn=Focus On ''{0}''
|
THViewPart_FocusOn=Focus On ''{0}''
|
||||||
THViewPart_Cancel=Cancel
|
THViewPart_Cancel=Cancel
|
||||||
TypeHierarchyUI_OpenTypeHierarchy=Open Type Hierarchy
|
TypeHierarchyUI_OpenTypeHierarchy=Open Type Hierarchy
|
||||||
|
TypeHierarchyUI_OpenFailure_message=Cannot resolve selected text to a defined type
|
||||||
TypeHierarchyUI_SelectFromList=Select one element from the list
|
TypeHierarchyUI_SelectFromList=Select one element from the list
|
||||||
OpenTypeHierarchyAction_label=Open Type Hierarchy
|
OpenTypeHierarchyAction_label=Open Type Hierarchy
|
||||||
OpenTypeHierarchyAction_tooltip=Open Type Hierarchy
|
OpenTypeHierarchyAction_tooltip=Open Type Hierarchy
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004, 2006 IBM Corporation and others.
|
||||||
|
* Copyright (c) 2007 Nokia, Inc.
|
||||||
|
* 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
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corp. - Rational Software - initial implementation
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
|
* Ed Swartz (Nokia)
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.util;
|
||||||
|
|
||||||
|
import org.eclipse.jface.action.IStatusLineManager;
|
||||||
|
import org.eclipse.ui.IEditorSite;
|
||||||
|
import org.eclipse.ui.IViewSite;
|
||||||
|
import org.eclipse.ui.IWorkbenchSite;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilities for clearing and setting status line. Client should
|
||||||
|
* invoke {@link #clearStatusLine(IWorkbenchSite)} before an operation
|
||||||
|
* and invoke {@link #showStatusLineMessage(IWorkbenchSite, String)} on
|
||||||
|
* error.
|
||||||
|
* @author eswartz
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class StatusLineHandler {
|
||||||
|
public static void showStatusLineMessage(final IWorkbenchSite site, final String message) {
|
||||||
|
// run the code to update the status line on the Display thread
|
||||||
|
// this way any other thread can invoke operationNotAvailable(String)
|
||||||
|
CUIPlugin.getStandardDisplay().asyncExec(new Runnable(){
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.lang.Runnable#run()
|
||||||
|
*/
|
||||||
|
public void run() {
|
||||||
|
IStatusLineManager statusManager = null;
|
||||||
|
if (site instanceof IViewSite){
|
||||||
|
statusManager = ((IViewSite) site).getActionBars().getStatusLineManager();
|
||||||
|
}
|
||||||
|
else if (site instanceof IEditorSite){
|
||||||
|
statusManager = ((IEditorSite) site).getActionBars().getStatusLineManager();
|
||||||
|
}
|
||||||
|
if( statusManager != null )
|
||||||
|
statusManager.setErrorMessage(message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public static void clearStatusLine(final IWorkbenchSite site) {
|
||||||
|
// run the code to update the status line on the Display thread
|
||||||
|
// this way any other thread can invoke clearStatusLine()
|
||||||
|
CUIPlugin.getStandardDisplay().asyncExec(new Runnable(){
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.lang.Runnable#run()
|
||||||
|
*/
|
||||||
|
public void run() {
|
||||||
|
IStatusLineManager statusManager = null;
|
||||||
|
if (site instanceof IViewSite){
|
||||||
|
statusManager = ((IViewSite) site).getActionBars().getStatusLineManager();
|
||||||
|
}
|
||||||
|
else if (site instanceof IEditorSite){
|
||||||
|
statusManager = ((IEditorSite) site).getActionBars().getStatusLineManager();
|
||||||
|
}
|
||||||
|
if( statusManager != null )
|
||||||
|
statusManager.setErrorMessage( "" ); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue