<!doctype html 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]">
   <meta name="Author" content="IBM">
   <title>Eclipse Platform Release Notes - Desktop</title>
</head>
<body>

<h1>
Eclipse Platform Build Notes</h1>

<h1>
Text Editor Support (including JFace Text)</h1>
&nbsp;
<p>&nbsp;
<br>&nbsp;
<p>Eclipse SDK Build 20020115
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#4335 Find/Replace should come up with first history entry (1GEL5NS)<br>
#4338 Find/change history is never pruned (1GHDUJW)<br>
#4342 TextViewer.setTopIndex doesn't take horizontal scrollbar into account (1GIFYC7)<br>
#4343 Text hidden inserted by code assist (1GJ9PGK)<br>
#6701 Code assist: java hint not properly aligned<br>
#6379 StatusLine 'Writeable' is not readable<br>
<p>
<hr WIDTH="100%">
<p>Eclipse SDK Build 20020108
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#3833 Javadoc hover appears under code assist window (1GF0K3T)
<br>#4363 Two Java Doc hovers
<p>
<hr WIDTH="100%">
<p>Eclipse SDK Build 20011218
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#1614 Current line in Debugger should start at center of source ed
<br>#5000 Context menu IDs not fully qualified
<br>#5959 Text editor: SEVERE - Revert should be undoable
<br>#6075 NPE while editing in compare view
<br>#6318 F2 window accessability issues
<br>#4367 Argument hover doesn't work for nested method call
<br>#4964 Automatic Code Assist needs to be smarter
<br>#4966 Automatic Code Assist needs to be smarter #2
<br>#4967 Automatic Code Assist needs to be smarter #3
<br>#4968 Automatic Code Assist needs to be smarter #4
<br>#4969 Automatic Code Assist needs to be smarter #5
<br>#4999 Automatic Code Assist needs to be smarter #7
<br>#6589 ctrl+insert, shift+insert incorrectly flips the insert/overw
<br>#3467 Horizontal scrolling when stepping through errors (1GE6AF1)
<br>#4041 out of sync error message after copying resources (1GGR6VZ)
<br>#6699 Save should not flush undo stack
<br>#4071 Format option loses place in editor (1GHQFU6)
<p>
<hr WIDTH="100%">
<p>Eclipse SDK Build 20011211
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#1614 Current line in Debugger should start at center of source editor
(1GETH7J)
<br>#3467 Horizontal scrolling when stepping through errors (1GE6AF1)
<p>
<hr WIDTH="100%">
<br>&nbsp;
<p>Eclipse SDK Build 20011206
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>
Support for read-only but modifiable resources in editors. For this reason
AbstractTextEditor now calls validateState if its document provider also
implement IDocumentProviderExtension. The calls are issued:
<ul>
<li>
when an editor is marked dirty</li>

<li>
when an editor saves its document to its input</li>

<li>
when a dirty resource is moved (if allowed)</li>
</ul>
Calling validateState may cause changes to the isModifiable and isReadOnly
properties of the editor's input.
<br>FileDocumentProvider implements validateState by calling IWorkspace.validateEdit
on the input file.
<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>

<hr WIDTH="100%">
<p>Eclipse SDK Build 20011204
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>
Perparations for supporting the concept of read-only but modifiable resources
in editors.
<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#6203 SEVERE: typing in java editor causes OutOfMemoryError in JDK 1.4
<br>#6263 Extra closing braces inserted
<p>
<hr WIDTH="100%">
<br>&nbsp;
<p>Eclipse SDK Build 20011127
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<ul>
<li>
An BasicTextEditorActionContributor now contributes three status fields
into the window's status line. Each field is dedicated to show information
of a particular category. The categories are defined in ITextEditorActionConstants.
A new interface ITextEditorExtension has been introduced. On activation,
implementing editors of this interface are informed about the status fields
they can use to publish status information. AbstractTextEditor implements
ITextEditorExtension. Subclasses of AbstractTextEditor can get access to
the editor's current status fields using the method getStatusField(String
category). By default, AbstractTextEditor publishes the following information:
cursor position, input mode, reade only state of its input. Subclasses
may change this behavior by overriding updateStatusField(String category)
or callers of this method.</li>

<li>
The default text editor uses the feature described above and now provides
status information.</li>
</ul>

