Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 346293 - Type Hierarchy, Call Hierarchy causes NPE
Summary: Type Hierarchy, Call Hierarchy causes NPE
Status: RESOLVED FIXED
Alias: None
Product: PTP
Classification: Tools
Component: RDT (show other bugs)
Version: 5.0   Edit
Hardware: PC All
: P3 major (vote)
Target Milestone: ---   Edit
Assignee: John Liu CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-18 12:05 EDT by Michael Lindo CLA
Modified: 2011-05-19 15:51 EDT (History)
1 user (show)

See Also:


Attachments
a code patch applied to rdt.core (2.05 KB, text/plain)
2011-05-19 15:48 EDT, John Liu CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Lindo CLA 2011-05-18 12:05:31 EDT
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.
Comment 1 Michael Lindo CLA 2011-05-18 14:39:59 EDT
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.
Comment 2 John Liu CLA 2011-05-19 15:48:16 EDT
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.
Comment 3 John Liu CLA 2011-05-19 15:51:46 EDT
The fix is checked into cvs, please verify it by the next build. The server update is needed for verification.