Overall Platform Text 3.1 Plan

Last revised 18:30 CET July 19, 2005

This is the final plan.

Overall goals

This section defines the committed goals for Eclipse 3.1 for the Platform Text and the JDT Text component. Each goal is annotated with the overall 3.1 Eclipse theme it contributes to.

Platform

  • Improve overall performance and stabilize on memory consumption. This includes open editor, quick diff, open quick outline, typing speed, redraw behavior, scrolling. Define a set of scenarios and assign to each scenario a concrete performance goal. [Built to last]
  • Write stable and if possible automated performance and memory footprint tests for Text and Java editors and some of its actions. A testing framework should be provided which enables to write stable performance and memory tests. Tests need to be put in place and maintained such that performance and memory consumption of editor related tasks like opening, typing, scrolling and Quick Diff can be monitored. Investigate introspective performance measurement support: Allow users to run performance tests and collect data (open files, preferences) to report performance issues. [Built to last]

  • Increase correctness test coverage of the text infrastructure. [Built to last]

  • Consolidate and extend platform. [Built to last, Rich client platform, Large-scale development]
    • Consolidate platform based on experience from larger clients such as the Eclipse Web Tools Platform Project.
    • Prepare editor infrastructure for embedding (editors inside editors and views)
      ⇒ made a feasibilty study and sent feedback about Component framework proposal to Platform UI.
    • Improve code quality.
  • Improve overall integration with the workbench. This includes consolidation of preferences and increased preference sharing as well as seamless support for user configurable editor based on content types. Investigate direct access to preferences where useful. [Simple to use, Large-scale development]

  • [partially >3.1] Provide better text editor support for RCP. The list of functions to add will grow over time. The initial set includes: annotation presentation and navigation, user assigned colors and fonts, pluggable spelling engines (), spell checking, user defined, persistent folding, quick diff, templates, URL detection and handling (). [Rich client platform]

  • [partially >3.1] Make the Default Text editor your favorite text editor. From time to time users switch to an external text editor. The goal of this plan item is to enhance the Text editor so that there is no longer a need to switch. The list of functions to add will grow over time. The initial set includes: annotation navigation, user assigned colors and fonts, pluggable spelling engines (), spell checking, user defined, persistent folding, templates, URL detection and handling (). [Simple to use]

  • Help clients such as the Eclipse Web Tools Platform Project to improve their overall integration with the Platform Text components and the workbench in general. [Broadening the community]