<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#4071&nbsp;&nbsp;&nbsp; Format option loses place in editor (1GHQFU6)
<br>#6168&nbsp;&nbsp;&nbsp; code assist preference (auto complete) does
not work
<br>#6087&nbsp;&nbsp;&nbsp; NPE closing content assist from DisplayView
on exit
<br>#6013&nbsp;&nbsp;&nbsp; Repeatable Java editor hang in 200111115
<br>#4947&nbsp;&nbsp;&nbsp; No indication of Insert/Overwrite mode
<p>
<hr WIDTH="100%">
<p>Eclipse SDK Build 20011120
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<ul>
<li>
Change to AbstractHoverInformationControlManager to reset the hover location
on a time basis.</li>

<li>
Added configuration method to ContentAssistant to automatically insert
a single proposal.</li>

<li>
Behavioral configuration methods such as enableAutoInsert, enableAutoActivation,
and setAutoActivationDelay can now be called when after the content assistant
has been installed.</li>

<li>
Context information popup recomputes size after style information has been
applied.</li>
</ul>

<h2>
Known deficiencies</h2>

<h2>
Problem reports closed</h2>
#2569&nbsp;&nbsp;&nbsp; [JFace Text] Content assist list truncated (1GG1W9B)
<br>#2904&nbsp;&nbsp;&nbsp; [JFace Text] PropagatingFontFieldEditor has
moved (1GKKL13)
<br>#1824&nbsp;&nbsp;&nbsp; [JFace Text] 50 reconciling threads for 4 editors
opened (1GFXMV8)
<br>&nbsp;
<p>
<hr WIDTH="100%">
<p>Eclipse SDK Build 20011101
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>

<ul>
<li>
introduction of setDocumentContent(IDocument, IEditorInput) on StorageDocumentProvider.</li>

<li>
introduction of IDocumentExtension (see JavaDoc)</li>

<li>
AbstractDocument implements IDocumentExtension</li>
</ul>

<h2>
Known deficiencies</h2>
Instances of DefaultInformationControl are wider than necessary.
<h2>
Problem reports fixed</h2>

<hr WIDTH="100%">
<p>Eclipse SDK Build 206
<h2>
Breaking API changes</h2>
Corrected spelling of&nbsp; "anchor" in AbstractInformationControlManager
and its subclasses.
<h2>
Other highlights</h2>

<h2>
Known deficiencies</h2>
Instances of DefaultInformationControl are wider than necessary.
<h2>
Problem reports fixed</h2>
<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5066">#5066&nbsp;&nbsp;&nbsp;
Code Assist: Thread created / not removed</a>
<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5120">#5120&nbsp;&nbsp;&nbsp;
Empty popup doc in java editor</a>
<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3473">#3473&nbsp;&nbsp;
mnemonics (1GF25DN)</a>
<p>
<hr WIDTH="100%">
<br>&nbsp;
<p>Eclipse SDK Build 204
<h2>
Breaking API changes</h2>

<h2>
Other highlights</h2>
For more information about the following issue please see JavaDoc of the
classes
<ul>
<li>
Several improvements of the new hover infrastructure, such as customizable
SWT styles.</li>

<li>
Improved look of the content assist window.</li>

<li>
Content assist supports customizable completion characters, i.e. each completion
proposal can specify which characters trigger its insertion.</li>
</ul>

<h2>
Known deficiencies</h2>
Instances of DefaultInformationControl are wider than necessary.
<h2>
Problem reports fixed</h2>

<p><br>
<hr WIDTH="100%">
<br>&nbsp;
<p>Eclipse SDK Build 203
<h2>
Breaking API changes</h2>
&nbsp; package:&nbsp;&nbsp; org.eclipse.jface.text
<br>&nbsp; interface:&nbsp;&nbsp; IHoverInfoPresenter
<br>&nbsp; change:&nbsp;&nbsp; removed interface
<br>&nbsp; change type: breaking API change for implementers of IHoverInfoPresenter
<h2>
Other highlights</h2>
For more information about the following issue please see JavaDoc of the
classes
<ul>
<li>
Complete rework of hover popups (previously a package private mechanism
hidden from clients). There is now the concept of an IInformationControl
and an IInformationControlCreator. Everywhere where floating windows are
used to present some kind of information, now IInformationControl is used.
More precise, the according component is equiped with an IInformationControlCreator
and creates the IInformationControl instance when needed. So clients can
set an IInformationControlCreator on a TextViewer and a SourceViewer. They&nbsp;
use it&nbsp; to create the text hover window and the annotation bar hover
window respectively. DefaultInformationControl&nbsp; is a StyledText-based
default implementation of IInformationControl. Clients may implement IInformationControl
directly and inject their custom information control creator.</li>

