[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] fix for 66108
|
This patch includes:
- fix for bug #66108 (C++ browser cannot show members of class)
- TypeParser now uses resource to get scanner info
- all types now visible in the types view (ie not just classes & structs)
- runnables now use IProgressService.busyCursorWhile (prevents progress
dialog from being displayed during short operations)
Chris
Index: browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/CBrowsingPart.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/CBrowsingPart.java,v
retrieving revision 1.4
diff -u -r1.4 CBrowsingPart.java
--- browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/CBrowsingPart.java 18 Jun 2004 19:00:35 -0000 1.4
+++ browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/CBrowsingPart.java 21 Jun 2004 18:34:43 -0000
@@ -57,8 +57,6 @@
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.util.Assert;
@@ -102,6 +100,7 @@
import org.eclipse.ui.part.IShowInSource;
import org.eclipse.ui.part.ShowInContext;
import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.progress.IProgressService;
import org.eclipse.ui.texteditor.ITextEditor;
public abstract class CBrowsingPart extends ViewPart implements IMenuListener, ISelectionListener, IViewPartInputProvider {
@@ -759,7 +758,7 @@
for (int j = 0; j < enclosedTypes.length; ++j) {
ITypeInfo enclosedType = enclosedTypes[j];
if (enclosedType.getResolvedReference() != null) {
- ICElement typeElem = enclosedType.getResolvedReference().getCElement();
+ ICElement typeElem = enclosedType.getCElement();
if (typeElem != null && (typeElem.equals(cElem) || (typeElem instanceof IParent && hasChild(typeElem, cElem)))) {
return namespaces[i];
}
@@ -820,10 +819,11 @@
for (int j = 0; j < enclosedTypes.length; ++j) {
ITypeInfo enclosedType = enclosedTypes[j];
if (enclosedType.getResolvedReference() != null) {
- ICElement typeElem = enclosedType.getResolvedReference().getCElement();
- if (typeElem != null && typeElem.equals(cElem)) {
+ ICElement typeElem = enclosedType.getCElement();
+ if (typeElem != null && (typeElem.equals(cElem) || (typeElem instanceof IParent && hasChild(typeElem, cElem)))) {
return enclosedType;
}
+
}
}
}
@@ -1221,9 +1221,9 @@
}
};
- IRunnableContext runnableContext = new ProgressMonitorDialog(getShell());
+ IProgressService service = PlatformUI.getWorkbench().getProgressService();
try {
- runnableContext.run(true, true, runnable);
+ service.busyCursorWhile(runnable);
} catch (InvocationTargetException e) {
String title = OpenTypeMessages.getString("OpenTypeAction.exception.title"); //$NON-NLS-1$
String message = OpenTypeMessages.getString("OpenTypeAction.exception.message"); //$NON-NLS-1$
@@ -1250,13 +1250,13 @@
}
}
- protected boolean openInEditor(ITypeReference location) {
- ICElement cElement = location.getCElement();
+ private boolean openInEditor(ITypeReference location) {
+ ITranslationUnit unit = location.getTranslationUnit();
IEditorPart editorPart = null;
try {
- if (cElement != null)
- editorPart = EditorUtility.openInEditor(cElement);
+ if (unit != null)
+ editorPart = EditorUtility.openInEditor(unit);
if (editorPart == null) {
// open as external file
IPath path = location.getLocation();
@@ -1265,8 +1265,13 @@
editorPart = EditorUtility.openInEditor(storage);
}
}
- if (editorPart == null)
- return false;
+
+ // highlight the type in the editor
+ if (editorPart != null && editorPart instanceof ITextEditor) {
+ ITextEditor editor = (ITextEditor) editorPart;
+ editor.selectAndReveal(location.getOffset(), location.getLength());
+ return true;
+ }
} catch (CModelException ex) {
ex.printStackTrace();
return false;
@@ -1275,16 +1280,6 @@
return false;
}
- // highlight the type in the editor
- if (cElement != null && editorPart instanceof CEditor) {
- CEditor editor = (CEditor) editorPart;
- editor.setSelection(cElement);
- return true;
- } else if (editorPart instanceof ITextEditor) {
- ITextEditor editor = (ITextEditor) editorPart;
- editor.selectAndReveal(location.getOffset(), location.getLength());
- return true;
- }
return false;
}
Index: browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersView.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersView.java,v
retrieving revision 1.2
diff -u -r1.2 MembersView.java
--- browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersView.java 28 May 2004 15:41:35 -0000 1.2
+++ browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersView.java 21 Jun 2004 18:34:43 -0000
@@ -116,7 +116,7 @@
protected boolean isValidInput(Object element) {
if (element instanceof ITypeInfo) {
ITypeInfo type= (ITypeInfo)element;
- if (type.getCElementType() == ICElement.C_NAMESPACE && exists(type))
+ if (type.getCElementType() != ICElement.C_NAMESPACE && exists(type))
return true;
}
return false;
Index: browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersViewContentProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersViewContentProvider.java,v
retrieving revision 1.2
diff -u -r1.2 MembersViewContentProvider.java
--- browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersViewContentProvider.java 18 Jun 2004 19:00:35 -0000 1.2
+++ browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersViewContentProvider.java 21 Jun 2004 18:34:43 -0000
@@ -24,12 +24,12 @@
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
class MembersViewContentProvider extends CBrowsingContentProvider {
@@ -165,10 +165,10 @@
}
}
};
-
- IRunnableContext runnableContext = new ProgressMonitorDialog(getShell());
+
+ IProgressService service = PlatformUI.getWorkbench().getProgressService();
try {
- runnableContext.run(true, true, runnable);
+ service.busyCursorWhile(runnable);
} catch (InvocationTargetException e) {
String title = OpenTypeMessages.getString("OpenTypeAction.exception.title"); //$NON-NLS-1$
String message = OpenTypeMessages.getString("OpenTypeAction.exception.message"); //$NON-NLS-1$
@@ -184,7 +184,7 @@
ICElement elem = null;
if (location != null)
- elem = location.getCElement();
+ elem = info.getCElement();
if (elem == null) {
// could not resolve location
Index: browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/NamespacesViewContentProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/NamespacesViewContentProvider.java,v
retrieving revision 1.1
diff -u -r1.1 NamespacesViewContentProvider.java
--- browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/NamespacesViewContentProvider.java 26 May 2004 14:49:48 -0000 1.1
+++ browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/NamespacesViewContentProvider.java 21 Jun 2004 18:34:43 -0000
@@ -24,12 +24,12 @@
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
class NamespacesViewContentProvider extends CBrowsingContentProvider {
@@ -165,9 +165,9 @@
}
};
- IRunnableContext runnableContext = new ProgressMonitorDialog(getShell());
+ IProgressService service = PlatformUI.getWorkbench().getProgressService();
try {
- runnableContext.run(true, true, runnable);
+ service.busyCursorWhile(runnable);
} catch (InvocationTargetException e) {
String title = OpenTypeMessages.getString("OpenTypeAction.exception.title"); //$NON-NLS-1$
String message = OpenTypeMessages.getString("OpenTypeAction.exception.message"); //$NON-NLS-1$
Index: browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/TypesViewContentProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/TypesViewContentProvider.java,v
retrieving revision 1.1
diff -u -r1.1 TypesViewContentProvider.java
--- browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/TypesViewContentProvider.java 26 May 2004 14:49:48 -0000 1.1
+++ browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/TypesViewContentProvider.java 21 Jun 2004 18:34:43 -0000
@@ -77,9 +77,10 @@
if (element instanceof ITypeInfo) {
ITypeInfo info = (ITypeInfo)element;
- final int kinds[] = { ICElement.C_CLASS, ICElement.C_STRUCT };
-// ICElement.C_UNION, ICElement.C_ENUMERATION,
-// ICElement.C_TYPEDEF};
+ final int kinds[] = { ICElement.C_CLASS, ICElement.C_STRUCT,
+ ICElement.C_UNION, ICElement.C_ENUMERATION,
+ ICElement.C_TYPEDEF};
+ //TODO this should be a prefs option
return info.getEnclosedTypes(kinds);
}
Index: browser/org/eclipse/cdt/internal/ui/browser/opentype/OpenTypeAction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/browser/org/eclipse/cdt/internal/ui/browser/opentype/OpenTypeAction.java,v
retrieving revision 1.5
diff -u -r1.5 OpenTypeAction.java
--- browser/org/eclipse/cdt/internal/ui/browser/opentype/OpenTypeAction.java 27 May 2004 14:39:27 -0000 1.5
+++ browser/org/eclipse/cdt/internal/ui/browser/opentype/OpenTypeAction.java 21 Jun 2004 18:34:44 -0000
@@ -17,7 +17,7 @@
import org.eclipse.cdt.core.browser.ITypeSearchScope;
import org.eclipse.cdt.core.browser.TypeSearchScope;
import org.eclipse.cdt.core.model.CModelException;
-import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.resources.FileStorage;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
@@ -28,8 +28,6 @@
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Shell;
@@ -37,6 +35,8 @@
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
import org.eclipse.ui.texteditor.ITextEditor;
public class OpenTypeAction implements IWorkbenchWindowActionDelegate {
@@ -62,9 +62,9 @@
}
};
- IRunnableContext runnableContext = new ProgressMonitorDialog(getShell());
+ IProgressService service = PlatformUI.getWorkbench().getProgressService();
try {
- runnableContext.run(true, true, runnable);
+ service.busyCursorWhile(runnable);
} catch (InvocationTargetException e) {
String title = OpenTypeMessages.getString("OpenTypeAction.exception.title"); //$NON-NLS-1$
String message = OpenTypeMessages.getString("OpenTypeAction.exception.message"); //$NON-NLS-1$
@@ -106,9 +106,9 @@
}
};
- IRunnableContext runnableContext = new ProgressMonitorDialog(getShell());
+ IProgressService service = PlatformUI.getWorkbench().getProgressService();
try {
- runnableContext.run(true, true, runnable);
+ service.busyCursorWhile(runnable);
} catch (InvocationTargetException e) {
String title = OpenTypeMessages.getString("OpenTypeAction.exception.title"); //$NON-NLS-1$
String message = OpenTypeMessages.getString("OpenTypeAction.exception.message"); //$NON-NLS-1$
@@ -146,12 +146,12 @@
* @return true if succesfully displayed.
*/
private boolean openTypeInEditor(ITypeReference location) {
- ICElement cElement = location.getCElement();
+ ITranslationUnit unit = location.getTranslationUnit();
IEditorPart editorPart = null;
try {
- if (cElement != null)
- editorPart = EditorUtility.openInEditor(cElement);
+ if (unit != null)
+ editorPart = EditorUtility.openInEditor(unit);
if (editorPart == null) {
// open as external file
IPath path = location.getLocation();
Index: browser/org/eclipse/cdt/core/browser/ITypeInfo.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/browser/org/eclipse/cdt/core/browser/ITypeInfo.java,v
retrieving revision 1.4
diff -u -r1.4 ITypeInfo.java
--- browser/org/eclipse/cdt/core/browser/ITypeInfo.java 17 Jun 2004 19:20:08 -0000 1.4
+++ browser/org/eclipse/cdt/core/browser/ITypeInfo.java 21 Jun 2004 18:34:29 -0000
@@ -146,6 +146,11 @@
public ITypeReference getResolvedReference();
/**
+ * Returns the corresponding CElement or <code>null</code> if not found.
+ */
+ public ICElement getCElement();
+
+ /**
* Returns true if the type can be substituted.
*/
public boolean canSubstituteFor(ITypeInfo info);
Index: browser/org/eclipse/cdt/core/browser/ITypeReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/browser/org/eclipse/cdt/core/browser/ITypeReference.java,v
retrieving revision 1.1
diff -u -r1.1 ITypeReference.java
--- browser/org/eclipse/cdt/core/browser/ITypeReference.java 17 May 2004 15:48:48 -0000 1.1
+++ browser/org/eclipse/cdt/core/browser/ITypeReference.java 21 Jun 2004 18:34:29 -0000
@@ -59,9 +59,10 @@
public int getLength();
/**
- * Returns the CElement located at the stored offset and length.
+ * Returns the CElements located at the stored offset and length,
+ * or <code>null</code> if not found.
*/
- public ICElement getCElement();
+ public ICElement[] getCElements();
/**
* Returns a translation unit for this location.
Index: browser/org/eclipse/cdt/core/browser/TypeInfo.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/browser/org/eclipse/cdt/core/browser/TypeInfo.java,v
retrieving revision 1.5
diff -u -r1.5 TypeInfo.java
--- browser/org/eclipse/cdt/core/browser/TypeInfo.java 17 Jun 2004 19:20:08 -0000 1.5
+++ browser/org/eclipse/cdt/core/browser/TypeInfo.java 21 Jun 2004 18:34:29 -0000
@@ -11,6 +11,7 @@
package org.eclipse.cdt.core.browser;
import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ITypeDef;
import org.eclipse.cdt.internal.core.browser.cache.ITypeCache;
import org.eclipse.cdt.internal.core.browser.util.ArrayUtil;
import org.eclipse.core.resources.IProject;
@@ -24,7 +25,7 @@
protected int fSourceRefsCount = 0;
protected final static int INITIAL_REFS_SIZE = 1;
- protected final static int REFS_GROW_BY = 10;
+ protected final static int REFS_GROW_BY = 2;
protected final static ITypeInfo[] EMPTY_TYPES = new ITypeInfo[0];
public TypeInfo(int elementType, IQualifiedTypeName typeName) {
@@ -50,6 +51,29 @@
ITypeReference[] refs = new ITypeReference[fSourceRefsCount];
System.arraycopy(fSourceRefs, 0, refs, 0, fSourceRefsCount);
return refs;
+ }
+ return null;
+ }
+
+ public ICElement getCElement() {
+ ITypeReference ref = getResolvedReference();
+ if (ref != null) {
+ ICElement[] elems = ref.getCElements();
+ if (elems.length > 1) {
+ for (int i = 0; i < elems.length; ++i) {
+ ICElement elem = elems[i];
+ if (elem.getElementType() == fElementType && elem.getElementName().equals(getName())) {
+ //TODO should check fully qualified name
+ return elem;
+ }
+ if (elem instanceof ITypeDef && ((ITypeDef)elem).getTypeName().equals(getName())) {
+ //TODO should check fully qualified name
+ return elem;
+ }
+ }
+ } else if (elems.length == 1) {
+ return elems[0];
+ }
}
return null;
}
Index: browser/org/eclipse/cdt/core/browser/TypeReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/browser/org/eclipse/cdt/core/browser/TypeReference.java,v
retrieving revision 1.1
diff -u -r1.1 TypeReference.java
--- browser/org/eclipse/cdt/core/browser/TypeReference.java 17 May 2004 15:48:48 -0000 1.1
+++ browser/org/eclipse/cdt/core/browser/TypeReference.java 21 Jun 2004 18:34:29 -0000
@@ -173,11 +173,11 @@
return null;
}
- public ICElement getCElement() {
+ public ICElement[] getCElements() {
ITranslationUnit unit = getTranslationUnit();
if (unit != null) {
try {
- return unit.getElementAtOffset(fOffset);
+ return unit.getElementsAtOffset(fOffset);
} catch (CModelException e) {
}
}
Index: browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java,v
retrieving revision 1.5
diff -u -r1.5 TypeParser.java
--- browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java 17 Jun 2004 19:20:08 -0000 1.5
+++ browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java 21 Jun 2004 18:34:29 -0000
@@ -284,15 +284,15 @@
CodeReader reader = null;
Object stackObject = null;
+ IResource resource = null;
if (workingCopy != null) {
reader = createWorkingCopyReader(workingCopy);
- IResource resource = workingCopy.getResource();
+ resource = workingCopy.getResource();
if (resource != null) {
path = resource.getLocation();
}
stackObject = workingCopy;
} else {
- IResource resource = null;
IWorkspace workspace = CCorePlugin.getWorkspace();
if (workspace != null) {
IWorkspaceRoot wsRoot = workspace.getRoot();
@@ -314,7 +314,7 @@
fResourceStack.clear();
fScopeStack.clear();
fResourceStack.push(stackObject);
- parseContents(path, project, reader, language, progressMonitor);
+ parseContents(path, resource, project, reader, language, progressMonitor);
fResourceStack.pop();
}
} finally {
@@ -393,7 +393,7 @@
return reader;
}
- private void parseContents(IPath realPath, IProject project, CodeReader reader, ParserLanguage language, IProgressMonitor progressMonitor) throws InterruptedException {
+ private void parseContents(IPath realPath, IResource resource, IProject project, CodeReader reader, ParserLanguage language, IProgressMonitor progressMonitor) throws InterruptedException {
IScannerInfo scanInfo = null;
if (project != null) {
@@ -401,7 +401,7 @@
try {
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
if (provider != null) {
- IScannerInfo buildScanInfo = provider.getScannerInformation(project);
+ IScannerInfo buildScanInfo = provider.getScannerInformation(resource != null ? resource : project);
if (buildScanInfo != null)
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
}