JBrowse Change History Version 1.4 (Jan. 19, 2001)
By George Latkiewicz <georgel@arvotek.net>,
André Kaplan <akaplan@users.sourceforge.net>
 1.4 (released Jan. 19, 2001)
Introduction
JBrowse 1.4 is mostly an update to the jEdit 3.0 API and fixes reported bugs.
New Features and Enhancements
  • JBrowse uses the new EditAction API, actions are defined in actions.xml.
Bug Fixes
  • The JBrowse EBComponent was not properly removed from EditBus
  • JBrowse was not properly activated when auto-docked
Other Functional Changes
  • None
Internal Changes
  • JBrowse.Activator and JEditActivator were removed. JEditActivator.UMLTreeMouseHandler, JEditActivator.UMLTreeSelectionHandler were factored and moved to JBrowse.UMLTreeHandler.
 1.3.2 (released Nov. 19, 2000)
Introduction
JBrowse 1.3.2 mostly fixes the sort option.
New Features and Enhancements
  • Changing the sort order doesn't collapse the JBrowse tree anymore
Bug Fixes
  • The sort option was broken on Windows with JDK 1.3
Other Functional Changes
  • None
Internal Changes
  • The deprecated JEditTextArea.setOrigin is not used anymore. Instead, JBrowse uses JEditTextArea.setFirstLine.
 1.3.1 (released Oct. 27, 2000)
Introduction
JBrowse 1.3.1 is a bug fix release.
New Features and Enhancements
  • None
Bug Fixes
  • Bug #115158 fixed: JBrowse.TextAreaFocusHandler reparsed unnecessarily some buffers which caused the annoying behaviour
  • Bug #117727 fixed: Buffer.getFile().getPath() used instead of Buffer.getPath()
Other Functional Changes
  • None
Internal Changes
  • None
 1.3 (released Sep. 3, 2000)
Introduction
JBrowse 1.3 uses the new Dockable API.
New Features and Enhancements
  • Dockable API support.
  • PluginHolder support removed. Main reasons:
    • PluginHolder is no longer supported
    • Dockable API does PluginHolder's job
Bug Fixes
  • Automatic reparse was broken when a new Buffer was loaded
Other Functional Changes
  • None
Internal Changes
  • HoldableJBrowse removed
  • New JEditDockAction: toggles JBrowse docking state
  • New DockableJBrowse: implements DockableWindow similar to former HoldableJBrowse but for the Dockable API
 1.2 (released Aug. 15, 2000)
Introduction
Version 1.2 is a very important release:
  • I consider the merge between "official" and the "unofficial" JBrowse versions completed.
  • Lots of code reorganization to improve general readability and maintenance.
New Features and Enhancements
  • Automatic reparse option
  • Sort option
Bug Fixes
  • Session options were not saved;
  • Small display bug when "arguments" option is checked and "formal names" option isn't.
Other Functional Changes
  • JBrowse is an EditBus component (EBComponent), it listens to the following messages mostly for the new automatic reparse feature:
    • EditPaneUpdate.CREATED
    • EditPaneUpdate.DESTROYED
    • EditPaneUpdate.BUFFER_CHANGED

Internal Changes
I made very important changes to the JBrowse code base.
Main classes I worked on:
  • JBrowsePlugin
  • JBrowse
  • JBrowseOptionPane
Design goals:
  • Limit class dependencies, better encapsulation
  • Limit inner classes usage to simple event handlers
  • In the current design, JBrowse is meant to be integrated in other tools than jEdit. For instance, JBrowse could be primarily a command line tool or integrated with other editors/IDEs. I will try to keep this design for some time.
    Here is a list of interfaces on top of JBrowse that make it independent:
    • JBrowseParser
    • JBrowseParser.LineSource
    • JBrowse.Activator
    • PropertyAccessor
  • Except for JBrowse, JBrowseOptionPane, JBrowseOptionDialog, classes related to jEdit were prefixed by JEdit:
    • JEditLineSource: existed already;
    • JEditActivator: implementation of JBrowse.Activator
    • JEditPropertyAccessor: implementation of PropertyAccessor
    • JEditOpenAction: jEdit action that will open a JBrowse dialog.
Details:
  • JBrowse.ActionPane: was moved outside of JBrowse to JBrowseActionPane
  • JBrowse.StatusPane was moved outside of JBrowse to JBrowseStatusPane
  • The code of JBrowse.TreePane was merged into JBrowse
  • JEditLineSource was moved outside of JBrowsePlugin.java to JEditLineSource.java
  • JBrowsePlugin.OpenAction was moved outside of JBrowsePlugin and renamed JEditOpenAction
  • JBrowsePlugin.ViewActivator was moved outside of JBrowsePlugin and renamed JEditActivator
  • JBrowsePlugin.TreeEventAdapter: was moved inside JEditActivator and split in two event handlers:
    • JEditActivator.UMLTreeMouseHandler;
    • JEditActivator.UMLTreeSelectionHandler.
  • JBrowsePlugin.PropAccessor was moved outside of JBrowsePlugin and renamed JEditPropertyAccessor
  • JBrowseDummyParser: was renamed JBrowseNullParser
  • New ComparatorFactory: a factory of Comparators for the sort option
  • New UMLTreeSorter: To sort UMLTree nodes.
 1.1 (released Aug. 5, 2000)