JDT

  • Improve the Java editors. [Simple to use, Large-scale development]
    • Provide additional convenience and productivity text manipulation functions.
    • Continue the "information at your finger tips" and "non-intrusive UI" themes.
      • Improve on rich visual modeless feedback.
    • Investigate direct access to preferences where useful.
    • Provide extension point to allow for useful additions to the reconciling process such as running audits.
    • Provide extension point to allow for useful additions to the content assist and template proposals.
  • [partially >3.1] Improve string externalization. Possible work items are collected here. [Simple to use]
  • J2SE 5.0 Support (JDT UI's overall status) [J2SE 5 support]
    • Ensure Java Editor and all its J2SE 1.4 coding features work with new JLS3 AST
      The first priority is to get the same product quality when coding against J2SE 1.4 as we have with Eclipse SDK 3.0. JDT text code needs to be adapted to the new JLS3 AST and ensured that it is not broken by new Java element types and deltas. Affected areas are syntax highlighting, occurrence marking and Java outline page.
    • Enable Java coding against J2SE 5.0
      Existing features like syntax highlighting, occurrence marking, auto-indentation, Java Outline page and formatting need to be made J2SE 5.0 aware.
    • Add new features for J2SE 5.0
      New features include annotation folding, matching < bracket support, auto insertion of closing >, new keyword and syntax highlighting, e.g. for generics and enums, and new templates. Provide hover support for annotations such as @override.

  • [investigate] Contribute to the resolution of the "many errors" issue. (cross team issue)
    • If a project is improperly setup, opening a file of that project can result in lots of temporary problems. On open, the editor could propose to filter all ripple errors and to show only relevant errors.
    • When auto-build is enabled, the editor can warn the user when a file is saved for which temporary errors exist.

Work items

Work items represent subjects on which the Platform/JDT Text team will work in the course of the 3.1 development. The listed subitems represent initial input based on the current state of knowledge. There might be shifts of focus during the development process. Items that are affected by the concrete resolution of cross team issues are marked as such. Items that are of exploratory nature are tagged with [investigate].

Component independent

  • code cleanup
    • cleanup implementation to only use up-to-date concepts
    • cleanup plugin.xml files and code which still uses pre-3.0 extension points and attributes (e.g. actionDefinitionId)
    • remove AbstractTextEditor dependency on internals of org.eclipse.ui
    • Javadoc
      • enforce uniform Javadoc style (usage of link, @value tag, etc.)
      • complete Javadoc (internal classes, private methods, etc.)
    • [investigate] separate backward compatibility code from up-to-date code
  • dynamic plug-in loading/unloading
    • describe dynamic capabilities
    • [investigate] prepare for dynamic plug-in deactivation

Platform

  • file buffers
    • provide file buffer level undo and composite changes
    • allow validateEdit on a set of file buffers
    • allow buffers for non-existing files that get automatically created when committing the file buffer
    • provide setDirty on IFileBuffer
    • provide a disconnect method that automatically calls commit in case the file buffer is dirty and after the call no longer shared
    • allow new implementations to be plugable (RCP does not include the IResource based implementation, IDE does)
    • clarify document creation and document setup extension points
    • provide standard way to modify document provided by a text file buffer in a non-UI thread
    • [investigate] provide implementation for IStorage
    • [investigate] Is it possible to automate validateEdit on the first document change?
    • [investigate] on demand activation of partitioning (created only when somebody asks for it)
  • reconciler
    • clarify life cycle (multiple concurrent reconcilers on unconfigure/configure)
    • dirty region management in the incremental reconciler
      • a reconciling strategy should cross out the dirty regions it consumed
      • dirty regions get only removed from the queue if there is a guarantee that they have been consumed
      • type of change for a dirty region are exploited
    • provide closer integration of reconciling steps
      • automatic propagation of the progress monitor to all individual reconciling steps
    • [investigate] adaptive reconciler timing
  • headless text infrastructure
    • revisit synchronization issues between annotation model and document
      • annotation map is synchronized but not the operations on the annotation model itself, leaving a temporal gap in which concurrent modifications can happen
    • [investigate] time stamped document events
  • encoding (cross team issue)
    • transfer encoding upon Save As...
    • listen to and handle encoding changes in the encoding UI
    • clarify BOM handling in case of encoding changes
  • folding
    • introduce structured folding change events
    • improve annotation summaries
      • allow for customization of annotation summaries
      • provide hovers for annotation summaries
    • improve the in-text folding indicator
      • provide hovers
      • indicate the amount of collapsed text
      • expand on double or single click
    • polish presentation
      • animate collapse/expand
      • change folding icon (bug 61725)
      • [investigate] when hovering over the end of a foldable region of which the beginning is not visible a hover with the start line is shown
    • [investigate] enabled folding structure provider for content types
    • [investigate] character based folding UI (cross team issue)
    • [investigate] reordering of code based on direct interaction with the folding control
  • formatter
    • tackle performance issues for large files
      • use SequentialRewriteStore
      • check possibility of temporal removing of partitioners
  • Open External File
    • find a way to open external files also when registered editor does not support file buffers
    • support vertical ruler, overview ruler etc.; provide annotation model that is not resource dependent
    • generalize for non-text files (cross team issue)
  • undo
    • synchronize editor dirty bit with undo state (bug 21493)
    • allow customization of maximum number of undos (bug 21476)
    • introduce UI independent undo manager (see also file buffers)
    • harmonize with potential global undo manager (cross team issue)
  • navigation
    • generalize Last Edit Position to Edit History
    • provide access to a light weight "Go to" menu similar to the refactoring menu (cross team issue)
    • improve bookmark usability: allow navigation via key binding (cross team issue)
    • [investigate] improve navigation history
      • introduce bread crumbs (explicit points of user requested navigation that stick out the normal browsing/navigation history)
  • hovering
    • allow interactive resizing of text and annotation hover popup windows
    • roll-over hovers
      • solve single-click/double-click issues
      • polish visual appearance such as asymmetric margins
      • implement delay free appearance when entering vertical ruler
      • solve accessibility issues
      • [investigate] provide roll-overs for overview ruler
  • preferences
    • increase number of sharable editor preferences
      • eventually there should be no initial need for a preference page when a new type of editor is created
    • adapt to the core settings API, smoothly integrate with the workbench vision (cross team issue)
    • always split color settings in foreground/background, always allow system/default color
    • revisit "spaces for tabs" preference (bug 19036)
      • reduce confusion without loosing functionality
    • provide direct access to preferences where useful
    • [investigate] add line delimiter preference for workspace and project level (bug 3970) (cross team issue)
  • annotations / annotation presentation
    • all annotation types should support all presentation types (help other teams porting to the new presentation types)
    • allow annotations to be presented using text foreground/background color (overlaps with syntax highlighting then)
      • generalize AnnotationPainter and TextPresentation to be broader applicable
    • move header annotation type management to SourceViewerDecorationSupport and allow for customization via drop down (similar to Go to annotation)
    • [investigate] allow users to reorder presentation layers
      • generalize annotation presentation layer mechanism to support relative addressing (e.g., on top/below <annotation type>)
    • [investigate] introduce selective contribution of annotation types to editor types (must be aligned with preference consolidation as it contradicts)
  • editor
    • offer "on save" hook e.g. to allow formatting or organize imports on save (bug 22742)
      • ensure that misbehaving pre-save participants do not cause loss of data
    • provide visible indication for invisible chars
    • editor splitting à la JEdit (top be aligned with editor embedding, cross team issue) (bug 8009)
    • editor reuse
      • unify code path of creating and reusing an editor
      • restructure AbstractTextEditor.createPartControl, consider inversion of control (bug 71081)
      • update contributions (e.g. enable state of actions) if editor input type changes (e.g. from IFile to external file)
    • action contribution
      • revisit action contribution (cross team issue)
      • reduce performance impact of current platform architecture
      • unify names and values of ITextEditorActionDefintionIDs
    • [investigate] editor status bar
      • lock/pen icon rather than text (need to check with screen readers)
      • show current key binding config name in status line and offer double click to open the key binding dialog
      • show current line delimiter
    • [investigate] investigate chances of a SWT rich text widget
    • [investigate] support for multiple clipboards
  • typing
    • smart typing
      • improve smart backspace
      • consolidate smart typing infrastructure
    • make delete line aware of selection
    • introduce "Remove block of empty lines"
    • revisit "raw" insert mode to be useful and not completely dumb
    • introduce light weight "Surround with" and "Search" menu (cross team issue)
    • [investigate] auto correct on typing
    • [investigate] auto format on typing
    • [investigate] direct interaction with auto edit strategies
      • interactive placement of closing brackets/parenthesis
        • show pseudo character that can be moved and committed
        • after commit cursor jumps back after opening bracket
    • [investigate] zoom in/out feature (text size changes with mouse wheel)
    • [investigate] automatic reset of non-smart to smart or vice versa
  • text manipulation
    • add "Remove Trailing space" command for files, folders, and projects
    • add "Convert line delimiter" command for files, folders, and projects
    • consolidate text manipulation infrastructure
    • [investigate] drag'n drop editing
  • interaction (mouse, keyboard)
    • selection modes (line selection, word selection)
    • right button mouse click with empty selection should set selection
      • works only when clicks happens over useful target (not when right of end of line)
    • indicate caret location in overview ruler
    • [investigate] revive gestures as action triggers (cross team issue)
    • [investigate] action hovers (hovers with which you can interact)
      • action hovers offer menus that contain sensible follow-up actions for activities triggering auto format, auto text, or auto correct
      • single click undo of auto correct, for example
  • Quick diff
    • provide memory efficient quick diff algorithm
    • polish presentation of deleted lines in the line number ruler
    • [>3.1] [investigate] character level diff in hover
  • embedded content
    • nested partitionings
    • find abstraction that represents editor capabilities for fragments of different content type
  • [investigate] find/replace
    • editor status bar: interactive find field with a drop down for the find options (similar to Go to annotation)
    • find all in file (similar to Mark occurrences)
    • interactive Replace all (similar to Rename in file)
    • provide a find/replace view part
  • [investigate] printing (cross team issue)
    • header/footer
    • disable painters when printing
    • allow line numbers
    • allow for separate print font
  • [investigate] templates
    • tackle scalability issues for template preference page
      • introduce categories
      • auto hide certain templates (templates with generics are only visible if the compiler is at 1.5 level)
  • [investigate] macro/scripting support (cross team issue) (bug 8519)

JDT

  • comment formatter
    • improve handling of spaces (bug 49686)
    • provide support for custom tags
    • provide support link tag
    • improve HTML support
    • split general "comment" into Javadoc and code comments
    • push down to JDT Core (cross team issue)
    • [investigate] define formatting preference by providing an example
  • hovering
    • support link tag
    • correctly remove on focus change on all platforms
    • support @inherit
      • support inherited Javadoc even without @inherit
    • [investigate] extract information from external Javadoc
    • [investigate] use Browser widget for Javadoc hover
    • [investigate] allow to reach hover via mouse (i.e. F2 via mouse)
    • [investigate] if no hover can be extracted inform user how to correctly setup Javadoc and source hovers?
  • folding
  • content assist
    • support case-sensitive filtering
    • introduce content assist processor extension point (already there for Javadoc)
    • consolidate content assist infrastructure to cover the concept of presenting and choosing from parameter proposals
    • auto activate content assist if completion trigger is also an auto activation trigger
    • support code completion after <code>Te| or <tt>Te|
    • improve parameter info shown by content assist
      • [investigate] show the Javadoc of the highlighted parameter
    • [investigate] get support from JDT Core for parameter guessing, e.g. lazy for the selected proposal
    • [investigate] propose textual completion based on file contents
    • [investigate] re-establish linked mode for method calls on Show context info
    • [investigate] code assist remembers previous choices in its rating
  • syntax highlighting
    • semantic coloring of 'deprecated' declaration/reference
    • syntax highlighting preview on the preference page should background highlight all occurrences of the selected type, also support backward coupling
    • [>3.1] improve integration with the color and font preferences provided by the workbench (cross team issue)
    • [investigate] support coloring schemes, scheme switch on tool bar (cross team issue)
    • [investigate] semantic highlighting should use annotations instead of its own model and listener
    • [investigate] generalization of semantic highlighting model to be pushed down to Platform Text
  • spell checking
    • improve spell checking to ignore defined Java symbols or mark spelling errors in symbols differently
    • generalize spell checking for Platform Text
      • dictionaries can be shared between different editor types
      • enable more advanced checking such as grammar checking
    • rerun spell checking on dictionary change
    • provide spell checking on file, folder, projects
  • editor
    • revisit out of the box colors including which syntax highlightings are enabled and also consider those for J2SE 5.0
    • double click in outliner should transfer focus to editor (to be aligned with the active Open Strategy)
    • matching delimiter highlighting for html tags <code>  </code>
    • generalize current scope indication and updating to be pushed down to Platform Text
    • [investigate] indicate current block in vertical ruler
      • option for replacing the magnet; outliner synchronization stays the same
    • [investigate] method separator line
  • navigation
    • show URLs in comments as underlined text and allow to open such links in a browser
    • generalize hyperlink navigation to become part of Platform Text
    • generalize annotation navigation support to become part of Platform Text
    • [investigate] support Move to next parameter (see content assist: re-establish linked mode)
  • info views
    • Javadoc view
      • support links and link navigation
      • support back and forward (tool bar and/or context menu)
    • introduce new info/quick views (investigate user configurability)
      • references in workspace
      • implementers
      • references methods
  • reconciling
    • provide extension point to allow for useful additions to the reconciling process such as running audits
    • [investigate] generalize handling of temporary annotations implemented in the CompilationUnitAnnotationModel to become part of Platform Text
  • [investigate] Quick fix
    • generalize QuickFix infrastructure to become part of Platform Text
  • [investigate] Mark occurrences
    • highlight implemented methods when clicking on implemented interface

Cross team issues

This section contains cross team issues that have to be clarified. The concrete outcome effects the dependent work items listed above.

  • synchronized blocks compared to ILock
  • reveal file types in preferences, define editors for file types rather than extensions etc.
  • editor splitting (to be synchronized with the Component Framework and multipage editor efforts)
  • simplification/harmonizing of action contribution
  • harmonize with potential global undo manager
  • [>3.1] colors and fonts
    • syntax color schemes
    • integration with the colors and fonts preference page
  • gesture support/selection modes/hover configuration
    • mouse/keyboard interaction is just a different kind of "key" binding, i.e. a different kind of activating a command. We should only provide the actions (command implementations) and the rest should be user configurable.
  • JDT Core
    • check for bug 72234
    • adoption of comment formatting
  • text independent editor layer implementing validateEdit
  • predefined line terminator for new files (to be specified similar to encoding)
  • light weight menus:
    • Go to
    • Search
    • Surround with
    • ...
  • SWT
    • SWT rich text widget providing different fonts, font styles, and font sizes
    • StyledText: allow for rendering of custom glyphs (needed for character based folding)
  • scripting strategy of the platform
  • [>3.1] compatibility layer for commands moved to LTK UI plug-in
3.1 Platform Text Milestone Plans

Previous milestones

Previous 3.1 milestones can be reviewed here.

Bug Tracking
Legend
item is under development. item is under investigation.
item is finished. ( ) item is time permitted.
[xyz] item is deferred to or continues in xyz. new