## Platform and Equinox

Here are descriptions of some of the more interesting or significant changes made to the Eclipse Platform for the 4.31 release of Eclipse. They are grouped into:

- Views, Dialogs and Toolbar
- Text Editors
- Themes and Styling
- General Updates

We also recommend to read the Tips and Tricks.

## Views, Dialogs and Toolbar

Viewer Limit in Workbench

Several of the most commonly used Eclipse views have enabled incremental view updates. These views limit the initially-shown number of children to 1000 per parent element, and support incrementally displaying the next batch of elements. The increment number can be configured in the preferences under `General > Initial maximum number of elements shown in views` as follows:

Other (3rd party) views can also read this preference to enable this feature for that view; this must be done explicitly for each view.

The support for incremental view updates was added to avoid UI freezes in large viewers, where SWT/JFace approaches the limits of the underlying native widget machinery while trying to render many thousands of elements, leading to minute long UI freezes.

Incremental view update is currently enabled in the following views:

1. Package Explorer
2. Project Explorer
3. Problems
4. Java Outline
5. JUnit

This new preference can be disabled in products by specifying `org.eclipse.ui.workbench/largeViewLimit=0` in the `plugin_customization.ini` file or via an Oomph preference task. In the same way, the preference value can be changed for products that need a lower or higher limit.

Filter Field for the Installation Details Dialog's Features Tab | Previously the Features tab of the Installation Details dialog, unlike the dialog's Plug-ins tab, did not provide a filter field. That inconsistency has been addressed, making it easier to find details about a specific feature.

Showing Resolved Workspace Path in Launch Dialog

A new feature has been implemented in the Eclipse launch dialog, which alerts the user that, the tilde (~) character, which usually refers to the user's home directory according to many operating system shell semantics, is unresolved whenever they enter that character. Additionally, this enhancement displays the resolved path within a label, offering user clear insight into the specified path.

Displaying Search Patterns in the Title Bar of Quick Search Dialogs

Distinguishing between the search patterns of concurrently open Quick Search dialogs was challenging, as they were all uniformly labeled as "Quick Search". A new functionality has been incorporated, wherein the search term is displayed alongside the "Quick Search" label in the title bar of the dialog. This enhancement ensures that each window is uniquely identifiable, now denoted as "Quick Search - " followed by the respective search term, thereby enhancing effortless navigation and improved user clarity.

## Text Editors

Compare Editor

The number of differences between two files is shown on the toolbar of compare editor; this is equal to the number of change markers shown next to the scroll bar in compare editor. This feature is helpful when the files compared are large and have many differences that cannot be counted manually.

The number of differences changes based on the selection in the compilation unit of Java Structure Compare.

Default Editor for a Content Type | For the case that there are multiple editors suitable to open a given content type, the user can declare one of these editors as default editor, i.e., the preferred editor. Simply select the editor in the associated editors list and press the Default button. If there is no default editor, the first suitable editor found is used to open the content type.

## Themes and Styling

Hovering Over Editor / View Tabs | When using the Light theme on macOS, the background color of unselected tabs now slightly changes color when the user hovers over them with the mouse cursor. The same hovering behaviour already exists on Windows and when using the Dark theme.
Highlighting of Active Part | The Light theme now also highlights the active part with a blue underline just like it was already done when using the Dark theme.

Full Text in View Tabs

A new preference has been introduced to enhance the user experience for managing views. With this preference, users have more control over how view tabs are displayed.

Previously, as the number of views increased within a view stack, the tab titles became very small, displaying only icons. This made it more challenging for users to identify views solely based on icons, sometimes leading to a cluttered UI and decreased usability.

To address this issue, two options are now available in the Tab icons and titles in view areas section on the `General > Appearance` preference page:

- Always show full titles: This option ensures that the full text of each view title is always visible in each tab, regardless of the number of views present. It improves usability by making it easier for users to identify views by label. By default this option is off.
- Hide icons: With this option selected, view icons are hidden, and only the full text of each view title is displayed in each tab. This helps in decluttering the UI and ensures that the editor area remains the focal point, especially in scenarios where numerous views are open. By default this option is off.

## General Updates

Eclipse Launcher Reloads Configuration Files on Restart

