| Summary: | Type Hierarchy, Call Hierarchy causes NPE | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Tools] PTP | Reporter: | Michael Lindo <mlindo> | ||||
| Component: | RDT | Assignee: | John Liu <jwsliu> | ||||
| Status: | RESOLVED FIXED | QA Contact: | |||||
| Severity: | major | ||||||
| Priority: | P3 | CC: | jwsliu | ||||
| Version: | 5.0 | ||||||
| Target Milestone: | --- | ||||||
| Hardware: | PC | ||||||
| OS: | All | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
Also reproduced by creating a source file such as:
struct A {
struct B {
struct C {
static int k;
int h() { return k; }
} c;
static int j;
int g() { return j + (new B)->c.h(); }
} b;
static int i;
static int f() { return i + (new A)->b.g(); }
};
void func() {
A* p = new A;
p->f();
}
Next perform a Remote Call Hierarchy on "func()". When you try to expand the results you should see the exception.
Created attachment 196166 [details]
a code patch applied to rdt.core
The problem is because the updated CH or TH view try to add a type label to variables, but the variable node created by ast binding has a null type. Fix it in VariableDeclaration class.
The fix is checked into cvs, please verify it by the next build. The server update is needed for verification. |
Build Identifier: 5.0.0.201105061712 java.lang.NullPointerException at org.eclipse.jface.viewers.StyledString.append(StyledString.java:264) at org.eclipse.jface.viewers.StyledString.append(StyledString.java:172) at org.eclipse.cdt.internal.ui.viewsupport.CElementLabelComposer$FlexibleStyledString.append(CElementLabelComposer.java:145) at org.eclipse.cdt.internal.ui.viewsupport.CElementLabelComposer.appendFieldLabel(CElementLabelComposer.java:489) at org.eclipse.cdt.internal.ui.viewsupport.CElementLabelComposer.appendElementLabel(CElementLabelComposer.java:233) at org.eclipse.cdt.internal.ui.viewsupport.CElementLabels.getElementLabel(CElementLabels.java:370) at org.eclipse.cdt.internal.ui.viewsupport.CElementLabels.getStyledElementLabel(CElementLabels.java:347) at org.eclipse.cdt.internal.ui.viewsupport.CElementLabels.getStyledTextLabel(CElementLabels.java:282) at org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider.getStyledText(CUILabelProvider.java:177) at org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.getStyledText(DelegatingStyledCellLabelProvider.java:195) at org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider.getStyledText(DecoratingStyledCellLabelProvider.java:192) at org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.update(DelegatingStyledCellLabelProvider.java:103) at org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider.update(DecoratingStyledCellLabelProvider.java:134) at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:152) at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:399) at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:485) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2167) at org.eclipse.jface.viewers.AbstractTableViewer.createItem(AbstractTableViewer.java:277) at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:757) at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:649) at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:636) at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1508) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1443) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1404) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1506) at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1465) at org.eclipse.ptp.internal.rdt.ui.typehierarchy.RemoteTHViewPart.updateViewers(RemoteTHViewPart.java:997) at org.eclipse.ptp.internal.rdt.ui.typehierarchy.RemoteTHViewPart.updateView(RemoteTHViewPart.java:1009) at org.eclipse.ptp.internal.rdt.ui.typehierarchy.RemoteTHViewPart.onHierarchySelectionChanged(RemoteTHViewPart.java:569) at org.eclipse.ptp.internal.rdt.ui.typehierarchy.RemoteTHViewPart$10.selectionChanged(RemoteTHViewPart.java:558) at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:164) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:162) at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2188) at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1211) at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1241) at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:239) at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:233) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:403) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4163) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) at org.eclipse.equinox.launcher.Main.run(Main.java:1410) Reproducible: Always Steps to Reproduce: 1. Create a new Remote C/C++ project 2. Add a source file called config.cpp with the contents: #include "header.h" class Small: public Big{ Small(){ Big(); } }; int main(){ foo(); return a; } Create a header file in a folder outside of your project folder called header.h with the contents: class Huge{ }; class Big: public Huge{ public: Big(){} private: int i; }; int bar(); int foo() { bar(); }; 3. Add the folder that contains the header file to the Paths and Symbols property page. 4. Re-index the project 5. Right-click on "Big" in the line "class Small: public Big{" and choose "open Type Hierarchy", you should then see the NPE Another way is to do a type hierarchy on "Small" and double click on "Big" in the Type Hierarchy view.