<!-- 
	DO NOT EDIT THIS FILE WITH HTML EDITORS
-->

<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]">
   <title>Eclipse Platform Build Notes - Java Development Tooling UI</title>
</head>

<body>
<h1>
Eclipse Platform Build Notes<br>
Java Development Tooling UI</h1>
To see which bugs have been addressed in one of the builds simply open the <a href="http://bugs.eclipse.org/bugs/query.cgi?short_desc_type=allwordssubstr&amp;product=JDT&amp;component=UI&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;keywords_type=allwords&amp;keywords=&amp;emailtype1=substring&amp;email1=&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;changedin=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;namedcmd=Assigned&amp;newqueryname=&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">JDT UI bugzilla query page</a>, select status, resolution and the time frame.
<br><br>
========== Eclipse Build Input Junit 10th 2004 ==========<br>
<pre>
- in order to fix bug 63247, we have added a "Filters..." dialog to the view menu of
  the Java search results page. Besides the filters we had previously, the number of
  top level elements (or just elements when in the "flat" layout mode), can be limited
  to a given value. The default is to filter with a threshold value of 1000 top level 
  elements. 
</pre>
========== Eclipse Build Input May 25th 2004 ==========<br>
<pre>
- Javadoc view now uses style sheet /JavadocStyleSheet.css
- bug fixing
</pre>
========== Eclipse Build Input May 17th 2004 ==========<br>
<pre>
- added new Problem description hover. The Combined hover tries this one before
  the Javadoc hover and tries the Annotation description hover at the end
- improved cursor feedback when hovering over annotations in vertical ruler
- bug fixing
</pre>
========== Eclipse Build Input May 11th 2004 ==========<br>
<pre>
- reworked Java editor preference pages:
  - Annotations and Quick Diff sub-pages are gone: they are now centralized under
    Workbench > Editors
  - Hover preference page has been improved
  - several sub-pages are now separate pages under Java > Editor
  - merged Spelling preference sub-pages onto one page
  - added cursor feedback when hovering over annotations in vertical ruler
- removed Java editor related dependencies on compatibility plug-in
- externalized all strings
- bug fixing
- Semantic highlighting:
  - Class file editor support
  - Added highlightings: local/parameter variable reference, local variable declaration,
      static method invocation, abstract method invocation, inherited method invocation
  - Merged preference page with syntax highlighting page
- Italic text attribute support for syntax and semantic highlighting
- Case-insensitive task tag support in syntax highlighting
</pre>
========== Eclipse Build Input May 4th 2004 ==========<br>
<pre>
- Added new Folding preference page (Java > Editor) which allows to enable and
  configure folding for the Compilation Unit editor (support for the class file
  editor will follow)
- JDT UI defines the org.eclipse.jdt.ui.foldingStructureProvider extension
  point which allows arbitrary foldings to be contributed. The standard folding
  allows to fold methods, javadoc, inner types, and imports.
  - contributed structure providers must implement IJavaFoldingStructureProvider,
    which is responsible for keeping the folding model up to date when the document
    changes. Folding structure changes are reflected by updating the ProjectionAnnotationModel.
  - additionally, contributors may specify an IJavaFoldingPreferenceBlock that 
    will be displayed on the Java Editor preference page. User preferences for folding
    can be shown there.
</pre>
========== Eclipse Build Input April 27th 2004 ==========<br>
<pre>
- Added new Occurrences preference page (Java > Editor) which allows to control
  for which elements occurrences get marked (types, methods, constants, non-constant
  fields local variables and constants).
- Added a new tool bar button which allows to quickly toggle occurrence highlighting.
- Initial release of semantic highlighting
</pre>
========== Eclipse Build Input April 20th 2004 ==========<br>
<pre>
- Added experimental preference to enable browser widget in Javadoc view. This
  is disabled per default and can be enabled on the Work in Progress preference page.
- Added syntax coloring option for the 'return' keyword (Java > Editor > Syntax).  
</pre>
========== Eclipse Build Input April 6th 2004 ==========<br>
<pre>
- Search > "Occurrences In File" and "Exception Occurrences" use new Search view.
- Source folders now support inclusion filters.
- Override Indicators are now calculated in the background.
- New Override Indicator annotation allows to see this information in editors. Per
  default override and implements icons will appear in the vertical ruler and allow
  to jump to the super implementation.
</pre>
========== Eclipse Build Input March 30th 2004 ==========<br>
<pre>
- Java working sets now support non-Java projects as well
- JDT UI's view menus now show the working set icon
- Filter patterns can now also contain a ','
</pre>
========== Eclipse Build Input March 23th 2004 (3.0 M8) ==========<br>
<pre>
- The Java editor's background reconciler now gets the AST from the Java Model
  and offers a reconcile listener to inform internal clients about the new AST.