Previously when Eclipse was restarted using `File > Restart` or `File > Switch Workspace` as well as after installing or updating from a p2 update site, it restarted with same arguments as those in effect for the initial start. Any manual changes made to the `eclipse.ini`, as well as changes made by p2 touchpoints when installing or updating, were ignored. To actually apply the changes of a modified `eclipse.ini`, it was necessary to exit the application and restart it from the launcher.

Now the Eclipse launcher is enhanced to reload the configuration files on restart, so any changes to the `eclipse.ini` take effect immediately. In addition, any command line arguments specified for the initial launch remain in effect on restart, except if the restart command contains `--launcher.skipOldUserArgs`.

New 'wires' Command in the OSGi Console

Previously it was quite challenging to determine if or why a certain bundle was using other bundles or was used by other bundles. There is now a new `wires` command that, for a specified bundle, prints all wires that are used by the bundle and any wires it provides to other bundles. This provides a powerful tool for analyzing dependency problems and for determining why a bundle is actually used.

For example, you can open Host OSGi console and use the `wires` command as follows: WARNING: This console is connected to the current running instance of Eclipse! ____________________________ Welcome to Apache Felix Gogo g! ss org.eclipse.ui.workbench id State Bundle 5018 ACTIVE org.eclipse.ui.workbench_3.131.100 g! wires 5018 Bundle org.eclipse.ui.workbench 3.131.100: is wired to: - com.ibm.icu 74.1.0 - because of Import-Package: com.ibm.icu.util - jakarta.annotation-api 2.1.1 - because of Import-Package: jakarta.annotation; version="[2.1.0,3.0.0)" - jakarta.inject.jakarta.inject-api 2.0.1 - because of Import-Package: jakarta.inject; version="[2.0.0,3.0.0)" - org.apache.felix.scr 2.2.6 - because of Require-Capability: osgi.extender; filter:="(&(osgi.extender=osgi.component)(version>=1.2)(!(version>=2.0)))" - org.eclipse.core.databinding.observable 1.13.200 - because of Require-Bundle: org.eclipse.core.databinding.observable; bundle-version="[1.2.0,2.0.0)" - org.eclipse.core.databinding.property 1.10.200 - because of Require-Bundle: org.eclipse.core.databinding.property; bundle-version="[1.2.0,2.0.0)" - org.eclipse.core.runtime 3.31.0 - because of Require-Bundle: org.eclipse.core.runtime; bundle-version="[3.29.0,4.0.0)" - org.eclipse.e4.core.commands 1.1.300 - because of Import-Package: org.eclipse.e4.core.commands - because of Import-Package: org.eclipse.e4.core.commands.internal - org.eclipse.e4.core.contexts 1.12.500 - because of Require-Bundle: org.eclipse.e4.core.contexts; bundle-version="1.0.0" - org.eclipse.e4.core.di 1.9.300 - because of Require-Bundle: org.eclipse.e4.core.di; bundle-version="1.1.0" - org.eclipse.e4.core.di.extensions 0.18.200 - because of Require-Bundle: org.eclipse.e4.core.di.extensions; bundle-version="0.13.0" - org.eclipse.e4.core.services 2.4.300 - because of Require-Bundle: org.eclipse.e4.core.services; bundle-version="2.2.0" - org.eclipse.e4.ui.bindings 0.14.300 - because of Require-Bundle: org.eclipse.e4.ui.bindings; bundle-version="0.9.0" - org.eclipse.e4.ui.css.swt 0.15.300 - because of Require-Bundle: org.eclipse.e4.ui.css.swt; bundle-version="0.9.1" - org.eclipse.e4.ui.css.swt.theme 0.14.300 - because of Require-Bundle: org.eclipse.e4.ui.css.swt.theme; bundle-version="0.9.0" - org.eclipse.e4.ui.di 1.5.300 - because of Require-Bundle: org.eclipse.e4.ui.di; bundle-version="0.9.0" - org.eclipse.e4.ui.model.workbench 2.4.200 - because of Require-Bundle: org.eclipse.e4.ui.model.workbench; bundle-version="0.9.1" - org.eclipse.e4.ui.services 1.6.300 - because of Import-Package: org.eclipse.e4.ui.services - because of Require-Bundle: org.eclipse.e4.ui.services; bundle-version="1.3.0" - org.eclipse.e4.ui.workbench 1.15.300 - because of Import-Package: org.eclipse.e4.ui.internal.workbench - because of Import-Package: org.eclipse.e4.ui.internal.workbench.addons - because of Import-Package: org.eclipse.e4.ui.workbench - because of Import-Package: org.eclipse.e4.ui.workbench.modeling - org.eclipse.e4.ui.workbench.addons.swt 1.5.300 - because of Require-Bundle: org.eclipse.e4.ui.workbench.addons.swt; bundle-version="0.10.0" - org.eclipse.e4.ui.workbench.renderers.swt 0.16.300 - because of Import-Package: org.eclipse.e4.ui.internal.workbench.renderers.swt - because of Import-Package: org.eclipse.e4.ui.workbench.renderers.swt - org.eclipse.e4.ui.workbench.swt 0.17.300 - because of Import-Package: org.eclipse.e4.ui.internal.workbench.swt - because of Require-Bundle: org.eclipse.e4.ui.workbench.swt; bundle-version="0.9.1" - org.eclipse.e4.ui.workbench3 0.17.300 - because of Require-Bundle: org.eclipse.e4.ui.workbench3; bundle-version="0.15.0"; visibility:="reexport" - org.eclipse.emf.ecore.xmi 2.37.0 - because of Require-Bundle: org.eclipse.emf.ecore.xmi; bundle-version="2.11.0" - org.eclipse.help 3.10.300 - because of Require-Bundle: org.eclipse.help; bundle-version="[3.2.0,4.0.0)" - org.eclipse.jface 3.33.0 - because of Require-Bundle: org.eclipse.jface; bundle-version="[3.31.0,4.0.0)" - org.eclipse.jface.databinding 1.15.200 - because of Require-Bundle: org.eclipse.jface.databinding; bundle-version="[1.3.0,2.0.0)" - org.eclipse.osgi 3.19.0 - because of Import-Package: javax.xml.parsers - because of Import-Package: org.w3c.dom - because of Import-Package: org.xml.sax - because of Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=17))" - org.osgi.service.event 1.4.1.202109301733 - because of Import-Package: org.osgi.service.event; version="[1.2.0,2.0.0)" and is consumed by: - org.eclipse.jdt.ui 3.31.100 - because it Require-Bundle: org.eclipse.ui.workbench; bundle-version="[3.131.0,4.0.0)" - org.eclipse.ui 3.205.100 - because it Require-Bundle: org.eclipse.ui.workbench; bundle-version="[3.130.0,4.0.0)"; visibility:="reexport" - org.eclipse.ui.editors 3.17.200 - because it Require-Bundle: org.eclipse.ui.workbench; bundle-version="[3.130.0,4.0.0)" - org.eclipse.ui.genericeditor 1.3.300 - because it Require-Bundle: org.eclipse.ui.workbench; bundle-version="3.109.0" - org.eclipse.ui.intro.quicklinks 1.2.300 - because it Require-Bundle: org.eclipse.ui.workbench; bundle-version="3.108.0"

