Bug 333254 - [TabbedProperties] Repeated NullPointerException error when switching focus between editors/panes/views
Summary: [TabbedProperties] Repeated NullPointerException error when switching focus b...
Status: CLOSED WONTFIX
Alias: None
Product: Platform
Classification: Eclipse Project
Component: IDE (show other bugs)
Version: 3.6.1   Edit
Hardware: Macintosh Mac OS X - Carbon (unsup.)
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform UI Triaged CLA
QA Contact:
URL:
Whiteboard: stalebug
Keywords: needinfo
Depends on:
Blocks:
 
Reported: 2010-12-27 21:57 EST by S Popejoy CLA
Modified: 2019-09-24 13:49 EDT (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description S Popejoy CLA 2010-12-27 21:57:46 EST
Build Identifier: M20100909-0800

This is a difficult-to-reproduce bug; however at my last job it happened to other developers enough to make them jump ship to Idea :( . For everyone it started in Helios.

At some random point, switching views (any view: editor to error log, console to XML, etc) will bring up the obscure "Problem Occurred" alert with "java.lang.NullPointerException". Problem is not resolved until restart. Complete log output will be attached.

The user experience for an uncaught exception of this type is really bad. There is no useful purpose for popping the alert to front (which isn't in focus so you have to click to dismiss) with zero useful information about how to correct it. It would be better to simply populate the error log and maybe notify in the lower corner.


Reproducible: Sometimes

Steps to Reproduce:
1. Use Helios with JDT, maybe with XML, spring, clojure, maven? 
2. Watch this popup arrive.
3. Hate life.
Comment 1 S Popejoy CLA 2010-12-27 21:58:41 EST
Error log output:

eclipse.buildId=M20100909-0800
java.version=1.5.0_26
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86, WS=cocoa, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.java.product -keyring /Users/stuart/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86 -product org.eclipse.epp.package.java.product -keyring /Users/stuart/.eclipse_keyring -showlocation


Error
Mon Dec 27 21:32:35 EST 2010
Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".

java.lang.NullPointerException
	at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.handlePartActivated(TabbedPropertySheetPage.java:320)
	at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage$1.partActivated(TabbedPropertySheetPage.java:118)
	at org.eclipse.ui.internal.PartListenerList$1.run(PartListenerList.java:72)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.runtime.Platform.run(Platform.java:888)
	at org.eclipse.ui.internal.PartListenerList.fireEvent(PartListenerList.java:57)
	at org.eclipse.ui.internal.PartListenerList.firePartActivated(PartListenerList.java:70)
	at org.eclipse.ui.internal.PartService.firePartActivated(PartService.java:187)
	at org.eclipse.ui.internal.PartService.setActivePart(PartService.java:306)
	at org.eclipse.ui.internal.WWinPartService.updateActivePart(WWinPartService.java:135)
	at org.eclipse.ui.internal.WWinPartService.access$0(WWinPartService.java:125)
	at org.eclipse.ui.internal.WWinPartService$WWinListener.partDeactivated(WWinPartService.java:50)
	at org.eclipse.ui.internal.PartListenerList2$4.run(PartListenerList2.java:115)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.runtime.Platform.run(Platform.java:888)
	at org.eclipse.ui.internal.PartListenerList2.fireEvent(PartListenerList2.java:55)
	at org.eclipse.ui.internal.PartListenerList2.firePartDeactivated(PartListenerList2.java:113)
	at org.eclipse.ui.internal.PartService.firePartDeactivated(PartService.java:242)
	at org.eclipse.ui.internal.PartService.setActivePart(PartService.java:300)
	at org.eclipse.ui.internal.WorkbenchPagePartList.fireActivePartChanged(WorkbenchPagePartList.java:57)
	at org.eclipse.ui.internal.PartList.setActivePart(PartList.java:136)
	at org.eclipse.ui.internal.WorkbenchPage.setActivePart(WorkbenchPage.java:3537)
	at org.eclipse.ui.internal.WorkbenchPage.requestActivation(WorkbenchPage.java:3077)
	at org.eclipse.ui.internal.PartPane.requestActivation(PartPane.java:279)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:237)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3776)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1367)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1390)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1371)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1355)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:2972)
	at org.eclipse.swt.widgets.Display.checkFocus(Display.java:618)
	at org.eclipse.swt.widgets.Shell.makeFirstResponder(Shell.java:1112)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5086)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:220)
	at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:1943)
	at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2025)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5040)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:4582)
	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:4659)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:115)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3274)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	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:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:592)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Comment 2 S Popejoy CLA 2010-12-27 21:59:45 EST
One more comment: while I'm reporting this now on OS X, this happened on my Ubuntu workstation at the past job and the other developers were on Windows XP.
Comment 3 Dani Megert CLA 2010-12-29 05:32:15 EST
I can't reproduce it. More detailed steps would be good.

