Hi All,

I am thinking of revising the way projects work in the JDE to put each
project in its own frame. The motivation for doing this is that it would
solve a lot of headaches associated with the current way of maintaining a
project's properties. Currently, every time you switch source buffers, the
JDE determines which project the buffer belongs to and reloads the project
file for that buffer, thereby setting all the JDE variables to the values
specific to that project. This can have disconcerting effects when stepping
through a program. For example, suppose you step into the JDK source, which
has no project associated with it. When you step into source for which
there is no project, the JDE sets the JDE variables to those in your .emacs
file. Thus, when you step into the JDK, the jde-db-source-directories
variable, which is used by the debugger to find source files, gets reset to
the .emacs file setting or to the default setting which is "". The bottom
line is that stepping into source belonging to another project (or no
project) can cause the debugger to lose its way.

To solve this problem, I propose that we associate each open project with a
separate frame. The title bar for the frame would contain the project's
name. Instead of resetting the project variables every time you load a
source file or switch buffers, the JDE would reset the variables only when
you selected the frame. Thus, suppose you Project A and Project B open and
were currently working in Project A (i.e., Project A's frame has the input
focus). The following table contrasts the differences between the current
project handling and the proposed handling for a typical sequence of 
user actions:

                                         JDE Action
User Action                   Current                  Proposed
-----------------------------------------------------------------------
Open A source file in A       No action                No action
Open B source file in A       Load B's prj.el*         No action
Switch frames from A to B     None                     Loads B's prj.el
Open A source file in B       Load A's prj.el          No action
Open B source file in B       No action                No Action

* Loading a prj.el file causes the values of JDE customization variables,
e.g, jde-global-classpath, to be reset to those specific for the project.

The net effect is that settings of JDE variables are local to
project frames not to source buffers. This means that you can open
another project's source file in the current project's frame without
triggering an update to the new project's variables. This is very
convenient for debugging (stepping causes the JDE to open source
files automatically).

I think it's also is advantageous from a UI point of view. It allows
you to know immediately what project you are working in at all times.

I'd like to hear your feedback on this proposal.

- Paul


Reply via email to