Introduction
Version 1.1 introduces holdability. JBrowse can now be docked in the editor's frame with other holdable plugins.
New Features and Enhancements
  • PluginHolder support.
Bug Fixes
  • None
Other Functional Changes
  • None
Internal Changes
Most internal changes were code refactorings to be able to support PluginHolder:
  • The former JBrowse JDialog was transformed into a JPanel and split in three:
    JBrowseDialog
    A JDialog encapsulating the main JBrowse panel
    HoldableJBrowse
    A Holdable Panel encapsulating the main JBrowse panel
    JBrowse
    Now a JPanel, contains the code to display the main JBrowse Panel
  • New JBrowse.ActionPane: contains the code of the JBrowse action bar
  • New JBrowse.StatusPane: contains the code of the JBrowse status panel
  • JBrowse.TreePane: ActionPane and StatusPane code removed, one should see clearer what the TreePane actually does
  • JBrowsePlugin.OpenAction: the code implementing JBrowse.Activator was removed and isolated in the new JBrowsePlugin.ViewActivator.
  • New JBrowsePlugin.ViewActivator
  • JBrowseDummyParser: implements JBrowseParser, used when JBrowse is docked and the current buffer is not a java file.
  • Help.gif: The Help.gif is now bundled with JBrowse. Formerly, JBrowse was getting it from jEdit.
 1.0.2 (released Jul. 2, 2000)
Introduction
Version 1.0.2 is an important public release of JBrowse. It adds no new features to JBrowse 1.0.1 but corrects many bugs reported since JBrowse 1.0.1 and fixes an incompatibility with the new OptionPane API introduced in jEdit 2.4.
New Features and Enhancements
  • When clicking on a JBrowse node, the textarea origin is set so that the method or class shows near the top.
Bug Fixes
  • Fixed incompatibility with the new OptionPane API
  • Block comments at the end of java file caused JBrowse to complain: JEditLineSource: argument to getLine() is bad: <number>
  • Unterminated multi-line comments caused a 100% cpu problem
  • When calling Plugins > JBrowse on a non-java file, the user is warned that JBrowse can not run
  • Clicking on certain areas of JBrowse (eg. blank area) caused NPEs
  • Constructor may be erroneously considered static
Other Functional Changes
  • None
Internal Changes
  • None.
 1.0.1 (released Nov. 16, 1999)
Introduction
Version 1.0.1 is the sixth public release of JBrowse. It is a minor update to version 1.0. This version adds a couple of enhancements and one bug fix to version 1.0. Most importantly, it now again supports both JDK 1.1 and 1.2.
New Features and Enhancements
  • The JBrowse options dialog now has two buttons that appear at the bottom of the panel:
    • "Set As Defaults" - saves the current options as the new defaults for future sessions.
    • "Restore Defaults" - replaces the current options with the last saved default options and re-displays the tree using these option settings.
  • Improved the way positioning takes place. Previously, only changing the selected node would cause the highlight to be set. This was confusing to the user as attempting to reposition to the currently selected node would not update the highlight. Now a mouse click on a node will always cause the associated line in the active buffer to be highlighted.
Bug Fixes
  • Fixed a bug which caused all display options to be cleared when the Option Dialog was opened from the JBrowse configuration button (this bug was introduced with version 1.0).
Other Functional Changes
  • Made compatible with JDK 1.1.x. All versions of JBrowse previous to 1.0 worked with both JDK 1.1 and 1.2. JBrowse 1.0 used code which was dependant on JDK 1.2. This version replaces that code with an implementation that works fine with both JDK 1.1 and 1.2.
  • Updated the docs.
Internal Changes
  • Added some more internal documentation.
 1.0 (released Nov. 10, 1999)