Can you try whether this still occurs using 3.7 M4?
Comment 4 S Popejoy CLA 2010-12-29 20:30:49 EST
Happened again, this time while browsing a *.mod (DTD fragment) file and closing the properties dialog. 

I tried to reproduce immediately following with large dtds, xmls and big builds in the background. Seems to happen after lots of use, maybe a memory problem?

Sorry I can't be more helpful with reproduction, I'll keep trying.

Haven't tried M4 yet.
Comment 5 Remy Suen CLA 2010-12-29 20:38:21 EST
There is also bug 319197 but the problem seems to have mysteriously disappeared for that user.

You could probably workaround the problem by never having the 'Properties' view open...but I presume you have it around for a reason. :O
Comment 6 S Popejoy CLA 2010-12-29 20:46:07 EST
Ah, I would love to have the properties dialog go away _forever_, but anytime I open a DTD or .mod file it helpfully pops up again ... I guess that would be another bug report.

Happened to me again just now; I'm wondering if clojure is messing with something.

I'm very committed to trying to reproduce this, but I would like to re-emphasize that whatever the bug is, the popup is the real problem:

* terrible experience: a popup with obscure, non-helpful info

* popped in-front (with horrible slow pop-up animation) that doesn't grab focus so you can't simply hit enter to make it go away, you can't tab to it, etc

* for bugs that the user doesn't have a chance of addressing, and what's more never seem to indicate anything more serious than some SWT/RCP flailing.

