Community
Participate
Working Groups
Build ID: M20080911-1700 Steps To Reproduce: //Please copy and paste the following into an Eclipse Java Editor: //Look at the comments and follow the instructions in order //within the Eclipse Java editor. public class NavigationContext { class Subclass extends SClass { public void actionPerformed() { controlWorkflow(); //Ctrl-click here first } public void doSomething() { //Would be great if we ended up here after the 2nd click! System.out.println("Doing something very important."); } } abstract class SClass implements IFace { public void controlWorkflow() { doSomething(); //Ctrl-click here second } } interface IFace { void doSomething(); //Here's where we end up :o( } } More information: In this example, we're looking at the behaviour of Subclass. We Ctrl-click to navigate to the controlWorkflow method defined in SClass. We then further Ctrl-click on doSomething(). It seems far more likely that the user would really like to be shown the doSomething implementation in Subclass. Thinking in a task-oriented way, the user is far more likely to be trying to follow through what a bit of code does (mimicking a debugger) than wanting to look at the abstract structure of the class. The navigation could, in my opinion, perform better by remembering a specific subclass context when navigating to a superclass. It's the starting point of a task. So, in the above example, when navigating from SuperClass to SClass, the editor remembers that it has come from SuperClass and keeps that as context information. Then, when the second Ctrl-click occurs the editor can see that SuperClass has an implementation of doSomething and take the user there rather than the abstract definition of the method. A single class context should suffice, but it may ultimately make sense to capture a context subclass across a number of different class hierarchies to help a user navigate to implementation methods rather than abstract declarations across a whole range of code.
*** This bug has been marked as a duplicate of bug 44277 ***