Introduction
Version 1.0 is the fifth public release of JBrowse. It has earned this auspicious version number since it is believed to be sufficiently robust and now permits the representation of all the basic structural information available in Java 1.1 and 1.2 program files.
New Features and Enhancements
  • The tree can now represent implements  and extends information for classes/interfaces.
  • The tree can now represent throws information for methods.
  • New icons have been added to the tree to represent implements , extends  and throws elements.
  • New options have been added to toggle the display of implements/extends and throws information.
  • Previously JBrowse had two tabs one for the tree and one for setting the current options. In this version the tabs have been removed and a "configure" icon button has been added which will open (or bring to the foreground) an option dialog.
  • Handling of options has been changed so that, as changes are made in the option dialog, the tree will be updated automatically. This allows you to make changes without constantly switching between tabs and to easily examine the effect of each option setting.
  • Added a help icon button to the JBrowse toolbar to open the Help Viewer with the documentation for JBrowse.
  • Added error checking for constructors:
    • method without return type only assumed to be a constructor if name is name of containing class.
    • Constructors can't be native/abstract/static/synchronized/final
    • Interfaces can't have constructors
  • Added error checking to ensure that a Java file has at most one non-nested top-level public class or interface.
  • Auto-expand the non-nested top-level public class or interface (if present).
  • Added checks on modifier validity for methods:
    • Interface methods can't be native/static/synchronized/final/private/protected
    • Abstract methods can't be native/static/synchronized/final/private
  • Added logic to check for and report an attempt to position in a buffer using the JBrowse tree when that buffer is no longer the current active buffer.
Bug Fixes
  • Fixed a parsing bug, whereby abstract methods (e.g. in an interface) with a throws clause caused false parse errors to be reported:
  • Added error checking to the parsing code to catch attempts to pop/peek when the element stack is empty (this could cause JBrowse to fail to appear if it was invoked when the current buffer had mismatched braces or missing semicolons on abstract methods).
  • Fixed the tree display to not show the expand/contract control for a node when none of the node's children are visible by the current option settings (this required overriding isLeaf() in UMLTree.Model).
Other Functional Changes
  • Made compatible with the new logging mechanism introduced with jEdit 2.2pre3. Thus, this version requires jEdit 2.2pre3 or later.
  • Renamed the display option: "Class and interface modifiers" to "Keywords specified by icons" as it now controls the display of all the following keywords: class, interface, throws, implements, extends.
Internal Changes
  • The Option object's values are now initialized directly from the property settings (and not via the OptionPane GUI representation). This allows the Tree to be displayed faster and without requiring that the GUI for the Option dialog be initialized beforehand.
  • JBrowse can now be compiled using the IBM Open Source Jikes compiler. This required a reorganization of the Options classes, in particular:
    the Java files JBrowseOptions.java, FilterOptions.java and DisplayOptions.java have been replaced by Options.java.
 0.9.9 (released Oct. 11, 1999)
Introduction
This will be the last pre-1.0 release of JBrowse, and should be considered a 1.0 release candidate. Thus, it includes all the major features that are expected for that version, which will be released within the next two weeks, after any reported issues are addressed.
New Features and Enhancements
  • This version adds one major new feature -- it handles nested classes! Both nested top-level classes (i.e. nested interfaces and static classes) and non-static nested member classes are now displayed. At this point the full syntax of Java 1.1 and 1.2 are now supported, with the minor exceptions of local and anonymous inner-classes.
  • A new icon has been added for the display of nested member classes in the tree. The icon consists of a class box with another box in the background. Thus, top-level classes and nested member classes have distinct icons. This is to emphasize that nested member classes are different from top-level classes in that they exist within the context of a specific instance of an enclosing class and that they have access to the members of this enclosing class.
  • A new option has been added for controlling the display of nested classes. If "Qualify nested class/interface names" is selected the fully qualified class name will be shown for all nested classes as opposed to the final component of the name.
Bug Fixes
  • This release fixes the one known the one bug reported against the previous version, which incorrectly reported object block initializers as a parse error (thanks to Andre Kaplan for pointing this one out).
Other Functional Changes
  • Made compatible with the new OptionPane interface introduced with jEdit 2.1pre3. Thus, this version requires jEdit 2.1pre3 or later.
Internal Changes
  • Better organization of the classes used to represent the UML hierarchy. These are now all nested in the UML class.
  • Removed dependency on OptionPane outside of the JBrowsePlugin class and its members (this was possible because OptionPane is now an interface).
    This completes the effort (that started with 0.9.7) to reduce dependencies between classes. Now all dependencies on jEdit are established in its Activator class (JBrowsePlugin).
 0.9.8 (released Oct. 2, 1999)
Introduction
This is a minor update to the previous version. It is being released at this time in order to quickly make available a version that supports the new EditPlugin API that has made its first appearance in jEdit 2.1pre1. Thus, this version requires jEdit 2.1pre1 or later.
New Features and Enhancements
None.
Bug Fixes
This release fixes the one known bug reported against the previous version -- certain escape sequences in strings and character expressions would cause a spurious parse error to be reported. Specifically, the following used to cause false error reports:
  • '\"' (i.e. a quote char specified via the escape, which is not necessary).
  • '\\'
  • "....\\" (i.e. String ending with an escaped \)
