From a8684762f9046e19a660f5b811ed502e12bc0156 Mon Sep 17 00:00:00 2001 From: Maximilian Wittmer Date: Mon, 17 Jun 2024 14:04:39 +0200 Subject: [PATCH 01/10] Find/Replace overlay: fix missing icon Reintroduces Icons for opening/closing the replace area of the overlay. fixes #1960 --- .../icons/full/obj16/close_replace.png | Bin 0 -> 258 bytes .../icons/full/obj16/close_replace@2x.png | Bin 0 -> 406 bytes .../icons/full/obj16/open_replace.png | Bin 0 -> 286 bytes .../icons/full/obj16/open_replace@2x.png | Bin 0 -> 379 bytes .../eclipse/ui/texteditor/FindReplaceOverlay.java | 6 +++--- .../ui/texteditor/FindReplaceOverlayImages.java | 6 ++++++ 6 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace.png create mode 100644 bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace@2x.png create mode 100644 bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace.png create mode 100644 bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace.png new file mode 100644 index 0000000000000000000000000000000000000000..263ed7f45291bb1c3e0826e909e8755d51a5f45c GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt=tYE{-7sWZRk|G zd-yPeSd36_Z*Po!{l7bh4jede@Z7m~f${PGJ2S)`O!NQ!|Ns9T5TF13^Yin2r%rh} zF5+>xv}d_2(=(tU^=it>kM(le3?5$Q5q399QQxJg!S?6Z*K9#%=EG$vXEWN)B&Vdr xv?+ZAs1QnNH1%brCz@HN^pw0=AA~7URE`YcK3ydtFBC)`M zBA6UAK&1{btsPJnztu1Pee|r@!WhGlB?nCpfB*=9001_8Kg{!ds zmn+M%W8e<>lv3^$Me*L%XPto7`U;o;m#*RPJqcsXIWTJ5_S)8G1vE`_0URl%Ze7C{ zRaMo!5aKY7;}ctt*G>4BHTYu`009sH0Wdh=3;14&#P28lIRF3v07*qoM6N<$g3MZ{ AUjP6A literal 0 HcmV?d00001 diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace.png new file mode 100644 index 0000000000000000000000000000000000000000..0801ecae1906ad20ade449b497a320628a431642 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt-!PT^vI!daqtK(*`7dl%-uCK0XY%+0oz39s>gTe~DWM4f+1G6l literal 0 HcmV?d00001 diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3638db358a227dc36ffbc7f2dbfc37164d1f2cbc GIT binary patch literal 379 zcmV->0fhdEP)IpoAy;kAb zY$4lCW}Gy6b>ROPlE=iTDszs^T3-MQ05}PGxGc+4=iJ>mj>9kvpD6%AC*Yjh09V%9 zeN|QG*#TYGJ*w(8u(sB|dG9Z?0s#8HzgN{8;7nCtViA*G!ec~T*B4m<#|RO5or;M1 z3{xPY_dqNn$s&qDB-?}s#4WHEk>~7y!+ZfFu*wc-nr3H=c>umeWSbT6C;lTM+qP}r zvjJk_(SX=^6d*->G9Xoa5+G$9z=Zr4c<(o=`jjdTfhSND#RsrY6^FnR_>Y toggleReplace())); } private void toggleReplace() { if (!replaceBarOpen) { createReplaceDialog(); - replaceToggle.setText("⯅"); //$NON-NLS-1$ + replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_CLOSE_REPLACE_AREA)); } else { hideReplace(); - replaceToggle.setText("⯈"); //$NON-NLS-1$ + replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_OPEN_REPLACE_AREA)); } replaceToggle.setSelection(false); // We don't want the button to look "locked in", so don't // use it's selectionState diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java index 2017e13f966..9796d8af872 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java @@ -53,6 +53,10 @@ class FindReplaceOverlayImages { static final String OBJ_SEARCH_IN_AREA = PREFIX_OBJ + "search_in_selection.png"; //$NON-NLS-1$ + static final String OBJ_OPEN_REPLACE_AREA = PREFIX_OBJ + "open_replace.png"; //$NON-NLS-1$ + + static final String OBJ_CLOSE_REPLACE_AREA = PREFIX_OBJ + "close_replace.png"; //$NON-NLS-1$ + /** * The image registry containing {@link Image images}. */ @@ -75,6 +79,8 @@ private static void declareImages() { declareRegistryImage(OBJ_CASE_SENSITIVE, OBJ + "case_sensitive.png"); //$NON-NLS-1$ declareRegistryImage(OBJ_SEARCH_ALL, OBJ + "search_all.png"); //$NON-NLS-1$ declareRegistryImage(OBJ_SEARCH_IN_AREA, OBJ + "search_in_area.png"); //$NON-NLS-1$ + declareRegistryImage(OBJ_OPEN_REPLACE_AREA, OBJ + "open_replace.png"); //$NON-NLS-1$ + declareRegistryImage(OBJ_CLOSE_REPLACE_AREA, OBJ + "close_replace.png"); //$NON-NLS-1$ } /** From 827687f66a24bb6efe09160f89f45813f57d5291 Mon Sep 17 00:00:00 2001 From: Matthias Becker Date: Mon, 17 Jun 2024 16:38:07 +0200 Subject: [PATCH 02/10] Make Replace All Icon Crisp and Sharp Fixes: https://github.com/eclipse-platform/eclipse.platform.ui/issues/1977 --- .../{replace-all@2x.png => replace_all@2x.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/{replace-all@2x.png => replace_all@2x.png} (100%) diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace-all@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace_all@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace-all@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace_all@2x.png From c93e6c36ed2b97cc70b2ec6b4d817f4a45764b23 Mon Sep 17 00:00:00 2001 From: Matthias Becker Date: Tue, 18 Jun 2024 09:52:38 +0200 Subject: [PATCH 03/10] Clean Up Find Replace Overlay Icons - The icons are part of a local toolbar. Therefore move them from the "obj" folder to the "lcl16" folder. - Fix file name for high resolution icons for select_prev and select_prev icons - Make more clear what's the file name of and icon and what's it's key Fixes: https://github.com/eclipse-platform/eclipse.platform.ui/issues/1977 --- .../full/{obj16 => elcl16}/case_sensitive.png | Bin .../{obj16 => elcl16}/case_sensitive@2x.png | Bin .../full/{obj16 => elcl16}/close_replace.png | Bin .../{obj16 => elcl16}/close_replace@2x.png | Bin .../full/{obj16 => elcl16}/open_replace.png | Bin .../{obj16 => elcl16}/open_replace@2x.png | Bin .../icons/full/{obj16 => elcl16}/regex.png | Bin .../icons/full/{obj16 => elcl16}/regex@2x.png | Bin .../icons/full/{obj16 => elcl16}/replace.png | Bin .../full/{obj16 => elcl16}/replace@2x.png | Bin .../full/{obj16 => elcl16}/replace_all.png | Bin .../full/{obj16 => elcl16}/replace_all@2x.png | Bin .../full/{obj16 => elcl16}/search_all.png | Bin .../full/{obj16 => elcl16}/search_all@2x.png | Bin .../full/{obj16 => elcl16}/search_in_area.png | Bin .../{obj16 => elcl16}/search_in_area@2x.png | Bin .../full/{obj16 => elcl16}/select_next.png | Bin .../select_next@2x.png} | Bin .../full/{obj16 => elcl16}/select_prev.png | Bin .../select_prev@2x.png} | Bin .../full/{obj16 => elcl16}/whole_word.png | Bin .../full/{obj16 => elcl16}/whole_word@2x.png | Bin .../ui/texteditor/FindReplaceOverlay.java | 24 +++---- .../texteditor/FindReplaceOverlayImages.java | 60 ++++++++---------- 24 files changed, 37 insertions(+), 47 deletions(-) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/case_sensitive.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/case_sensitive@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/close_replace.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/close_replace@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/open_replace.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/open_replace@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/regex.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/regex@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/replace.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/replace@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/replace_all.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/replace_all@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/search_all.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/search_all@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/search_in_area.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/search_in_area@2x.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/select_next.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16/search_next@2x.png => elcl16/select_next@2x.png} (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/select_prev.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16/search_prev@2x.png => elcl16/select_prev@2x.png} (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/whole_word.png (100%) rename bundles/org.eclipse.ui.workbench.texteditor/icons/full/{obj16 => elcl16}/whole_word@2x.png (100%) diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/case_sensitive.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/case_sensitive.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/case_sensitive.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/case_sensitive.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/case_sensitive@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/case_sensitive@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/case_sensitive@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/case_sensitive@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/close_replace.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/close_replace.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/close_replace@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/close_replace@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/close_replace@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/open_replace.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/open_replace.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/open_replace@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/open_replace@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/open_replace@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/regex.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/regex.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/regex.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/regex.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/regex@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/regex@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/regex@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/regex@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace_all.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace_all.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace_all.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace_all.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace_all@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace_all@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/replace_all@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/replace_all@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_all.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_all.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_all.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_all.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_all@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_all@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_all@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_all@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_in_area.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_in_area.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_in_area.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_in_area.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_in_area@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_in_area@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_in_area@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/search_in_area@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/select_next.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_next.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/select_next.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_next.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_next@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_next@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_next@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_next@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/select_prev.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_prev.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/select_prev.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_prev.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_prev@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_prev@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/search_prev@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/select_prev@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/whole_word.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/whole_word.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/whole_word.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/whole_word.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/whole_word@2x.png b/bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/whole_word@2x.png similarity index 100% rename from bundles/org.eclipse.ui.workbench.texteditor/icons/full/obj16/whole_word@2x.png rename to bundles/org.eclipse.ui.workbench.texteditor/icons/full/elcl16/whole_word@2x.png diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java index ea3f020f184..88fdddfcee9 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java @@ -435,7 +435,7 @@ private void createSearchTools() { ToolItem separator = new ToolItem(searchTools, SWT.SEPARATOR); searchUpButton = new ToolItem(searchTools, SWT.PUSH); - searchUpButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_FIND_PREV)); + searchUpButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_PREV)); searchUpButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_upSearchButton_toolTip); searchUpButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { performSearch(false); @@ -443,14 +443,14 @@ private void createSearchTools() { })); searchDownButton = new ToolItem(searchTools, SWT.PUSH); searchDownButton.setSelection(true); // by default, search down - searchDownButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_FIND_NEXT)); + searchDownButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_NEXT)); searchDownButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_downSearchButton_toolTip); searchDownButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { performSearch(true); evaluateFindReplaceStatus(); })); searchAllButton = new ToolItem(searchTools, SWT.PUSH); - searchAllButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_SEARCH_ALL)); + searchAllButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_SEARCH_ALL)); searchAllButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_searchAllButton_toolTip); searchAllButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { performSelectAll(); @@ -460,7 +460,7 @@ private void createSearchTools() { private void createAreaSearchButton() { searchInSelectionButton = new ToolItem(searchTools, SWT.CHECK); - searchInSelectionButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_SEARCH_IN_AREA)); + searchInSelectionButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_SEARCH_IN_AREA)); searchInSelectionButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_searchInSelectionButton_toolTip); searchInSelectionButton.setSelection(findReplaceLogic.isActive(SearchOptions.WHOLE_WORD)); searchInSelectionButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { @@ -471,7 +471,7 @@ private void createAreaSearchButton() { private void createRegexSearchButton() { regexSearchButton = new ToolItem(searchTools, SWT.CHECK); - regexSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_FIND_REGEX)); + regexSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_REGEX)); regexSearchButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_regexSearchButton_toolTip); regexSearchButton.setSelection(findReplaceLogic.isActive(SearchOptions.REGEX)); regexSearchButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { @@ -483,7 +483,7 @@ private void createRegexSearchButton() { private void createCaseSensitiveButton() { caseSensitiveSearchButton = new ToolItem(searchTools, SWT.CHECK); - caseSensitiveSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_CASE_SENSITIVE)); + caseSensitiveSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_CASE_SENSITIVE)); caseSensitiveSearchButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_caseSensitiveButton_toolTip); caseSensitiveSearchButton.setSelection(findReplaceLogic.isActive(SearchOptions.CASE_SENSITIVE)); caseSensitiveSearchButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { @@ -494,7 +494,7 @@ private void createCaseSensitiveButton() { private void createWholeWordsButton() { wholeWordSearchButton = new ToolItem(searchTools, SWT.CHECK); - wholeWordSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_WHOLE_WORD)); + wholeWordSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_WHOLE_WORD)); wholeWordSearchButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_wholeWordsButton_toolTip); wholeWordSearchButton.setSelection(findReplaceLogic.isActive(SearchOptions.WHOLE_WORD)); wholeWordSearchButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { @@ -509,7 +509,7 @@ private void createReplaceTools() { replaceTools = new ToolBar(replaceContainer, SWT.HORIZONTAL); GridDataFactory.fillDefaults().grab(false, true).align(GridData.CENTER, GridData.END).applyTo(replaceTools); replaceButton = new ToolItem(replaceTools, SWT.PUSH); - replaceButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_REPLACE)); + replaceButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_REPLACE)); replaceButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceButton_toolTip); replaceButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { if (getFindString().isEmpty()) { @@ -520,7 +520,7 @@ private void createReplaceTools() { evaluateFindReplaceStatus(); })); replaceAllButton = new ToolItem(replaceTools, SWT.PUSH); - replaceAllButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_REPLACE_ALL)); + replaceAllButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_REPLACE_ALL)); replaceAllButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceAllButton_toolTip); replaceAllButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { if (getFindString().isEmpty()) { @@ -629,17 +629,17 @@ private void createReplaceToggle() { GridDataFactory.fillDefaults().grab(false, true).align(GridData.BEGINNING, GridData.FILL) .applyTo(replaceToggle); replaceToggle.setToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceToggle_toolTip); - replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_OPEN_REPLACE_AREA)); + replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_OPEN_REPLACE_AREA)); replaceToggle.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> toggleReplace())); } private void toggleReplace() { if (!replaceBarOpen) { createReplaceDialog(); - replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_CLOSE_REPLACE_AREA)); + replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_CLOSE_REPLACE_AREA)); } else { hideReplace(); - replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.OBJ_OPEN_REPLACE_AREA)); + replaceToggle.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_OPEN_REPLACE_AREA)); } replaceToggle.setSelection(false); // We don't want the button to look "locked in", so don't // use it's selectionState diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java index 9796d8af872..15d034b037a 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlayImages.java @@ -33,29 +33,19 @@ * find/replace-operations. */ class FindReplaceOverlayImages { - static final String PREFIX_OBJ = TextEditorPlugin.PLUGIN_ID + ".obj."; //$NON-NLS-1$ - - static final String OBJ_FIND_NEXT = PREFIX_OBJ + "select_next.png"; //$NON-NLS-1$ - - static final String OBJ_FIND_PREV = PREFIX_OBJ + "select_prev.png"; //$NON-NLS-1$ - - static final String OBJ_FIND_REGEX = PREFIX_OBJ + "regex_gear.gif"; //$NON-NLS-1$ - - static final String OBJ_REPLACE = PREFIX_OBJ + "replace.png"; //$NON-NLS-1$ - - static final String OBJ_REPLACE_ALL = PREFIX_OBJ + "replace_all.png"; //$NON-NLS-1$ - - static final String OBJ_WHOLE_WORD = PREFIX_OBJ + "whole_word.png"; //$NON-NLS-1$ - - static final String OBJ_CASE_SENSITIVE = PREFIX_OBJ + "case_sensitive.png"; //$NON-NLS-1$ - - static final String OBJ_SEARCH_ALL = PREFIX_OBJ + "search_all.png"; //$NON-NLS-1$ - - static final String OBJ_SEARCH_IN_AREA = PREFIX_OBJ + "search_in_selection.png"; //$NON-NLS-1$ - - static final String OBJ_OPEN_REPLACE_AREA = PREFIX_OBJ + "open_replace.png"; //$NON-NLS-1$ - - static final String OBJ_CLOSE_REPLACE_AREA = PREFIX_OBJ + "close_replace.png"; //$NON-NLS-1$ + private static final String PREFIX_ELCL = TextEditorPlugin.PLUGIN_ID + ".elcl."; //$NON-NLS-1$ + + static final String KEY_FIND_NEXT = PREFIX_ELCL + "select_next"; //$NON-NLS-1$ + static final String KEY_FIND_PREV = PREFIX_ELCL + "select_prev"; //$NON-NLS-1$ + static final String KEY_FIND_REGEX = PREFIX_ELCL + "regex"; //$NON-NLS-1$ + static final String KEY_REPLACE = PREFIX_ELCL + "replace"; //$NON-NLS-1$ + static final String KEY_REPLACE_ALL = PREFIX_ELCL + "replace_all"; //$NON-NLS-1$ + static final String KEY_WHOLE_WORD = PREFIX_ELCL + "whole_word"; //$NON-NLS-1$ + static final String KEY_CASE_SENSITIVE = PREFIX_ELCL + "case_sensitive"; //$NON-NLS-1$ + static final String KEY_SEARCH_ALL = PREFIX_ELCL + "search_all"; //$NON-NLS-1$ + static final String KEY_SEARCH_IN_AREA = PREFIX_ELCL + "search_in_selection"; //$NON-NLS-1$ + static final String KEY_OPEN_REPLACE_AREA = PREFIX_ELCL + "open_replace"; //$NON-NLS-1$ + static final String KEY_CLOSE_REPLACE_AREA = PREFIX_ELCL + "close_replace"; //$NON-NLS-1$ /** * The image registry containing {@link Image images}. @@ -64,23 +54,23 @@ class FindReplaceOverlayImages { private static String ICONS_PATH = "$nl$/icons/full/"; //$NON-NLS-1$ - private final static String OBJ = ICONS_PATH + "obj16/"; //$NON-NLS-1$ + private final static String ELCL = ICONS_PATH + "elcl16/"; //$NON-NLS-1$ /** * Declare all images */ private static void declareImages() { - declareRegistryImage(OBJ_FIND_NEXT, OBJ + "select_next.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_FIND_PREV, OBJ + "select_prev.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_FIND_REGEX, OBJ + "regex.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_REPLACE_ALL, OBJ + "replace_all.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_REPLACE, OBJ + "replace.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_WHOLE_WORD, OBJ + "whole_word.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_CASE_SENSITIVE, OBJ + "case_sensitive.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_SEARCH_ALL, OBJ + "search_all.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_SEARCH_IN_AREA, OBJ + "search_in_area.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_OPEN_REPLACE_AREA, OBJ + "open_replace.png"); //$NON-NLS-1$ - declareRegistryImage(OBJ_CLOSE_REPLACE_AREA, OBJ + "close_replace.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_FIND_NEXT, ELCL + "select_next.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_FIND_PREV, ELCL + "select_prev.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_FIND_REGEX, ELCL + "regex.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_REPLACE_ALL, ELCL + "replace_all.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_REPLACE, ELCL + "replace.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_WHOLE_WORD, ELCL + "whole_word.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_CASE_SENSITIVE, ELCL + "case_sensitive.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_SEARCH_ALL, ELCL + "search_all.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_SEARCH_IN_AREA, ELCL + "search_in_area.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_OPEN_REPLACE_AREA, ELCL + "open_replace.png"); //$NON-NLS-1$ + declareRegistryImage(KEY_CLOSE_REPLACE_AREA, ELCL + "close_replace.png"); //$NON-NLS-1$ } /** From 954bc581051c3f0a5ebcacc1d85492d2acd85707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 18 Jun 2024 08:06:14 +0200 Subject: [PATCH 04/10] Fix NPE in legacyActionLabelSupport If command is null a NPE occurs even though from the code it seems this should be handled by a fallback. This replaces Optional.of with Optional.ofNullable to account for that case. --- .../e4/ui/workbench/renderers/swt/HandledContributionItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java index 104db0fcfa2..ebd8a28e549 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java @@ -339,7 +339,7 @@ private String getToolTipText(boolean attachKeybinding) { private String legacyActionLabelSupport(String text, ParameterizedCommand command) { - return java.util.Optional.of(command).map(ParameterizedCommand::getCommand).map(Command::getHandler) + return java.util.Optional.ofNullable(command).map(ParameterizedCommand::getCommand).map(Command::getHandler) .map(IHandler::getHandlerLabel).filter(Objects::nonNull).orElse(text); } From 1acae4f9333132ff94da8712908d3b185a165d74 Mon Sep 17 00:00:00 2001 From: Tobias Melcher Date: Wed, 19 Jun 2024 13:38:06 +0200 Subject: [PATCH 05/10] draw code minings at end of line before eol character if possible --- .../InlinedAnnotationDrawingStrategy.java | 11 ++-- .../source/inlined/LineContentAnnotation.java | 19 +++--- .../text/tests/codemining/CodeMiningTest.java | 63 ++++++++++++++++++- 3 files changed, 77 insertions(+), 16 deletions(-) diff --git a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java index 60f4214018f..09464aef653 100644 --- a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java +++ b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java @@ -13,9 +13,6 @@ */ package org.eclipse.jface.text.source.inlined; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.source.Annotation; -import org.eclipse.jface.text.source.AnnotationPainter.IDrawingStrategy; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; @@ -27,6 +24,10 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.source.Annotation; +import org.eclipse.jface.text.source.AnnotationPainter.IDrawingStrategy; + /** * {@link IDrawingStrategy} implementation to render {@link AbstractInlinedAnnotation}. * @@ -115,7 +116,7 @@ private boolean match(Font annotationFont, StyledText widget) { } int widgetFontHeight = widget.getFont().getFontData()[0].getHeight(); int annotationFontHeight = annotationFont.getFontData()[0].getHeight(); - return annotationFontHeight == widgetFontHeight; + return annotationFontHeight == widgetFontHeight; } /** @@ -201,7 +202,7 @@ private static void draw(LineHeaderAnnotation annotation, GC gc, StyledText text */ private static void draw(LineContentAnnotation annotation, GC gc, StyledText textWidget, int widgetOffset, int length, Color color) { - if (annotation.isEndOfLine(widgetOffset, textWidget)) { + if (annotation.isEmptyLine(widgetOffset, textWidget)) { drawAfterLine(annotation, gc, textWidget, widgetOffset, length, color); } else if (LineContentAnnotation.drawRightToPreviousChar(widgetOffset, textWidget)) { drawAsRightOfPreviousCharacter(annotation, gc, textWidget, widgetOffset, length, color); diff --git a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java index e0fbe501e5e..f451206f0d5 100644 --- a/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java +++ b/bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java @@ -13,11 +13,6 @@ */ package org.eclipse.jface.text.source.inlined; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.ITextViewerExtension5; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.TextPresentation; -import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Color; @@ -25,6 +20,12 @@ import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.GlyphMetrics; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.ITextViewerExtension5; +import org.eclipse.jface.text.Position; +import org.eclipse.jface.text.TextPresentation; +import org.eclipse.jface.text.source.ISourceViewer; + /** * Inlined annotation which is drawn in the line content and which takes some place with a given * width. @@ -162,14 +163,12 @@ static boolean drawRightToPreviousChar(int widgetOffset, StyledText textWidget) textWidget.getLineAtOffset(widgetOffset) == textWidget.getLineAtOffset(widgetOffset - 1); } - boolean isEndOfLine(int widgetOffset, StyledText text) { + boolean isEmptyLine(int widgetOffset, StyledText text) { if (text.getCharCount() <= widgetOffset) { // Assuming widgetOffset >= 0 return true; } int line= text.getLineAtOffset(widgetOffset); - int startOfLine= text.getOffsetAtLine(line); - int offsetInLine= widgetOffset - startOfLine; - return offsetInLine >= text.getLine(line).length(); + String lineStr= text.getLine(line); + return lineStr.length() == 0; } - } diff --git a/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/codemining/CodeMiningTest.java b/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/codemining/CodeMiningTest.java index 815ff06a6a3..e7bf25f6f06 100644 --- a/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/codemining/CodeMiningTest.java +++ b/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/codemining/CodeMiningTest.java @@ -26,6 +26,7 @@ import org.junit.Test; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; @@ -194,6 +195,62 @@ protected boolean condition() { }.waitForCondition(fViewer.getControl().getDisplay(), 3000)); } + @Test + public void testCodeMiningEmptyLine() { + fViewer.getDocument().set("\n"); + fViewer.setCodeMiningProviders(new ICodeMiningProvider[] { new ICodeMiningProvider() { + @Override + public CompletableFuture> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) { + return CompletableFuture.completedFuture(Collections.singletonList(new StaticContentLineCodeMining(new Position(0, 1), "mining", this))); + } + + @Override + public void dispose() { + } + } }); + StyledText widget= fViewer.getTextWidget(); + Assert.assertTrue("Code mining is not visible in 1st empty line after line break character", new DisplayHelper() { + @Override + protected boolean condition() { + try { + StyleRange range= widget.getStyleRangeAtOffset(0); + return range == null && hasCodeMiningPrintedAfterTextOnLine(fViewer, 0); + } catch (BadLocationException e) { + e.printStackTrace(); + return false; + } + } + }.waitForCondition(fViewer.getTextWidget().getDisplay(), 1000)); + } + + @Test + public void testCodeMiningEndOfLine() { + fViewer.getDocument().set("a\n"); + fViewer.setCodeMiningProviders(new ICodeMiningProvider[] { new ICodeMiningProvider() { + @Override + public CompletableFuture> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) { + return CompletableFuture.completedFuture(Collections.singletonList(new StaticContentLineCodeMining(new Position(1, 1), "mining", this))); + } + + @Override + public void dispose() { + } + } }); + StyledText widget= fViewer.getTextWidget(); + Assert.assertTrue("Code mining is not visible in 1st line after character a before line break character", new DisplayHelper() { + @Override + protected boolean condition() { + try { + StyleRange range= widget.getStyleRangeAtOffset(0); + return range != null && range.metrics != null && hasCodeMiningPrintedAfterTextOnLine(fViewer, 0) == false; + } catch (BadLocationException e) { + e.printStackTrace(); + return false; + } + } + }.waitForCondition(fViewer.getTextWidget().getDisplay(), 1000)); + } + @Test public void testCodeMiningMultiLine() { fViewer.getDocument().set("a\nbc"); @@ -225,7 +282,11 @@ protected boolean condition() { private static boolean hasCodeMiningPrintedAfterTextOnLine(ITextViewer viewer, int line) throws BadLocationException { StyledText widget = viewer.getTextWidget(); IDocument document= viewer.getDocument(); - Rectangle secondLineBounds = widget.getTextBounds(document.getLineOffset(1), document.getLineOffset(line) + document.getLineLength(line) - 1); + int lineLength= document.getLineLength(line) - 1; + if (lineLength < 0) { + lineLength= 0; + } + Rectangle secondLineBounds= widget.getTextBounds(document.getLineOffset(line), document.getLineOffset(line) + lineLength); Image image = new Image(widget.getDisplay(), widget.getSize().x, widget.getSize().y); GC gc = new GC(widget); gc.copyArea(image, 0, 0); From 160dfa8eb3f9acb8981222443c9e14c47b43f65f Mon Sep 17 00:00:00 2001 From: Stephan Herrmann Date: Thu, 20 Jun 2024 21:45:45 +0200 Subject: [PATCH 06/10] remove unnecessary casts (#1988) * remove unnecessary casts --- .../META-INF/MANIFEST.MF | 2 +- .../addons/minmax/MinMaxAddonUtil.java | 2 +- .../ui/workbench/renderers/swt/SashLayout.java | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../e4/ui/internal/LocaleChangeServiceImpl.java | 3 +-- .../eclipse/jface/util/ConfigureColumns.java | 8 ++++---- .../META-INF/MANIFEST.MF | 2 +- .../participants/ProcessorBasedRefactoring.java | 2 +- bundles/org.eclipse.search/META-INF/MANIFEST.MF | 2 +- .../internal/ui/SearchPageDescriptor.java | 3 +-- .../internal/texteditor/LineNumberColumn.java | 6 +++--- .../eclipse/ui/texteditor/AddMarkerAction.java | 2 +- .../actions/CloseUnrelatedProjectsAction.java | 2 +- .../eclipse/ui/actions/CopyResourceAction.java | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../resources/actions/PasteAction.java | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../NavigatorContentServiceContentProvider.java | 6 +++--- .../navigator/NavigatorPipelineService.java | 17 ++++++++--------- .../org.eclipse.ui.views/META-INF/MANIFEST.MF | 2 +- .../ui/views/properties/PropertySheetEntry.java | 2 +- .../ui/texteditor/FindReplaceDialog.java | 2 +- .../templates/AbstractTemplatesPage.java | 2 +- .../ui/internal/PluginActionSetBuilder.java | 2 +- .../org/eclipse/ui/internal/WorkbenchPage.java | 4 ++-- .../databinding/MultiSelectionProperty.java | 4 ++-- .../databinding/SingleSelectionProperty.java | 4 ++-- .../dialogs/FilteredPreferenceDialog.java | 2 +- .../ui/internal/handlers/SelectAllHandler.java | 2 +- .../internal/handlers/WidgetMethodHandler.java | 4 ++-- .../META-INF/MANIFEST.MF | 2 +- .../tests/viewers/TestModelContentProvider.java | 2 +- .../ui/tests/adaptable/WorkingSetTestCase.java | 5 ++--- .../ui/tests/dialogs/ResourcePathCopyTest.java | 2 +- 34 files changed, 53 insertions(+), 57 deletions(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.workbench.addons.swt/META-INF/MANIFEST.MF index 1902ea19495..d1349e8e07e 100644 --- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.e4.ui.workbench.addons.swt;singleton:=true -Bundle-Version: 1.5.400.qualifier +Bundle-Version: 1.5.500.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java index 372ba2e7d52..d667dc54bec 100644 --- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java +++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java @@ -347,7 +347,7 @@ public static MWindow getWindowFor(MUIElement element) { // null since it's not in the 'children' hierarchy while (parent != null && !(parent instanceof MWindow)) { if (parent.getTags().contains(MIN_MAXIMIZEABLE_CHILDREN_AREA_TAG) && parent instanceof MArea) { - parent = ((MArea) parent).getCurSharedRef(); + parent = parent.getCurSharedRef(); } else { parent = parent.getParent(); } diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java index 36e2da08d82..4833b766d94 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SashLayout.java @@ -163,7 +163,7 @@ protected void layout(Composite composite, boolean flushCache) { Rectangle bounds = composite.getBounds(); if (composite instanceof Shell) - bounds = ((Shell) composite).getClientArea(); + bounds = composite.getClientArea(); else { bounds.x = 0; bounds.y = 0; diff --git a/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF index fef5c44318d..f4f1df6ffe7 100644 --- a/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.ui.workbench/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.e4.ui.workbench;singleton:=true -Bundle-Version: 1.15.400.qualifier +Bundle-Version: 1.15.500.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/LocaleChangeServiceImpl.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/LocaleChangeServiceImpl.java index 1c0ca43ce0b..d8f814bf027 100644 --- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/LocaleChangeServiceImpl.java +++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/LocaleChangeServiceImpl.java @@ -25,7 +25,6 @@ import org.eclipse.e4.core.services.translation.TranslationService; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.MElementContainer; -import org.eclipse.e4.ui.model.application.ui.MLocalizable; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; import org.eclipse.e4.ui.model.application.ui.basic.MPart; @@ -142,7 +141,7 @@ protected void updateLocalization(List children) { } } - ((MLocalizable) element).updateLocalization(); + element.updateLocalization(); } } diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/util/ConfigureColumns.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/util/ConfigureColumns.java index 2cbe746f63b..9b3ef42694a 100644 --- a/bundles/org.eclipse.jface/src/org/eclipse/jface/util/ConfigureColumns.java +++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/util/ConfigureColumns.java @@ -172,9 +172,9 @@ private boolean createColumnObjects() { private Image getColumnImage(Item item) { if (item instanceof TableColumn) { - return ((TableColumn) item).getImage(); + return item.getImage(); } else if (item instanceof TreeColumn) { - return ((TreeColumn) item).getImage(); + return item.getImage(); } return null; } @@ -301,12 +301,12 @@ private void createLabel(final Composite composite, String string) { private String getColumnName(Item item) { String result = ""; //$NON-NLS-1$ if (item instanceof TableColumn) { - result = ((TableColumn) item).getText(); + result = item.getText(); if (result.trim().isEmpty()) { result = ((TableColumn) item).getToolTipText(); } } else if (item instanceof TreeColumn) { - result = ((TreeColumn) item).getText(); + result = item.getText(); if (result.trim().isEmpty()) { result = ((TreeColumn) item).getToolTipText(); } diff --git a/bundles/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF b/bundles/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF index b4ad4bb24f9..49d207da620 100644 --- a/bundles/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Automatic-Module-Name: org.eclipse.ltk.core.refactoring Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.ltk.core.refactoring; singleton:=true -Bundle-Version: 3.14.400.qualifier +Bundle-Version: 3.14.500.qualifier Bundle-Activator: org.eclipse.ltk.internal.core.refactoring.RefactoringCorePlugin Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName diff --git a/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java b/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java index 15e9b34cb96..aca29f94def 100644 --- a/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java +++ b/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java @@ -430,7 +430,7 @@ private static void disableParticipant(final RefactoringParticipant participant, private void addToTextChangeMap(Change change) { if (change instanceof TextChange) { - Object element= ((TextChange) change).getModifiedElement(); + Object element= change.getModifiedElement(); if (element != null) { fTextChangeMap.put(element, (TextChange) change); } diff --git a/bundles/org.eclipse.search/META-INF/MANIFEST.MF b/bundles/org.eclipse.search/META-INF/MANIFEST.MF index 8973a63ae63..f49bba72f71 100644 --- a/bundles/org.eclipse.search/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.search/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.search; singleton:=true -Bundle-Version: 3.16.200.qualifier +Bundle-Version: 3.16.300.qualifier Bundle-Activator: org.eclipse.search.internal.ui.SearchPlugin Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName diff --git a/bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java b/bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java index f7bc43ad3ae..8bc61bf9397 100644 --- a/bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java +++ b/bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java @@ -34,7 +34,6 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogSettings; @@ -336,7 +335,7 @@ public int computeScore(Object element) { IResource resource= ((IAdaptable)element).getAdapter(IResource.class); if (resource != null && resource.getType() == IResource.FILE) { - String extension= ((IFile)resource).getFileExtension(); + String extension= resource.getFileExtension(); if (extension != null) score= Math.max(score, getScoreForFileExtension(extension)); } diff --git a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java index 74afbe2a0fd..d8aa52f331b 100644 --- a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java +++ b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/LineNumberColumn.java @@ -530,7 +530,7 @@ private boolean ensureQuickDiffProvider(String diffProviderId) { modelExtension.addAnnotationModel(IChangeRulerColumn.QUICK_DIFF_MODEL_ID, newDiffer); if (fDelegate instanceof IChangeRulerColumn) - ((IChangeRulerColumn) fDelegate).setModel(annotationModel); // picks up the new model attachment + fDelegate.setModel(annotationModel); // picks up the new model attachment return true; } @@ -543,7 +543,7 @@ private boolean ensureQuickDiffProvider(String diffProviderId) { private void installChangeRulerModel(IVerticalRulerColumn column) { if (column instanceof IChangeRulerColumn) { IAnnotationModel model= getAnnotationModelWithDiffer(); - ((IChangeRulerColumn) column).setModel(model); + column.setModel(model); if (model != null) { ISourceViewer viewer= fViewer; if (viewer != null && viewer.getAnnotationModel() == null && column.getControl() != null) @@ -559,7 +559,7 @@ private void installChangeRulerModel(IVerticalRulerColumn column) { */ private void uninstallChangeRulerModel(IVerticalRulerColumn column) { if (column instanceof IChangeRulerColumn) - ((IChangeRulerColumn) column).setModel(null); + column.setModel(null); IAnnotationModel model= getDiffer(); if (model instanceof ILineDifferExtension) ((ILineDifferExtension) model).suspend(); diff --git a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java index a593ec97694..76eeb3e1474 100644 --- a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java +++ b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java @@ -331,7 +331,7 @@ protected IResource getResource() { ITextEditor editor= getTextEditor(); if (editor != null) { IEditorInput input= editor.getEditorInput(); - return ((IAdaptable) input).getAdapter(IResource.class); + return input.getAdapter(IResource.class); } return null; } diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java index 3d8c3ad6252..6bb045a4647 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java @@ -162,7 +162,7 @@ private boolean promptForConfirmation() { IResource firstSelected = selection.get(0); String projectName = null; if (firstSelected instanceof IProject) { - projectName = ((IProject) firstSelected).getName(); + projectName = firstSelected.getName(); } message = NLS.bind(IDEWorkbenchMessages.CloseUnrelatedProjectsAction_confirmMsg1, projectName); } else // if more then one project is selected then print there number diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java index 4132c0acd2d..59204d631a1 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java @@ -288,7 +288,7 @@ protected boolean updateSelection(IStructuredSelection selection) { if (selectedResources.isEmpty()) { return false; } - IContainer firstParent = ((IResource) selectedResources.get(0)) + IContainer firstParent = selectedResources.get(0) .getParent(); if (firstParent == null) { return false; diff --git a/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF index e9c2740182b..4f37678762d 100644 --- a/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Plugin.name Bundle-SymbolicName: org.eclipse.ui.navigator.resources; singleton:=true -Bundle-Version: 3.9.300.qualifier +Bundle-Version: 3.9.400.qualifier Bundle-Activator: org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorPlugin Bundle-Vendor: %Plugin.providerName Bundle-Localization: plugin diff --git a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/PasteAction.java b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/PasteAction.java index 4117fffbf68..8674abdf5c2 100644 --- a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/PasteAction.java +++ b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/PasteAction.java @@ -187,7 +187,7 @@ private IContainer getContainer(IResource[] clipboardContent) { } if (selection.get(0) instanceof IFile) { - return ((IFile) selection.get(0)).getParent(); + return selection.get(0).getParent(); } return (IContainer) selection.get(0); } diff --git a/bundles/org.eclipse.ui.navigator/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.navigator/META-INF/MANIFEST.MF index 25dfe3706e2..69d1172c38e 100644 --- a/bundles/org.eclipse.ui.navigator/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.navigator/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Plugin.name Bundle-SymbolicName: org.eclipse.ui.navigator; singleton:=true -Bundle-Version: 3.12.400.qualifier +Bundle-Version: 3.12.500.qualifier Bundle-Activator: org.eclipse.ui.internal.navigator.NavigatorPlugin Bundle-Vendor: %Plugin.providerName Bundle-Localization: plugin diff --git a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java index 81c8b35321d..af400de3305 100644 --- a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java +++ b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java @@ -441,7 +441,7 @@ private boolean callNormalHasChildren(Object anElementOrPath, Object anElement, ITreePathContentProvider tpcp = cp; return tpcp.hasChildren((TreePath) anElementOrPath); } - return ((ITreeContentProvider) cp).hasChildren(anElement); + return cp.hasChildren(anElement); } private boolean pipelineHasChildren(Object anElementOrPath, Object anElement, @@ -632,8 +632,8 @@ public void run() throws Exception { if (!isOverridingDescriptorInSet(foundExtension.getDescriptor(), descriptors)) { if (foundExtension.internalGetContentProvider().isTreePath()) { - TreePath[] parentTreePaths = ((ITreePathContentProvider) foundExtension - .internalGetContentProvider()).getParents(anElement); + TreePath[] parentTreePaths = foundExtension + .internalGetContentProvider().getParents(anElement); for (TreePath parentTreePath : parentTreePaths) { diff --git a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java index f7b4d35af50..4e45784a0fc 100644 --- a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java +++ b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorPipelineService.java @@ -25,7 +25,6 @@ import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension; import org.eclipse.ui.navigator.INavigatorContentDescriptor; import org.eclipse.ui.navigator.INavigatorPipelineService; -import org.eclipse.ui.navigator.IPipelinedTreeContentProvider; import org.eclipse.ui.navigator.PipelinedShapeModification; import org.eclipse.ui.navigator.PipelinedViewerUpdate; @@ -79,8 +78,8 @@ private void pipelineInterceptAdd(final PipelinedShapeModification anAddModifica SafeRunner.run(new NavigatorSafeRunnable() { @Override public void run() throws Exception { - ((IPipelinedTreeContentProvider) extension - .internalGetContentProvider()) + extension + .internalGetContentProvider() .interceptAdd(anAddModification); } @@ -139,8 +138,8 @@ private void pipelineInterceptRemove(final PipelinedShapeModification aRemoveMod SafeRunner.run(new NavigatorSafeRunnable() { @Override public void run() throws Exception { - ((IPipelinedTreeContentProvider) overridingExtension - .internalGetContentProvider()).interceptRemove(aRemoveModification); + overridingExtension + .internalGetContentProvider().interceptRemove(aRemoveModification); } @Override @@ -189,8 +188,8 @@ private boolean pipelineInterceptRefresh(final NavigatorContentExtension overrid SafeRunner.run(new NavigatorSafeRunnable() { @Override public void run() throws Exception { - intercepted[0] |= ((IPipelinedTreeContentProvider) nceLocal - .internalGetContentProvider()) + intercepted[0] |= nceLocal + .internalGetContentProvider() .interceptRefresh(aRefreshSynchronization); if (nceLocal.getDescriptor().hasOverridingExtensions()) @@ -242,8 +241,8 @@ private boolean pipelineInterceptUpdate(final NavigatorContentExtension override SafeRunner.run(new NavigatorSafeRunnable() { @Override public void run() throws Exception { - intercepted[0] |= ((IPipelinedTreeContentProvider) nceLocal - .internalGetContentProvider()) + intercepted[0] |= nceLocal + .internalGetContentProvider() .interceptUpdate(anUpdateSynchronization); if (nceLocal.getDescriptor().hasOverridingExtensions()) diff --git a/bundles/org.eclipse.ui.views/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.views/META-INF/MANIFEST.MF index 7e22568a08b..711668e3508 100644 --- a/bundles/org.eclipse.ui.views/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.views/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.ui.views; singleton:=true -Bundle-Version: 3.12.300.qualifier +Bundle-Version: 3.12.400.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Export-Package: org.eclipse.ui.internal.views.contentoutline;x-internal:=true, diff --git a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheetEntry.java b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheetEntry.java index acffacc707a..6394f598931 100644 --- a/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheetEntry.java +++ b/bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheetEntry.java @@ -553,7 +553,7 @@ private void refreshChildEntries() { // Dispose of entries which are no longer needed for (PropertySheetEntry element : entriesToDispose) { - ((IPropertySheetEntry) element).dispose(); + element.dispose(); } } diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java index dd9466e0f19..442f7f558d3 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java @@ -1003,7 +1003,7 @@ private void storeButtonWithMnemonicInMap(Button button) { private void setGridData(Control component, int horizontalAlignment, boolean grabExcessHorizontalSpace, int verticalAlignment, boolean grabExcessVerticalSpace) { GridData gd; - if (component instanceof Button && (((Button) component).getStyle() & SWT.PUSH) != 0) { + if (component instanceof Button && (component.getStyle() & SWT.PUSH) != 0) { SWTUtil.setButtonDimensionHint((Button) component); gd = (GridData) component.getLayoutData(); } else { diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java index 11b1b13d58c..95db4172441 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java @@ -1510,7 +1510,7 @@ public void dragOver(DropTargetEvent event) { public void drop(DropTargetEvent event) { if (event.item == null) return; - Object object= ((TreeItem) event.item).getData(); + Object object= event.item.getData(); final String contextId; if (object instanceof TemplateContextType) contextId= ((TemplateContextType) object).getId(); diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionSetBuilder.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionSetBuilder.java index 6d35273fe61..5d6a92ee4a8 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionSetBuilder.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PluginActionSetBuilder.java @@ -619,7 +619,7 @@ private void revokeActionSetFromCoolbar(ICoolBarManager coolbarMgr, String actio if (item instanceof IToolBarManager) { revokeActionSetFromToolbar((IToolBarManager) item, actionsetId); } else if (item instanceof IToolBarContributionItem) { - id = ((IToolBarContributionItem) item).getId(); + id = item.getId(); if (actionsetId.equals(id)) { itemsToRemove.add(item); } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java index e487b14a0fa..3a30b16a229 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java @@ -1030,13 +1030,13 @@ public MPart findPart(IWorkbenchPart part) { for (ViewReference reference : viewReferences) { if (part == reference.getPart(false)) { - return ((WorkbenchPartReference) reference).getModel(); + return reference.getModel(); } } for (EditorReference reference : editorReferences) { if (part == reference.getPart(false)) { - return ((WorkbenchPartReference) reference).getModel(); + return reference.getModel(); } } return null; diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/MultiSelectionProperty.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/MultiSelectionProperty.java index b2ff183f4e5..56501815295 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/MultiSelectionProperty.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/MultiSelectionProperty.java @@ -36,9 +36,9 @@ public Object getElementType() { protected List doGetList(S source) { ISelection selection; if (partId != null) { - selection = ((ISelectionService) source).getSelection(partId); + selection = source.getSelection(partId); } else { - selection = ((ISelectionService) source).getSelection(); + selection = source.getSelection(); } if (selection instanceof IStructuredSelection) { List list = ((IStructuredSelection) selection).toList(); diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/SingleSelectionProperty.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/SingleSelectionProperty.java index 0baa077703a..ce09c025353 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/SingleSelectionProperty.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/databinding/SingleSelectionProperty.java @@ -28,9 +28,9 @@ public INativePropertyListener adaptListener(ISimplePropertyListener openExportWizard(parent)); } else if (control instanceof Link) { - Composite linkParent = ((Link) control).getParent(); + Composite linkParent = control.getParent(); Link importLink = new Link(linkParent, SWT.WRAP | SWT.NO_FOCUS); ((GridLayout) parent.getLayout()).numColumns++; importLink.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SelectAllHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SelectAllHandler.java index 4fe24c769a4..9e8b24f4920 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SelectAllHandler.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SelectAllHandler.java @@ -51,7 +51,7 @@ public final Object execute(final ExecutionEvent event) throws ExecutionExceptio final int numParams = methodToExecute.getParameterTypes().length; if ((focusControl instanceof Composite) - && ((((Composite) focusControl).getStyle() & SWT.EMBEDDED) != 0)) { + && ((focusControl.getStyle() & SWT.EMBEDDED) != 0)) { // we only support selectAll for swing components if (numParams != 0) { diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WidgetMethodHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WidgetMethodHandler.java index 596029ca4b1..601043ce538 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WidgetMethodHandler.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WidgetMethodHandler.java @@ -70,7 +70,7 @@ public Object execute(final ExecutionEvent event) throws ExecutionException { try { final Control focusControl = Display.getCurrent().getFocusControl(); if ((focusControl instanceof Composite) - && ((((Composite) focusControl).getStyle() & SWT.EMBEDDED) != 0)) { + && ((focusControl.getStyle() & SWT.EMBEDDED) != 0)) { /* * Okay. Have a seat. Relax a while. This is going to be a bumpy ride. If it is * an embedded widget, then it *might* be a Swing widget. At the point where @@ -210,7 +210,7 @@ protected Method getMethodToExecute() { } if ((method == null) && (focusControl instanceof Composite) - && ((((Composite) focusControl).getStyle() & SWT.EMBEDDED) != 0)) { + && ((focusControl.getStyle() & SWT.EMBEDDED) != 0)) { /* * We couldn't find the appropriate method on the current focus control. It is * possible that the current focus control is an embedded SWT composite, which diff --git a/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF index 70ccca58dcd..15b357fd9f7 100644 --- a/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.jface.tests -Bundle-Version: 1.4.500.qualifier +Bundle-Version: 1.4.600.qualifier Automatic-Module-Name: org.eclipse.jface.tests Bundle-RequiredExecutionEnvironment: JavaSE-17 Require-Bundle: org.junit;bundle-version="4.12.0", diff --git a/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/viewers/TestModelContentProvider.java b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/viewers/TestModelContentProvider.java index b798ce304b9..d6da01409a5 100644 --- a/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/viewers/TestModelContentProvider.java +++ b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/viewers/TestModelContentProvider.java @@ -143,7 +143,7 @@ public void testModelChanged(TestModelChange change) { StructuredSelection selection = new StructuredSelection(change.getChildren()); if ((change.getModifiers() & TestModelChange.SELECT) != 0) { - ((StructuredViewer) fViewer).setSelection(selection); + fViewer.setSelection(selection); } if ((change.getModifiers() & TestModelChange.REVEAL) != 0) { Object element = selection.getFirstElement(); diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/adaptable/WorkingSetTestCase.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/adaptable/WorkingSetTestCase.java index 24401cd92bf..4a00d7377dc 100644 --- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/adaptable/WorkingSetTestCase.java +++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/adaptable/WorkingSetTestCase.java @@ -20,7 +20,6 @@ import org.eclipse.core.resources.mapping.ResourceMapping; import org.eclipse.core.resources.mapping.ResourceTraversal; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.ui.IResourceActionFilter; import org.eclipse.ui.IWorkingSet; @@ -42,11 +41,11 @@ public WorkingSetTestCase() { } private ResourceMapping getResourceMapping(IWorkingSet set) { - return ((IAdaptable) set).getAdapter(ResourceMapping.class); + return set.getAdapter(ResourceMapping.class); } private IWorkbenchAdapter getWorkbenchAdapter(IWorkingSet set) { - return ((IAdaptable) set).getAdapter(IWorkbenchAdapter.class); + return set.getAdapter(IWorkbenchAdapter.class); } private void assertMatches(ResourceMapping mapping, IResource[] resources) throws CoreException { diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourcePathCopyTest.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourcePathCopyTest.java index fe77d2e91bd..5bd9e45353b 100644 --- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourcePathCopyTest.java +++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourcePathCopyTest.java @@ -150,7 +150,7 @@ private void copyButtonSelection(Control[] children, Control childElement) // for getting location value Control control = children[5]; // for button click - ((Button) childElement).notifyListeners(SWT.Selection, new Event()); + childElement.notifyListeners(SWT.Selection, new Event()); assertNotNull(Toolkit.getDefaultToolkit().getSystemClipboard() .getData(DataFlavor.stringFlavor)); assertEquals(((Text) control).getText(), Toolkit.getDefaultToolkit() From d6c128e9fcf77e2b623081dd05c95ce44a771952 Mon Sep 17 00:00:00 2001 From: DaveCarpeneto Date: Tue, 25 Jun 2024 21:33:16 -0400 Subject: [PATCH 07/10] Refresh option only available for projects eclipse-platform#1904 Returns functionality whereby open projects _and_ non-project resources get the 'refresh' contextual menu (option was removed for non-project resources via the fix @ https://github.com/eclipse-platform/eclipse.platform/issues/876 ). --- .../resources/actions/ResourceMgmtActionProvider.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java index f860ce34324..a8fcea10af4 100644 --- a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java +++ b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java @@ -145,8 +145,10 @@ public void fillContextMenu(IMenuManager menu) { buildAction.selectionChanged(selection); menu.appendToGroup(ICommonMenuConstants.GROUP_BUILD, buildAction); } - // To refresh, even if one project is open - if (hasOpenProjects) { + // Add the 'refresh' item if any selection is either (a) an open project, or (b) + // a non-project selection (so the 'refresh' item is not shown if all selections + // are closed projects) + if (hasOpenProjects || !isProjectSelection) { refreshAction.selectionChanged(selection); menu.appendToGroup(ICommonMenuConstants.GROUP_BUILD, refreshAction); } From 9d6981f87f7f346fef4833ca24e0d33898380f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Kubitz?= Date: Wed, 26 Jun 2024 10:55:44 +0200 Subject: [PATCH 08/10] Fix NPE in UndoManager2.addUndo fixes #2004 TriggeredOperations.getTriggeringOperation() can return null after TriggeredOperations.remove() https://github.com/eclipse-platform/eclipse.platform.ui/issues/2004 --- .../core/commands/operations/TriggeredOperations.java | 7 ++++--- .../ltk/internal/core/refactoring/UndoManager2.java | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/TriggeredOperations.java b/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/TriggeredOperations.java index a0635e90554..bfbbee0080d 100644 --- a/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/TriggeredOperations.java +++ b/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/TriggeredOperations.java @@ -295,10 +295,11 @@ private void removeAllChildren() { } /** - * Return the operation that triggered the other operations in this - * composite. + * Return the operation that triggered the other operations in this composite. * - * @return the IUndoableOperation that triggered the other children. + * @return the IUndoableOperation that triggered the other children or + * null if the triggeringOperation was removed + * @see TriggeredOperations#remove(IUndoableOperation) */ public IUndoableOperation getTriggeringOperation() { return triggeringOperation; diff --git a/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java b/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java index afb1d5ed9ee..3c34e3fba6f 100644 --- a/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java +++ b/bundles/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java @@ -173,9 +173,10 @@ public void changePerformed(Change change, boolean successful) { @Override public void addUndo(String name, Change change) { if (fActiveOperation != null) { - UndoableOperation2ChangeAdapter operation= (UndoableOperation2ChangeAdapter)fActiveOperation.getTriggeringOperation(); - operation.setUndoChange(change); - operation.setLabel(name); + if (fActiveOperation.getTriggeringOperation() instanceof UndoableOperation2ChangeAdapter operation) { + operation.setUndoChange(change); + operation.setLabel(name); + } fOperationHistory.add(fActiveOperation); fActiveOperation= null; } From fc44255456951ee0727f4fc02c9f61b7c97e9b2d Mon Sep 17 00:00:00 2001 From: Maximilian Wittmer Date: Mon, 3 Jun 2024 13:50:26 +0200 Subject: [PATCH 09/10] Find/Replace overlay: remove search scope when leaving overlay #1919 Replace the FocusListener with a ShellAdapter which will remove the search scope as soon as the overlay is left. The FocusListener didn't listen to the case where the focus is in the search bar and the search bar is left (and the overlay is left implicitly) fixes #1919 --- .../ui/texteditor/FindReplaceOverlay.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java index 88fdddfcee9..95bf517fcca 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java @@ -26,6 +26,8 @@ import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.events.ShellAdapter; +import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; @@ -226,10 +228,17 @@ public void controlResized(ControlEvent e) { } }; - private FocusListener overlayFocusListener = FocusListener.focusLostAdapter(e -> { - findReplaceLogic.activate(SearchOptions.GLOBAL); - searchInSelectionButton.setSelection(false); - }); + private ShellAdapter overlayDeactivationListener = new ShellAdapter() { + @Override + public void shellActivated(ShellEvent e) { + // Do nothing + } + + @Override + public void shellDeactivated(ShellEvent e) { + removeSearchScope(); + } + }; private PaintListener widgetMovementListener = __ -> positionToPart(); @@ -317,7 +326,7 @@ public int open() { } overlayOpen = true; applyOverlayColors(backgroundToUse, true); - initFindStringFromSelection(); + updateFromTargetSelection(); getShell().layout(); positionToPart(); @@ -361,7 +370,7 @@ private void applyOverlayColors(Color color, boolean tryToColorReplaceBar) { } private void unbindListeners() { - getShell().removeFocusListener(overlayFocusListener); + getShell().removeShellListener(overlayDeactivationListener); if (targetPart != null && targetPart instanceof StatusTextEditor textEditor) { Control targetWidget = textEditor.getSourceViewer().getTextWidget(); if (targetWidget != null) { @@ -373,7 +382,7 @@ private void unbindListeners() { } private void bindListeners() { - getShell().addFocusListener(overlayFocusListener); + getShell().addShellListener(overlayDeactivationListener); if (targetPart instanceof StatusTextEditor textEditor) { Control targetWidget = textEditor.getSourceViewer().getTextWidget(); @@ -815,7 +824,7 @@ private void performSearch(boolean forward) { findReplaceLogic.activate(SearchOptions.INCREMENTAL); } - private void initFindStringFromSelection() { + private void updateFromTargetSelection() { String initText = findReplaceLogic.getTarget().getSelectionText(); if (initText.isEmpty()) { return; @@ -863,4 +872,9 @@ private static boolean okayToUse(Widget widget) { public void setPositionToTop(boolean shouldPositionOverlayOnTop) { positionAtTop = shouldPositionOverlayOnTop; } + + private void removeSearchScope() { + findReplaceLogic.activate(SearchOptions.GLOBAL); + searchInSelectionButton.setSelection(false); + } } \ No newline at end of file From 764298801126525f61127e15deabbf12fa0345f4 Mon Sep 17 00:00:00 2001 From: Maximilian Wittmer Date: Wed, 29 May 2024 21:39:00 +0200 Subject: [PATCH 10/10] Make the ToolBar in the Find/Replace Overlay accessible #1910 Makes the Find/Replace Overlay options accessible by tabbing through the different option buttons. Implements a new "AccessibleToolBar" class which wraps the ToolBar and allows for being natively accessible by using the normal traversal mechanism provided by SWT. fixes #1910 --- .../ui/texteditor/AccessibleToolBar.java | 82 +++++++++ .../texteditor/AccessibleToolItemBuilder.java | 74 ++++++++ .../ui/texteditor/FindReplaceOverlay.java | 159 +++++++++--------- 3 files changed, 236 insertions(+), 79 deletions(-) create mode 100644 bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolBar.java create mode 100644 bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolItemBuilder.java diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolBar.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolBar.java new file mode 100644 index 00000000000..959aa66f984 --- /dev/null +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolBar.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2024 Vector Informatik GmbH and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Vector Informatik GmbH - initial API and implementation + *******************************************************************************/ +package org.eclipse.ui.texteditor; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; + +import org.eclipse.jface.layout.GridLayoutFactory; + +/** + * This class wraps the ToolBar to make it possible to use tabulator-keys to + * navigate between the buttons of a ToolBar. For this, we simulate a singular + * ToolBar by putting each ToolItem into it's own ToolBar and composing them + * into a Composite. Since the "Enter" keypress could not previously trigger + * activation behavior, we listen for it manually and send according events if + * necessary. + */ +class AccessibleToolBar extends Composite { + + private List toolBars = new ArrayList<>(); + + public AccessibleToolBar(Composite parent) { + super(parent, SWT.NONE); + GridLayoutFactory.fillDefaults().numColumns(0).spacing(0, 0).margins(0, 0).applyTo(this); + } + + /** + * Creates a ToolItem handled by this ToolBar and returns it. Will add a + * KeyListener which will handle presses of "Enter". + * + * @param styleBits the StyleBits to apply to the created ToolItem + * @return a newly created ToolItem + */ + public ToolItem createToolItem(int styleBits) { + ToolBar parent = new ToolBar(this, SWT.FLAT | SWT.HORIZONTAL); + ToolItem toolItem = new ToolItem(parent, styleBits); + + addToolItemTraverseListener(parent, toolItem); + + ((GridLayout) getLayout()).numColumns++; + + toolBars.add(parent); + return toolItem; + } + + private void addToolItemTraverseListener(ToolBar parent, ToolItem result) { + parent.addTraverseListener(e -> { + if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) { + result.setSelection(!result.getSelection()); + e.doit = false; + } + }); + } + + @Override + public void setBackground(Color color) { + super.setBackground(color); + for (ToolBar bar : toolBars) { // some ToolItems (like SWT.SEPARATOR) don't easily inherit the color from the + // parent control. + bar.setBackground(color); + } + } + +} diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolItemBuilder.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolItemBuilder.java new file mode 100644 index 00000000000..45e3c40ef72 --- /dev/null +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AccessibleToolItemBuilder.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2024 Vector Informatik GmbH and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Vector Informatik GmbH - initial API and implementation + *******************************************************************************/ +package org.eclipse.ui.texteditor; + +import java.util.Objects; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.ToolItem; + +/** + * Builder for ToolItems for {@link AccessibleToolBar}. + */ +class AccessibleToolItemBuilder { + private final AccessibleToolBar accessibleToolBar; + private int styleBits = SWT.NONE; + private Image image; + private String toolTipText; + private SelectionListener selectionListener; + + public AccessibleToolItemBuilder(AccessibleToolBar accessibleToolBar) { + this.accessibleToolBar = Objects.requireNonNull(accessibleToolBar); + } + + public AccessibleToolItemBuilder withStyleBits(int newStyleBits) { + this.styleBits = newStyleBits; + return this; + } + + public AccessibleToolItemBuilder withImage(Image newImage) { + this.image = newImage; + return this; + } + + public AccessibleToolItemBuilder withToolTipText(String newToolTipText) { + this.toolTipText = newToolTipText; + return this; + } + + public AccessibleToolItemBuilder withSelectionListener(SelectionListener newSelectionListener) { + this.selectionListener = newSelectionListener; + return this; + } + + public ToolItem build() { + ToolItem toolItem = accessibleToolBar.createToolItem(styleBits); + + if (image != null) { + toolItem.setImage(image); + } + + if (toolTipText != null) { + toolItem.setToolTipText(toolTipText); + } + + if (selectionListener != null) { + toolItem.addSelectionListener(selectionListener); + } + + return toolItem; + } +} diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java index 95bf517fcca..42975f9a5eb 100644 --- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java +++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceOverlay.java @@ -42,7 +42,6 @@ import org.eclipse.swt.widgets.Scrollable; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.Widget; @@ -89,7 +88,7 @@ class FindReplaceOverlay extends Dialog { private Composite searchContainer; private Composite searchBarContainer; private Text searchBar; - private ToolBar searchTools; + private AccessibleToolBar searchTools; private ToolItem searchInSelectionButton; private ToolItem wholeWordSearchButton; @@ -102,7 +101,7 @@ class FindReplaceOverlay extends Dialog { private Composite replaceContainer; private Composite replaceBarContainer; private Text replaceBar; - private ToolBar replaceTools; + private AccessibleToolBar replaceTools; private ToolItem replaceButton; private ToolItem replaceAllButton; @@ -432,7 +431,7 @@ private void retrieveBackgroundColor() { } private void createSearchTools() { - searchTools = new ToolBar(searchContainer, SWT.HORIZONTAL); + searchTools = new AccessibleToolBar(searchContainer); GridDataFactory.fillDefaults().grab(false, true).align(GridData.CENTER, GridData.END).applyTo(searchTools); createWholeWordsButton(); @@ -441,104 +440,106 @@ private void createSearchTools() { createAreaSearchButton(); @SuppressWarnings("unused") - ToolItem separator = new ToolItem(searchTools, SWT.SEPARATOR); - - searchUpButton = new ToolItem(searchTools, SWT.PUSH); - searchUpButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_PREV)); - searchUpButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_upSearchButton_toolTip); - searchUpButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - performSearch(false); - evaluateFindReplaceStatus(); - })); - searchDownButton = new ToolItem(searchTools, SWT.PUSH); + ToolItem separator = searchTools.createToolItem(SWT.SEPARATOR); + + searchUpButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.PUSH) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_PREV)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_upSearchButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + performSearch(false); + evaluateFindReplaceStatus(); + })).build(); + searchDownButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.PUSH) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_NEXT)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_downSearchButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + performSearch(true); + evaluateFindReplaceStatus(); + })).build(); searchDownButton.setSelection(true); // by default, search down - searchDownButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_NEXT)); - searchDownButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_downSearchButton_toolTip); - searchDownButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - performSearch(true); - evaluateFindReplaceStatus(); - })); - searchAllButton = new ToolItem(searchTools, SWT.PUSH); - searchAllButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_SEARCH_ALL)); - searchAllButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_searchAllButton_toolTip); - searchAllButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - performSelectAll(); - evaluateFindReplaceStatus(); - })); + + searchAllButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.PUSH) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_SEARCH_ALL)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_searchAllButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + performSelectAll(); + evaluateFindReplaceStatus(); + })).build(); } private void createAreaSearchButton() { - searchInSelectionButton = new ToolItem(searchTools, SWT.CHECK); - searchInSelectionButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_SEARCH_IN_AREA)); - searchInSelectionButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_searchInSelectionButton_toolTip); + searchInSelectionButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.CHECK) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_SEARCH_IN_AREA)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_searchInSelectionButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + activateInFindReplacerIf(SearchOptions.GLOBAL, !searchInSelectionButton.getSelection()); + updateIncrementalSearch(); + })).build(); searchInSelectionButton.setSelection(findReplaceLogic.isActive(SearchOptions.WHOLE_WORD)); - searchInSelectionButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - activateInFindReplacerIf(SearchOptions.GLOBAL, !searchInSelectionButton.getSelection()); - updateIncrementalSearch(); - })); } private void createRegexSearchButton() { - regexSearchButton = new ToolItem(searchTools, SWT.CHECK); - regexSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_REGEX)); - regexSearchButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_regexSearchButton_toolTip); + regexSearchButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.CHECK) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_FIND_REGEX)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_regexSearchButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + activateInFindReplacerIf(SearchOptions.REGEX, ((ToolItem) e.widget).getSelection()); + wholeWordSearchButton.setEnabled(!findReplaceLogic.isActive(SearchOptions.REGEX)); + updateIncrementalSearch(); + })).build(); regexSearchButton.setSelection(findReplaceLogic.isActive(SearchOptions.REGEX)); - regexSearchButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - activateInFindReplacerIf(SearchOptions.REGEX, ((ToolItem) e.widget).getSelection()); - wholeWordSearchButton.setEnabled(!findReplaceLogic.isActive(SearchOptions.REGEX)); - updateIncrementalSearch(); - })); } private void createCaseSensitiveButton() { - caseSensitiveSearchButton = new ToolItem(searchTools, SWT.CHECK); - caseSensitiveSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_CASE_SENSITIVE)); - caseSensitiveSearchButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_caseSensitiveButton_toolTip); + caseSensitiveSearchButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.CHECK) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_CASE_SENSITIVE)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_caseSensitiveButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + activateInFindReplacerIf(SearchOptions.CASE_SENSITIVE, caseSensitiveSearchButton.getSelection()); + updateIncrementalSearch(); + })).build(); caseSensitiveSearchButton.setSelection(findReplaceLogic.isActive(SearchOptions.CASE_SENSITIVE)); - caseSensitiveSearchButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - activateInFindReplacerIf(SearchOptions.CASE_SENSITIVE, caseSensitiveSearchButton.getSelection()); - updateIncrementalSearch(); - })); } private void createWholeWordsButton() { - wholeWordSearchButton = new ToolItem(searchTools, SWT.CHECK); - wholeWordSearchButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_WHOLE_WORD)); - wholeWordSearchButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_wholeWordsButton_toolTip); + wholeWordSearchButton = new AccessibleToolItemBuilder(searchTools).withStyleBits(SWT.CHECK) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_WHOLE_WORD)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_wholeWordsButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + activateInFindReplacerIf(SearchOptions.WHOLE_WORD, wholeWordSearchButton.getSelection()); + updateIncrementalSearch(); + })).build(); wholeWordSearchButton.setSelection(findReplaceLogic.isActive(SearchOptions.WHOLE_WORD)); - wholeWordSearchButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - activateInFindReplacerIf(SearchOptions.WHOLE_WORD, wholeWordSearchButton.getSelection()); - updateIncrementalSearch(); - })); } private void createReplaceTools() { Color warningColor = JFaceColors.getErrorText(getShell().getDisplay()); - replaceTools = new ToolBar(replaceContainer, SWT.HORIZONTAL); + replaceTools = new AccessibleToolBar(replaceContainer); GridDataFactory.fillDefaults().grab(false, true).align(GridData.CENTER, GridData.END).applyTo(replaceTools); - replaceButton = new ToolItem(replaceTools, SWT.PUSH); - replaceButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_REPLACE)); - replaceButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceButton_toolTip); - replaceButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - if (getFindString().isEmpty()) { - showUserFeedback(warningColor, true); - return; - } - performSingleReplace(); - evaluateFindReplaceStatus(); - })); - replaceAllButton = new ToolItem(replaceTools, SWT.PUSH); - replaceAllButton.setImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_REPLACE_ALL)); - replaceAllButton.setToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceAllButton_toolTip); - replaceAllButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { - if (getFindString().isEmpty()) { - showUserFeedback(warningColor, true); - return; - } - performReplaceAll(); - evaluateFindReplaceStatus(); - })); + replaceButton = new AccessibleToolItemBuilder(replaceTools).withStyleBits(SWT.PUSH) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_REPLACE)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + if (getFindString().isEmpty()) { + showUserFeedback(warningColor, true); + return; + } + performSingleReplace(); + evaluateFindReplaceStatus(); + })).build(); + + replaceAllButton = new AccessibleToolItemBuilder(replaceTools).withStyleBits(SWT.PUSH) + .withImage(FindReplaceOverlayImages.get(FindReplaceOverlayImages.KEY_REPLACE_ALL)) + .withToolTipText(FindReplaceMessages.FindReplaceOverlay_replaceAllButton_toolTip) + .withSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + if (getFindString().isEmpty()) { + showUserFeedback(warningColor, true); + return; + } + performReplaceAll(); + evaluateFindReplaceStatus(); + })).build(); } private void createSearchBar() {