Community
Participate
Working Groups
When trying to open the Call Hierarchy of a record from the declaration of the Record (which is its canonical constructor) one expects either * that the calls to the canonical constructor are show (like for any method) * or that the calls to all contructors are shown like for classes in Bug 171658 Nevertheless with caret/selection on the record name in the declaration when trying to open the call hierarchy an information message pops up stating "Operation unavailable on the current selection. Select one or more methods, classes, fields, or initializers." Additional if we select a call to the canonical constructor (like the this() call in another contructor) we get two different behaviors: * If the record is declared in its own file OR locally inside a method it opens the call hierarchy of the parent method instead * If the record is an inner record in a class then we get an error dialog "Could not convert text selection into a Java element See error log for more details." (Stack trace attached at the end) It works though for the other non-canonical constructors of the record. MWE: record OwnFile(int i) { // does not work OwnFile() { // works this(0); // shows the call to parent method -- here OwnFile() } } ------------ class RecordTest { void method() { new OwnFile(); // works new OwnFile(1); // call hierarchy of method() new Inner(); // works new Inner(1); // error message record Local(int i) { // info message Local() { // works this(0); // call hierarchy of Local() } } new Local(); // works new Local(1); // call hierarchy of method() } record Inner(int i) { // info message Inner() { // works this(0); // error message } } } Tested with Eclipse SDK Version: 2021-09 (4.21) Build id: I20210630-1800 openjdk version "16.0.1" 2021-04-20 OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9) OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing) StackTrace from Error Log: java.lang.reflect.InvocationTargetException at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:397) at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:468) at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:228) at org.eclipse.ui.internal.progress.ProgressManager.lambda$26(ProgressManager.java:821) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74) at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:854) at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:830) at org.eclipse.jdt.internal.ui.actions.SelectionConverter.performForkedCodeResolve(SelectionConverter.java:261) at org.eclipse.jdt.internal.ui.actions.SelectionConverter.codeResolveOrInputForked(SelectionConverter.java:124) at org.eclipse.jdt.internal.ui.callhierarchy.OpenCallHierarchyAction.run(OpenCallHierarchyAction.java:98) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:278) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:252) at org.eclipse.jface.action.Action.runWithEvent(Action.java:474) at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:121) at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:567) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:319) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:253) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:584) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:653) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:443) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1270) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) at org.eclipse.swt.widgets.Widget.wmKeyDown(Widget.java:1785) at org.eclipse.swt.widgets.Control.WM_KEYDOWN(Control.java:5169) at org.eclipse.swt.widgets.Canvas.WM_KEYDOWN(Canvas.java:406) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4792) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4958) at org.eclipse.swt.internal.win32.OS.DispatchMessage(Native Method) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3624) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1158) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1047) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:567) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:654) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591) at org.eclipse.equinox.launcher.Main.run(Main.java:1462) Caused by: java.lang.NullPointerException: Cannot read field "parameters" because "this.targetMethod" is null at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.signature(MethodBinding.java:1085) at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.computeUniqueKey(MethodBinding.java:450) at org.eclipse.jdt.internal.compiler.lookup.Binding.computeUniqueKey(Binding.java:136) at org.eclipse.jdt.internal.codeassist.SelectionEngine.selectFrom(SelectionEngine.java:1346) at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1096) at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:167) at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:389) at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:382) at org.eclipse.jdt.internal.ui.actions.SelectionConverter.codeResolve(SelectionConverter.java:270) at org.eclipse.jdt.internal.ui.actions.SelectionConverter$1CodeResolveRunnable.run(SelectionConverter.java:254) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122) Root exception: java.lang.NullPointerException: Cannot read field "parameters" because "this.targetMethod" is null at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.signature(MethodBinding.java:1085) at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.computeUniqueKey(MethodBinding.java:450) at org.eclipse.jdt.internal.compiler.lookup.Binding.computeUniqueKey(Binding.java:136) at org.eclipse.jdt.internal.codeassist.SelectionEngine.selectFrom(SelectionEngine.java:1346) at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1096) at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:167) at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:389) at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:382) at org.eclipse.jdt.internal.ui.actions.SelectionConverter.codeResolve(SelectionConverter.java:270) at org.eclipse.jdt.internal.ui.actions.SelectionConverter$1CodeResolveRunnable.run(SelectionConverter.java:254) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)
Seems to be fixed in 4.22 Tested with Eclipse IDE for Enterprise Java and Web Developers (includes Incubating components) Version: 2021-12 (4.22.0) Build id: 20211202-1639