1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-25 09:55:29 +02:00

Added skipping of problem bindings. More stuff shows up now. Still don't know how to update the IndexView after a PDOM update, though...

This commit is contained in:
Doug Schaefer 2005-12-24 03:30:45 +00:00
parent 943a30e50c
commit 046c7ad162
2 changed files with 18 additions and 19 deletions

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
@ -75,11 +76,11 @@ public class PDOMCPPLinkage extends PDOMLinkage {
} }
public PDOMBinding addName(IASTName name) throws CoreException { public PDOMBinding addName(IASTName name) throws CoreException {
if (name == null) if (name == null || name.toCharArray().length == 0)
return null; return null;
IBinding binding = name.resolveBinding(); IBinding binding = name.resolveBinding();
if (binding == null) if (binding == null || binding instanceof IProblemBinding)
// Can't tell what it is // Can't tell what it is
return null; return null;
@ -89,7 +90,7 @@ public class PDOMCPPLinkage extends PDOMLinkage {
if (binding instanceof PDOMBinding) if (binding instanceof PDOMBinding)
pdomBinding = (PDOMBinding)binding; pdomBinding = (PDOMBinding)binding;
else if (binding instanceof CPPField) else if (binding instanceof CPPField && parent instanceof PDOMCPPClassType)
pdomBinding = new PDOMCPPField(pdom, (PDOMCPPClassType)parent, name); pdomBinding = new PDOMCPPField(pdom, (PDOMCPPClassType)parent, name);
else if (binding instanceof CPPVariable) { else if (binding instanceof CPPVariable) {
if (!(binding.getScope() instanceof CPPBlockScope)) if (!(binding.getScope() instanceof CPPBlockScope))
@ -104,7 +105,7 @@ public class PDOMCPPLinkage extends PDOMLinkage {
} }
// Add in the name // Add in the name
if (pdomBinding != null && name.getFileLocation() != null) if (pdomBinding != null)
new PDOMName(pdom, name, pdomBinding); new PDOMName(pdom, name, pdomBinding);
return pdomBinding; return pdomBinding;

View file

@ -28,6 +28,7 @@ import org.eclipse.cdt.internal.core.pdom.PDOMUpdator;
import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor; import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName; import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
@ -43,6 +44,7 @@ import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILazyTreeContentProvider; import org.eclipse.jface.viewers.ILazyTreeContentProvider;
@ -58,6 +60,7 @@ import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars; import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.ISharedImages; import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE; import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.part.ViewPart;
@ -137,14 +140,8 @@ public class IndexView extends ViewPart implements PDOMDatabase.IListener {
for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage()) for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage())
++nl; ++nl;
viewer.setChildCount(cproject, nl); viewer.setChildCount(cproject, nl);
if (viewer.getExpandedState(cproject))
for (int j = 0; j < nl; ++j)
updateElement(cproject, j);
return; return;
} }
} }
} else if (parent instanceof ICProject) { } else if (parent instanceof ICProject) {
ICProject cproject = (ICProject)parent; ICProject cproject = (ICProject)parent;
@ -162,11 +159,6 @@ public class IndexView extends ViewPart implements PDOMDatabase.IListener {
BTreeCounter counter = new BTreeCounter(pdom); BTreeCounter counter = new BTreeCounter(pdom);
linkage.getIndex().visit(counter); linkage.getIndex().visit(counter);
viewer.setChildCount(linkage, counter.count); viewer.setChildCount(linkage, counter.count);
if (viewer.getExpandedState(linkage))
for (int j = 0; j < counter.count; ++j)
updateElement(linkage, j);
return;
} else if (parent instanceof PDOMLinkage) { } else if (parent instanceof PDOMLinkage) {
PDOMLinkage linkage = (PDOMLinkage)parent; PDOMLinkage linkage = (PDOMLinkage)parent;
PDOMDatabase pdom = linkage.getPDOM(); PDOMDatabase pdom = linkage.getPDOM();
@ -178,11 +170,14 @@ public class IndexView extends ViewPart implements PDOMDatabase.IListener {
if (binding instanceof PDOMMemberOwner) { if (binding instanceof PDOMMemberOwner) {
PDOMMemberOwner owner = (PDOMMemberOwner)binding; PDOMMemberOwner owner = (PDOMMemberOwner)binding;
viewer.setChildCount(binding, owner.getNumMembers()); viewer.setChildCount(binding, owner.getNumMembers());
} } else
viewer.setChildCount(binding, 0);
} }
} else if (parent instanceof PDOMMemberOwner) { } else if (parent instanceof PDOMMemberOwner) {
PDOMMemberOwner owner = (PDOMMemberOwner)parent; PDOMMemberOwner owner = (PDOMMemberOwner)parent;
viewer.replace(parent, index, owner.getMember(index)); PDOMMember member = owner.getMember(index);
viewer.replace(parent, index, member);
viewer.setChildCount(member, 0);
} }
} catch (CoreException e) { } catch (CoreException e) {
CUIPlugin.getDefault().log(e); CUIPlugin.getDefault().log(e);
@ -386,6 +381,7 @@ public class IndexView extends ViewPart implements PDOMDatabase.IListener {
manager.add(openDefinitionAction); manager.add(openDefinitionAction);
//manager.add(new Separator()); //manager.add(new Separator());
//drillDownAdapter.addNavigationActions(manager); //drillDownAdapter.addNavigationActions(manager);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
} }
private void hookDoubleClickAction() { private void hookDoubleClickAction() {
@ -418,7 +414,7 @@ public class IndexView extends ViewPart implements PDOMDatabase.IListener {
ICProject[] cprojects = model.getCProjects(); ICProject[] cprojects = model.getCProjects();
int n = -1; int n = -1;
for (int i = 0; i < cprojects.length; ++i) { for (int i = 0; i < cprojects.length; ++i) {
ICProject cproject = cprojects[i]; final ICProject cproject = cprojects[i];
IPDOM pp = PDOM.getPDOM(cproject.getProject()); IPDOM pp = PDOM.getPDOM(cproject.getProject());
if (pp != null) { if (pp != null) {
++n; ++n;
@ -426,7 +422,9 @@ public class IndexView extends ViewPart implements PDOMDatabase.IListener {
final int index = n; final int index = n;
viewer.getControl().getDisplay().asyncExec(new Runnable() { viewer.getControl().getDisplay().asyncExec(new Runnable() {
public void run() { public void run() {
((IndexContentProvider)viewer.getContentProvider()).updateElement(model, index); viewer.replace(model, index, cproject);
viewer.getControl().redraw();
viewer.getControl().update();
}; };
}); });
return; return;