<li>
AbstractInformationControlManager and its subclasses abstractly&nbsp; implement
the process of providing a SWT control with support for floating information
windows. This covers layout, positioning, content, and visibility of the
floating window. They offer a broad customization space such as layout
strategies, colors, etc.</li>

<li>
TextViewer hovers, annotation bar hovers, additional info on completion
proposals in the content assistant, etc. benefit from the new infrastructure.
UI improvements are especially visible in the layout behavior.</li>

<li>
Introduced the concept of an information presenter. An information presenter
shows information on a context derivved subject on request. See IInformationPresenter
for details as well as SourceViewer and SourceViewerConfiguration for how
to use it.</li>
</ul>

<h2>
Known deficiencies</h2>
Instances of DefaultInformationControl are wider than necessary.
<h2>
Problem reports fixed</h2>

<p><br>
<hr WIDTH="100%">
<p>Eclipse SDK Build 200
<h2>
Breaking API changes</h2>
&nbsp; package:&nbsp;&nbsp; org.eclipse.jface.text
<br>&nbsp; interface:&nbsp;&nbsp; ITextViewer
<br>&nbsp; change:&nbsp;&nbsp; added method public void invalidateTextPresentation(
)
<br>&nbsp; change type: breaking API change for implementers of ITextViewer
<p>&nbsp; package:&nbsp;&nbsp; org.eclipse.jface.text
<br>&nbsp; interface:&nbsp;&nbsp; ITextViewer
<br>&nbsp; change:&nbsp;&nbsp; added method public void setDefaultPrefixes(String[]
defaultPrefixes, String contentType)
<br>&nbsp; change type: breaking API change for implementers of ITextViewer
<p>&nbsp; package:&nbsp;&nbsp; org.eclipse.jface.text
<br>&nbsp; interface:&nbsp;&nbsp; ITextViewer
<br>&nbsp; change:&nbsp;&nbsp; removed method&nbsp; void setDefaultPrefix(String
defaultPrefix, String contentType)
<br>&nbsp; change type: breaking API change for implementers of ITextViewer
<p>&nbsp; package:&nbsp;&nbsp; org.eclipse.jface.text.rules
<br>&nbsp; class:&nbsp;&nbsp; RuleBasedDamagerRepairer
<br>&nbsp; change:&nbsp;&nbsp; deprecated constructor&nbsp; public RuleBasedDamagerRepairer(RuleBasedScanner
scanner, TextAttribute defaultTextAttribute)
<br>&nbsp; change type: breaking API change for clients of RuleBasedDamagerRepairer
<h2>
Other highlights</h2>
For more information about the following issue please see JavaDoc of the
classes
<ul>
<li>
IContextInformationValidator implementers may also implement IContextInformationPresenter
to style context information</li>

<li>
ITextHover implementers may also implement IHoverInfoPresenter to style
hover information</li>

<li>
PropagatingFontFieldEditor has been introduced</li>

<li>
MonoReconciler has been introduced to support partition independent reconciling</li>

<li>
Token has been reimplemented, supports setData method now</li>

<li>
RuleBasedScanner now supports&nbsp; public void setDefaultReturnToken(IToken
defaultReturnToken). This token is returned if no rule can fire.</li>

<li>
TextPresentation now supports&nbsp; public static void applyTextPresentation(TextPresentation
presentation, StyledText text)</li>

<li>
BasicMarkerUpdater has been marked as final</li>

<li>
SelectMarkerRulerAction has been introduced</li>

<li>
WorkbenchChainedTextFontFieldEditor has been introduced</li>
</ul>

<h2>
Known deficiencies</h2>

<h2>
Problem reports fixed</h2>
1GJ65EW: ITPSRCEDIT:WINNT - ResourceMarkerAnnotaionModel: unnecessary fireModelChange
<br>1GIYR3X: ITPSRCEDIT:ALL - NL: word select (double click) in Java comments
<br>1GGYYWK: ITPJUI:ALL - Dismissing editor with code assist up causes
lots of Internal Errors
<br>1GEUOZ9: ITPJUI:ALL - Confusing UI for multiline Bookmarks and Tasks
<br>1GII2RZ: ITPJUI:WINNT - AssertionFailed Ex. in Java editor
<br>1GIYQ9K: ITPUI:WINNT - StyledText swallows Shift+TAB
<br>1GIJZOO: ITPSRCEDIT:ALL - Gotodialog's edit field has no initial focus
<br>&nbsp;
<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" BORDER=0 height=12 width=195></a>
<br>&nbsp;
</body>
</html>