Would eclipse devs consider at least adding an option to suppress it?
Comment 7 Remy Suen CLA 2010-12-29 21:59:23 EST
(In reply to comment #6)
> Ah, I would love to have the properties dialog go away _forever_, but anytime I
> open a DTD or .mod file it helpfully pops up again ... I guess that would be
> another bug report.

Note that you are speaking about a _dialog_ whereas I am talking about a _view_. Are we actually talking about the same thing here? Are you saying that every time you open a .mod file a dialog appears on your screen?

> * terrible experience: a popup with obscure, non-helpful info

This is a general issue with any runtime error like a NullPointerException or an IllegalArgumentException. I'm not sure what can be done here.

> * popped in-front (with horrible slow pop-up animation) that doesn't grab focus
> so you can't simply hit enter to make it go away, you can't tab to it, etc

Is the error dialog also slow for your coworkers? Does it also not grab focus for them? Or could this be an issue exclusive to Eclipse's Cocoa build?

> * for bugs that the user doesn't have a chance of addressing, and what's more
> never seem to indicate anything more serious than some SWT/RCP flailing.

It's not clear to me how we would determine if a runtime error is "serious" or not.
Comment 8 S Popejoy CLA 2010-12-30 01:19:34 EST
(In reply to comment #7)

> Note that you are speaking about a _dialog_ whereas I am talking about a
> _view_. 

Sorry, I meant the properties view. It opens/activates (comes to front of whatever view tray/window it was last in) every time a DTD or .mod file is opened. Would love to turn that off. It "works", although try doing alt-up or alt-down editing a DTD, it chugs and chugs when the property dialog is open ...

> This is a general issue with any runtime error like a NullPointerException or
> an IllegalArgumentException. I'm not sure what can be done here.

> It's not clear to me how we would determine if a runtime error is "serious" or
> not.

Of course. But, likewise, there's little the program or user will be able to do. Throwing up a dialog in the non-serious case is pointless; in the serious case I suppose it will allow a brief "goodbye" before crashing but little else ... 

If I could set this to e.g. simply notify in the bottom corner, and obviously still populate the error log, then the interruptions to my workflow would cease. 

> Is the error dialog also slow for your coworkers? Does it also not grab focus
> for them? Or could this be an issue exclusive to Eclipse's Cocoa build?

I'm getting in contact with them to find out if anyone can reproduce it. The slowness is the animation which may be cocoa, I can't remember if this happened on ubuntu linux. 

However, the focus problem (not grabbing focus even though it pops to front) definitely happened on linux too. 

The error is definitely XML (maybe DTD) related, and happening quite often to me, but I still cannot formulate a reproducible scenario. Notably this never happened with XSD files... at the old job we were editing a lot of spring and maven xml and using m2eclipse; whereas here it might be some kind of unholy combo with counterclockwise. 

Tomorrow I'll see if I can find the source for the SWT stack traces to see what's missing. My SWT is pretty rusty though ...
Comment 9 S Popejoy CLA 2010-12-30 12:51:40 EST
Now I'm seeing some different errors, this one would seem to be coming directly from the DTD editor:

null
Error
Thu Dec 30 01:13:32 EST 2010
Problems occurred when invoking code from plug-in: "org.eclipse.wst.sse.ui".

java.lang.NullPointerException
at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.validateRegistry(TabbedPropertySheetPage.java:918)
at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.setInput(TabbedPropertySheetPage.java:717)
at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.selectionChanged(TabbedPropertySheetPage.java:555)
at org.eclipse.wst.dtd.ui.internal.DTDTabbedPropertySheetPage.selectionChanged(DTDTabbedPropertySheetPage.java:42)
at org.eclipse.wst.dtd.ui.internal.DTDEditor$1.selectionChanged(DTDEditor.java:72)
at org.eclipse.wst.sse.ui.StructuredTextEditor$4.run(StructuredTextEditor.java:583)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.wst.sse.ui.StructuredTextEditor$StructuredSelectionProvider.fireSelectionChanged(StructuredTextEditor.java:581)
at org.eclipse.wst.sse.ui.StructuredTextEditor$StructuredSelectionProvider.handlePostSelectionChanged(StructuredTextEditor.java:662)
at org.eclipse.wst.sse.ui.StructuredTextEditor$3.selectionChanged(StructuredTextEditor.java:555)
at org.eclipse.jface.text.TextViewer.firePostSelectionChanged(TextViewer.java:2745)
at org.eclipse.jface.text.TextViewer.firePostSelectionChanged(TextViewer.java:2693)
at org.eclipse.jface.text.TextViewer$5.run(TextViewer.java:2672)
at org.eclipse.swt.widgets.Display.runTimers(Display.java:3754)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3268)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
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:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Comment 10 S Popejoy CLA 2010-12-30 12:54:10 EST
... and here's the other one. Looking at the three of these it would seem that the "TabbedPropertySheetPage" in each is probably the "Properties" view for the DTD (which again is not optional, it always activates when a new DTD/mod file is opened):

null
Error
Thu Dec 30 01:13:29 EST 2010
Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".

java.lang.NullPointerException
at org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage.createControl(TabbedPropertySheetPage.java:389)
at org.eclipse.ui.views.properties.PropertySheet.doCreatePage(PropertySheet.java:212)
at org.eclipse.ui.part.PageBookView.createPage(PageBookView.java:408)
at org.eclipse.ui.part.PageBookView.partActivated(PageBookView.java:751)
at org.eclipse.ui.views.properties.PropertySheet.partActivated(PropertySheet.java:325)
at org.eclipse.ui.part.PageBookView$4.partActivated(PageBookView.java:1010)
at org.eclipse.ui.internal.PartListenerList2$1.run(PartListenerList2.java:70)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.runtime.Platform.run(Platform.java:888)
at org.eclipse.ui.internal.PartListenerList2.fireEvent(PartListenerList2.java:55)
at org.eclipse.ui.internal.PartListenerList2.firePartActivated(PartListenerList2.java:68)
at org.eclipse.ui.internal.PartService.firePartActivated(PartService.java:192)
at org.eclipse.ui.internal.PartService.setActivePart(PartService.java:306)
at org.eclipse.ui.internal.WorkbenchPagePartList.fireActivePartChanged(WorkbenchPagePartList.java:57)
at org.eclipse.ui.internal.PartList.setActivePart(PartList.java:136)
at org.eclipse.ui.internal.WorkbenchPage.setActivePart(WorkbenchPage.java:3537)
at org.eclipse.ui.internal.WorkbenchPage.requestActivation(WorkbenchPage.java:3077)
at org.eclipse.ui.internal.PartPane.requestActivation(PartPane.java:279)
at org.eclipse.ui.internal.EditorPane.requestActivation(EditorPane.java:98)
at org.eclipse.ui.internal.PartPane.setFocus(PartPane.java:325)
at org.eclipse.ui.internal.EditorPane.setFocus(EditorPane.java:127)
at org.eclipse.ui.internal.PartStack.presentationSelectionChanged(PartStack.java:844)
at org.eclipse.ui.internal.PartStack.access$1(PartStack.java:827)
at org.eclipse.ui.internal.PartStack$1.selectPart(PartStack.java:137)
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation$1.handleEvent(TabbedStackPresentation.java:133)
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:269)
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:278)
at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder.access$1(DefaultTabFolder.java:1)
at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder$2.handleEvent(DefaultTabFolder.java:88)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3776)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1367)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1390)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1187)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2743)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1429)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3776)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1367)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1390)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1187)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3622)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3277)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
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:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Comment 11 Nitin Dahyabhai CLA 2010-12-31 03:49:45 EST
(In reply to comment #8)
> Sorry, I meant the properties view. It opens/activates (comes to front of
> whatever view tray/window it was last in) every time a DTD or .mod file is
> opened. Would love to turn that off.

Opened bug 333359.
Comment 12 Dani Megert CLA 2011-01-03 04:03:07 EST
>Haven't tried M4 yet.
Can you please try it out?
Comment 13 Lars Vogel CLA 2019-09-24 13:49:59 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.