Windows Defender Automatic Configuration

On Microsoft Windows 10 or later, the Microsoft Defender can significantly slow down the startup and overall performance of Eclipse-based applications. The Eclipse IDE can now detect if Microsoft Defender is active, inform the user about it and, if desired, can exclude itself from future Defender scans.

On Windows the `General > Startup and Shutdown` preference page offers further information and allows the user to disable the startup check for new installations and to run the exclusion check again for the running installation.

Creators of custom Eclipse-based products that use the `org.eclipse.ui.ide.workbench` application and want to suppress the new startup check for their product can disable it by adding the following entry to their product's preferenceCustomization properties file:

`org.eclipse.ui/windows.defender.startup.check.skip=true`

To execute the startup check for products that run applications other than `org.eclipse.ui.ide.workbench` add the entry:

`org.eclipse.ui/windows.defender.startup.check.app=<application-id-in-use>`

Improvement in Progress Bar Consistency and Smoothness

Previously in Eclipse, the progress bar did not accurately reflect the progress relative to the total time. Specifically, the initial half of the progress bar advanced rapidly, while a noticeable delay occurred in the latter half. This discrepancy was due to the utilisation of bundle-changed events for progress determination, which resulted in an uneven progression due to the non-uniform nature of these events.

The progress is now determined as a function of the service level events occurring while the workbench is being bootstrapped. This gives more meaningful values about the progress the workbench has achieved towards completion. This modification has led to a more consistent and smooth advancement of the progress bar, leading to an overall improved user experience.