Other Functional Changes
  • Made fully compatible with jEdit 2.1pre1. It now requires that version or a later one.
  • Now displays a wait cursor while parsing.
  • Opening the JBrowse window is now available as an EditAction (jbrowse.open).
Internal Changes
  • JBrowsePlugin now extends EditPlugin, rather than implementing Plugin.
  • JBrowsePlugin no longer uses the now deprecated jEdit.addOptionPane(), instead implements createOptionPane().
  • JBrowsePlugin no longer uses the now deprecated jEdit.addPluginAction(), instead creates an EditAction and associates it with a menu item using createMenuItems().
  • Made more progress in the effort to reduce dependencies by implementing a PropertyAccessor class and adding the method getPropertyAccessor() to the JBrowse.Activator class. Now the only dependency on jEdit outside of its Activator class (JBrowsePlugin) are limited to the OptionPane class. This is scheduled to be addressed with the jEdit 2.1pre3 release.
 0.9.7 (released Sept. 24, 1999)
Introduction
This version focuses on minor improvements and fixes as well as establishing a better foundation for the future.
New Features and Enhancements
  • Added logic to find and display syntax errors in the parsed file which preclude a proper analysis of the intended hierarchy. All such errors are displayed in the tree as nodes with an exclamation mark icon. An error indicator has been added as well, this will display an exclamation mark icon and a count of errors next to the buttons on the JBrowse tab.
    Note: the goal here is not to find all errors for you (there is no point in duplicating all that logic from a compiler) but simply to prevent the browser from failing to display and identifying those errors that make it impossible to build a displayable element.
  • Created separate options to control the minimum visibility level to be displayed for top-level vs. member elements.
  • Implemented "invisible nodes", a mechanism, whereby nodes can dynamically determine whether they should be displayed or suppressed. Now each parse creates all nodes and the current filter options specify which of these nodes to display, and not how to parse (therefore you no longer need to re-parse when changes to the filterOptions are made (e.g. the selection as to whether attributes are to be displayed).
  • The tips displayed when the mouse pointer is held above an element in the tree are more useful -- they now display information on the related element using the "inverse" of the current display options (e.g. if the node doesn't show line numbers then the tip will, etc.)
  • Added a status bar that displays the total number of classes, interfaces, methods and attributes found by the parse. (Also added an option to control toggle its display).
  • Added a "resize" button that will adjust the width of the JBrowse window so that the widest visible element in the tree and the status bar (if shown) will be visible without scrolling. You may find it useful to adjust the width using this control after changing options or expanding tree nodes.
Bug Fixes
  • Fixed bug which would cause parsing to fail (null pointer exception) on empty statements (e.g. ";" on a line by itself).
  • Fixed bug which would cause parsing to fail (class cast exception) when a top-level class or interface had a visibility which was lower than that set for display by the option setting.
  • Fixed problem that caused parsing to fail (java.util.NoSuchElementException) when a string contained one escaped double quote.
  • Fixed bug that would cause parsing to fail (java.util.NoSuchElementException) when a line contained an unterminated string (i.e. a single double quote).
Other Functional Changes
  • Removed the compatibility code previously included in order to support versions of jEdit older than 1.7pre5, specifically, removed classes JBrowseTSLOld and JBrowseTSL. Thus, JBrowse now requires jEdit 1.7pre5 or newer.
  • Improved display speed by not updating the tree model as nodes are being created, the model is reloaded once at the end of parsing or when changes are made to any display or filter options.
  • Minor improvement in icon and text alignment in the tree.
  • Now only inserts a package member node if its opening "{" is found (this prevents "un-commented" comments from generating spurious classes as easily (e.g. a line like "*/ This class is not required */" previously generated a node for the class "is")
  • Updated html docs and added this document
Internal Changes
The code has been completely re-organized, both in preparation for implementing inner-class support and to allow plugable replacement of the parsing code. In particular much of the code has been separated into functional components that have much fewer interdependencies:
  • Model - the classes that represent the elements and their hierarchy, i.e. UMLElement and its descendants and the UMLTree.Node root and its children, respectively.
  • GUI - the classes that present the visual interface, specifically the UMLTree classes the JBrowse class that contains the dialog, and its tabs and panels, etc.
  • Parser - the class that uses a particular source to build a model, e.g. JBrowseLineParser.
  • Source - the classes that define the methods that are needed to traverse a source of class file hierarchy information, e.g. JEditLineSource and TokenSource
  • Activator - the classes that establish the interface between the functionality of the other components and their environment, this consists of a class that implements the JBrowse.Activator interface and its helper classes, e.g. JBrowsePlugin defines this interface for the above components and the jEdit environment.
 0.9.6 (released July 18, 1999)
This is the first version of JBrowse to be publicly released.