- An ASTProvider has been introduced which caches the active editor's AST. Clients
  who use an AST should use ASTProvider.getAST(...) to get the AST.
- Rename and move refactorings also update references in javadoc tags.
- Simplified rename dialogs.
- Semantic change in RenameSupport (org.eclipse.jdt.ui.refactoring):
  The flags UPDATE_JAVADOC_COMMENTS, UPDATE_REGULAR_COMMENTS, and
  UPDATE_STRING_LITERALS are deprecated and replaced by UPDATE_TEXTUAL_MATCHES.
  When renaming java elements, references in javadocs are now updated iff
  UPDATE_REFERENCES is set. All textual matches are now updated iff 
  UPDATE_REGULAR_COMMENTS or UPDATE_STRING_LITERALS is set.
</pre>
========== Eclipse Build Input March 16th 2004 ==========<br>
<pre>
- Change Method Signature refactoring now also updates javadoc tags
  and references in javadocs
- Call Hierarchy searches in the background
- Added view menu to Java Outline page which contains the custom filter action
  group and moved the "Link with Editor" and "Go Into Top Level Type" into
  it.
- Added "Import Declarations" and "Package Declarations" filters to the Java Outline page.
- Added view menu to the all Quick controls. Default actions are provided to
  move and resize the control.
- Added filters to the Quick Outline and to the Quick Hierarchy.
- Quick Outline supports "Go Into Top Level Type".
- Quick Outline can be sorted according to the Java Appearance preferences and
  also by defining types.
- Several bugs fixed.
</pre>
========== Eclipse Build Input March 9th 2004 ==========<br>
<pre>
- Several bugs fixed.
</pre>
========== Eclipse Build Input March 2nd 2004 ==========<br>
<pre>
- Completion proposal popup of the Java editor's content assistant now remembers
  its size.
</pre>
========== Eclipse Build Input February 24th 2004 ==========<br>
<pre>
- Java search results can now be grouped by project, package, file or type.
  The default is to group by package and can be changed from the context 
  menu.
- Several bugs fixed.
- JUnit launch short cuts are available from the run context menu
</pre>
========== Eclipse Build Input February 17th 2004 ==========<br>
<pre>
- Quick Outline/Structure in 'inherited mode' now includes all inherited types.
- Several bugs fixed.
</pre>
========== Eclipse Build Input February 10th 2004 ==========<br>
<pre>
- Spell Checking for comments and strings is now available. To enable this
  feature a word list must be provided. See Java > Editor > Spelling preferences.
- Editing performance improved when in Java Browsing perspective
- Linked mode now draw all its decorations using annotations and the added annotation drawing
  capabilities. See the Java>Editor>Annotations preferenc page for the configuration options of
  linked mode annotation.
</pre>
========== Eclipse Build Input February 4th 2004 ==========<br>
<pre>
- Quick Outline allows to show inherited members.
- Occurrences are now displayed using their own annotation type.
- When throwable is selected the Occurrences finder now marks the places where
- The Mark Occurrences in File preference has been moved from the Work in Progress
  preference page to the Editor > Appearance page.
- There's an additional preference under Mark Occurrences in File which allows to
  control whether occurrence annotations are sticky i.e. stay even if there is no
  valid Java element at the current caret position.
</pre>
========== Eclipse Build Input January 27th 2004 ==========<br>
<pre>
- Further performance improvements related to Java hover installation.
- Hover affordance shows correct key sequence and respects the scope.
- Comment and Uncomment actions in the menus have been replaced by Toggle Comment
  which per default is bound to Ctrl+Shift+C. The Comment and Uncomment commands
  are still available and can be bound to some key sequence if desired.
- Compilation Unit save operation now uses fine grained scheduling rule.
</pre>
========== Eclipse Build Input January 20th 2004 ==========<br>
<pre>
- Code formatter preference page adapted to new API. Conversion layer handles updates of older profiles. Downgrades are not supported.
- Performance improvements related to Java hover installation
</pre>
========== Eclipse Build Input December 16th 2003 ==========<br>
<pre>
- New Java working sets are initialized with the current selection.
</pre>
========== Eclipse Build Input December 9th 2003 ==========<br>
<pre>
- Move Static Members Refactoring now has a MRU ComboBox and CodeAssist for destination type entry.
- New 'Create Constant' quick fix
- Working sets for type hierarchy
- Type filter preference page: Allows to filter types (e.g. java.awt*) from 'All types', code assist and quick fix proposals.
- Configure exception variable name
</pre>
========== Eclipse Build Input December 2nd 2003 ==========<br>
<pre>
- New code formatter preference page added
- New 'Change else/ten/while/for.. statement to block' quick assist
</pre>
========== Eclipse Build Input November 20th 2003 ==========<br>
<pre>
- new refactorings Introduce Factory and Generalize Type
- Type hierarchy outline supports toggling between super- and subhierarchy
</pre>
========== Eclipse Build Input November 18th 2003 ==========<br>
<pre>
- Added encoding support for Java compare (not yet enabled)
</pre>
========== Eclipse Build Input November 11th 2003 ==========<br>
<pre>
- Adapted the code which does the blue-coloring for showing links in the editor
  to use the new ITextPresentationListener
- Added hover support for local variables
</pre>
========== Eclipse Build Input October 28th 2003 ==========<br>
<pre>
- Occurrences of the selected element can be highlighted in the Java editor
  (Java > Work in Progress > Mark occurrences in file). These Search annotations
  can be highlighted (see Annotation preference page) and also quickly removed
  using the Remove Occurrence Annotations source command (default: Alt+Shift+U).
- The "Disable overwrite mode" preference has been promoted from the Work in Progress
  preference page to the Java Editor's Typing preference page.
- Vertical ruler annotations can be disabled via editor's Annotation preference
  page.
</pre>
========== Eclipse Build Input October 21th 2003 ==========<br>
<pre>
- The Java editor now updates the editor status line with problem annotation
  messages while typing.
</pre>
========== Eclipse Build Input October 7th 2003 ==========<br>
<pre>
- The Package Explorer's built-in filters (fields, non-public members and static
  members) have been moved to the filter dialog (View menu > Filters...).
- Formatting has been extended to also format Javadoc if it is specified in the Java
  preferences. The preferences can be found on the Java Code Formatting preference page.
- "Format Element" is a new formatting action which formats the element at the cursor position. This
  is either a Javadoc comment, a method, a type, etc.
- "Correct Indent" bound to Ctrl+I in the default key binding corrects the line indentation
  of the selected lines.
- The Java editors use docment providers which retrieve their documents from the file buffers manager. Thus
  ther is how document updating between Java editors and Default text editors if they have been opened on the
  same file.
- The Java editors update the status line and the problems/tasks view according to the current caret position.
</pre>
========== Eclipse Build Input September 30rd 2003 ==========<br>
<pre>
- View menus which contain a "Filter..." entry now also contain the 3 last recently
  changed filters
- New Refactoring: Introduce Parameter ...
  Moves a selected selected expression to all call sites and reference the expression
  through a new parameter. The current implementation doesn't consider ripple methods
  nor does it recode the selected expression to fix accessibility problems.
</pre>
========== Eclipse Build Input September 23rd 2003 ==========<br>
<pre>
- Improved Change Method Signature refactoring
- Support for reference updates when moving local types
- Improved auto indentation
- "Correct indentation" fixes indentation (select Prefs->Java->Work in Progress->Smart Tab to bind this to the TAB key)
</pre>
========== Eclipse Build Input August 26th 2003 ==========<br>
<pre>
- Improved 'Set Javadoc Location' for JAR dialog
- Split and Join variable declaration quick assist
- Create field from parameter quick assist
- 'Add finally block' and 'Add else block' quick assist
- 'Remove catch clause' quick assist
- Smart cursor positioning on Java names
- Smart home now respects comments
- Syntax highlighting for method names and operators/brackets
- Enabled enclosing project scope for Java and NLS Search page
- Added enclosing project scope Java search actions to context menus
</pre>
========== Eclipse Build Input August 19th 2003 ==========<br>
<pre>
- The JDT Editor and its preference page now use marker annotation preferences
  declared in org.eclipse.ui.workbench.texteditor plug-in. This enables the
  editor to show new markers/annotations if they have a marker annotation
  specification.
- The JDT extends now ExtendedJavaEditor, an additional layer combining features 
  used in rich editors, such as the annotation, line number and overview rulers, 
  the print margin, current text highlighting, and quick diff.
- Fixed Java auto indentation after conditionals / loops without braces (e.g. <code>if</code> 
  statements without block).
- Added block commenting and uncommenting actions.
</pre>
========== Eclipse Build Input August 13th 2003 ==========<br>
<pre>
- Replaced "Go to Next Error" and "Go to Previous Error" with configurable
  "Go to Next Annotation" and "Go to Previous Annotation"
- F2 opportunity is shown in smaller font and can be disabled (preference)
- changed refactoring keybindings for Mac OS X from Alt-Shift-<some char> to Alt-Command-<some char> (#40989)
- changed "Show Outline" and "Show Hierarchy" keybindings for Mac OS X from Ctrl-O/T to Command-O/T (#41452)
- removed references to class MemberEdit in Java compare (#41383)
- several bugs fixed
</pre>
========== Eclipse Build Input August 5th 2003 ==========<br>
<pre>
- Improved context views:
    * contents of Declaration and Javadoc view is computed in the background
    * added context menu showing Copy and F3 (where available)
    * retargeted Select All action (default: Ctrl+A)
    * added preview functionality to Javadoc view
- F2 opportunity is shown in hovers
- Members view now shows types for fields
- several bugs fixed
</pre>
========== Eclipse Build Input July 29nd 2003 ==========<br>
========== Eclipse Build Input July 22nd 2003 ==========<br>
========== Eclipse Build Input July 15th 2003 ==========<br>
- more quick fixes with linked mode
- quick fix and quick assist as extension points now in public API
- compiler preference page restructured

========== Eclipse Build Input July 8th 2003 ==========<br>
<pre>
- Compilation unit editor supports light weight change indicator integrated with the line number ruler. Can be globally enabled on the
   Java Work in Progress preference page. Use the ruler context menu or "Ctrl+Shift+Q" to enable/disabled it for the current editor.
- quick fix and quick assist as extension points
- quick assist light bulb (first cut).
- quick fixes with linked mode
- create constructor from fields
- converted rename refactorings to processor/participant architecture
</pre>
========== Eclipse Build Input July 1st 2003 ==========<br>
<pre>
- AST rewriter supports moves & node markers
</pre>
========== Eclipse Build Input June 24th 2003 ==========<br>
========== Eclipse Build Input June 17th 2003 ==========<br>
========== Eclipse Build Input June 10th 2003 ==========<br>
========== Eclipse Build Input June 10th 2003 ==========<br>
<pre>
- Experimental views which show Javadoc and the Declaration for the element at the current
    cursor position. Use Window > Show View > Other... > Java to open them.
</pre>
========== Eclipse Build Input June 3rd 2003 ==========<br>
<pre>
- JUnit - introduced a JUNIT_HOME class path variable. When creating a new test case 
    with the test case wizard then the user has the option to put JUNIT_HOME on the build
    class path.
- The browsing views now also follow the caret position if "Linking with Editor" is enabled
    in the view menu.
- The range indication in the Java editor is synchronized with the caret position if
    the editor preference is enabled (default for a new workbench).
- The source tool tip is now shown in a source viewer.
- The Outline view no longer synchronizes immediately but after a delay once the caret remains
    at the same position.
- NOTE: The Java editor preference "Synchronize outline selection and range indication on
    caret move" will be removed for M2: it will always be enabled.
</pre>
========== Eclipse Build Input May 27th 2003 ==========<br>
<pre>
- Type hierarchy structured view: CTRL + T in the editor on a type, method or package.
- Improved dialogs for Generate Getter/Setter, Override Method and Delegate method: Insertion point, visibility, and comment generation
- Released first version of rename refactoring participants. The old rename refactoring actions are still
  in place. To enable a second Rename action which uses participants go to Preferences>Java>Work in Progress
  and enable the 'Rename with Participants' refactoring.
- Fixed bug 37846. To do so we had to break the API of the class org.eclipse.jdt.ui.actions.SelectionDispatchAction. 
  See document apichanges_jdt-ui.html for a describtion how to deal with the breakage.
- Editor
	- Introduced "Smart Opening Brace". To enable go Preferences>Java>Work in Progress.
	- Smart typing mode is enabled per default. Ctrl+M toggle the typing mode between "smart" and "raw". The default typing actions
	  such as auto indent, automatic addition of '"', ']', ')', '}', Smart Semicolon, and Smart Opening Brace adhere to the typing mode.
	- The automatic insertion of '}' has been changed to happen on <Enter> rather than on typing '{'.
</pre>
========== Eclipse Build Input May 20th 2003 ==========<br>
<pre>
- JUnit: added support to step through test failures
- Editor: Introduced "Smart Semicolon". To enable go to Preferences>Java>Editor>Work in Progress.
</pre>
========== Eclipse Build Input May 13th 2003 ==========<br>
<pre>
- Quick Fix on missing return type: guess varible to return
- Quick Fix on unneeded variable, parameter and private members: remove corresponding write accesses
</pre>
========== Eclipse Build Input May 6th 2003 ==========<br>
<pre>
- Quick Fix on mismatching parameters: remove/add/swap arguments, remove/add/replace/swap parameters of referenced method or constructor
</pre>
========== Eclipse Build Input April 29th 2003 ==========<br>
<pre>
- several bugs fixed
</pre>
========== Eclipse Build Input April 22nd 2003 ==========<br>
<pre>
- several bugs fixed
</pre>
</body></html>