Skip to content

Commit 99354b9

Browse files
committed
Merge branch 'issue2538b' of https://github.com/DaveCarpeneto/eclipse.platform.ui into issue2538b
2 parents 996f5bf + 7e3de98 commit 99354b9

File tree

68 files changed

+805
-335
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+805
-335
lines changed

Jenkinsfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pipeline {
99
}
1010
tools {
1111
maven 'apache-maven-latest'
12-
jdk 'temurin-jdk17-latest'
12+
jdk 'temurin-jdk21-latest'
1313
}
1414
stages {
1515
stage('Build') {

bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/helpers/SWTStyleHelpers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ public static String getSWTWidgetStyleAsString(int style, String separator) {
756756
}
757757
} catch (Exception e) {
758758
}
759-
return swtStyles.length() == 0 ? "" : swtStyles.toString();
759+
return swtStyles.length() == 0 ? "" : swtStyles.toString().intern();
760760
}
761761

762762
/**

bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/SurroundWithBracketsStrategy.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public SurroundWithBracketsStrategy(ISourceViewer sourceViewer) {
3636

3737
@Override
3838
public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
39-
if (bracketsMap.containsKey(command.text)) {
39+
if (command.text != null && bracketsMap.containsKey(command.text)) {
4040
try {
41-
ITextSelection selection= (ITextSelection) sourceViewer.getSelectionProvider().getSelection();
41+
ITextSelection selection= command.fSelection;
4242
if (selection != null && selection.getLength() > 0) {
4343
String selectedText= document.get(selection.getOffset(), selection.getLength());
4444
String closingBracket= bracketsMap.get(command.text);
@@ -51,12 +51,7 @@ public void customizeDocumentCommand(IDocument document, DocumentCommand command
5151
command.shiftsCaret= false;
5252

5353
// Run this in a UI thread asynchronously to ensure the selection is updated correctly
54-
sourceViewer.getTextWidget().getDisplay().asyncExec(new Runnable() {
55-
@Override
56-
public void run() {
57-
sourceViewer.setSelectedRange(command.offset + 1, selectedText.length());
58-
}
59-
});
54+
sourceViewer.getTextWidget().getDisplay().asyncExec(() -> sourceViewer.setSelectedRange(command.offset + 1, selectedText.length()));
6055
}
6156
} catch (BadLocationException e) {
6257
SWT.error(SWT.ERROR_INVALID_ARGUMENT);

bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package org.eclipse.jface.text.source;
2020

2121
import java.util.ArrayList;
22-
import java.util.Arrays;
2322
import java.util.Iterator;
2423
import java.util.List;
2524
import java.util.Stack;
@@ -59,7 +58,6 @@
5958
import org.eclipse.jface.text.ITextViewerLifecycle;
6059
import org.eclipse.jface.text.Position;
6160
import org.eclipse.jface.text.Region;
62-
import org.eclipse.jface.text.SurroundWithBracketsStrategy;
6361
import org.eclipse.jface.text.TextViewer;
6462
import org.eclipse.jface.text.codemining.ICodeMiningProvider;
6563
import org.eclipse.jface.text.contentassist.IContentAssistant;
@@ -546,12 +544,7 @@ public void configure(SourceViewerConfiguration configuration) {
546544
String[] types= configuration.getConfiguredContentTypes(this);
547545
for (String t : types) {
548546

549-
IAutoEditStrategy[] autoEditStrategies= configuration.getAutoEditStrategies(this, t);
550-
List<IAutoEditStrategy> autoEditStrategiesList= new ArrayList<>(Arrays.asList(autoEditStrategies));
551-
autoEditStrategiesList.add(new SurroundWithBracketsStrategy(this));
552-
IAutoEditStrategy[] newStrategies= autoEditStrategiesList.toArray(new IAutoEditStrategy[0]);
553-
554-
doSetAutoEditStrategies(newStrategies, t);
547+
doSetAutoEditStrategies(configuration.getAutoEditStrategies(this, t), t);
555548
setTextDoubleClickStrategy(configuration.getDoubleClickStrategy(this, t), t);
556549

557550
int[] stateMasks= configuration.getConfiguredTextHoverStateMasks(this, t);

bundles/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewerConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.eclipse.jface.text.ITextHover;
3131
import org.eclipse.jface.text.ITextViewerExtension2;
3232
import org.eclipse.jface.text.IUndoManager;
33+
import org.eclipse.jface.text.SurroundWithBracketsStrategy;
3334
import org.eclipse.jface.text.TextViewerUndoManager;
3435
import org.eclipse.jface.text.codemining.ICodeMiningProvider;
3536
import org.eclipse.jface.text.contentassist.IContentAssistant;
@@ -190,7 +191,7 @@ public org.eclipse.jface.text.IAutoIndentStrategy getAutoIndentStrategy(ISourceV
190191
* @since 3.1
191192
*/
192193
public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
193-
return new IAutoEditStrategy[] { getAutoIndentStrategy(sourceViewer, contentType) };
194+
return new IAutoEditStrategy[] { getAutoIndentStrategy(sourceViewer, contentType), new SurroundWithBracketsStrategy(sourceViewer) };
194195
}
195196

196197
/**

bundles/org.eclipse.jface/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.jface;singleton:=true
5-
Bundle-Version: 3.35.200.qualifier
5+
Bundle-Version: 3.36.0.qualifier
66
Bundle-Vendor: %providerName
77
Bundle-Localization: plugin
88
Export-Package: org.eclipse.jface,

bundles/org.eclipse.jface/src/org/eclipse/jface/resource/ImageDescriptor.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2000, 2023 IBM Corporation and others.
2+
* Copyright (c) 2000, 2024 IBM Corporation and others.
33
*
44
* This program and the accompanying materials
55
* are made available under the terms of the Eclipse Public License 2.0
@@ -205,25 +205,47 @@ public static ImageDescriptor createFromURLSupplier(boolean useMissingImage, Sup
205205
}
206206

207207
/**
208-
* Convenient method to create an ImageDescriptor from an URI
208+
* Convenient method to create an ImageDescriptor from an URI.
209209
*
210-
* Delegates to ImageDescriptor createFromURL
210+
* Delegates to {@link ImageDescriptor#createFromURL(URL)}. <em>Important</em>
211+
* This method should only be used when it's guaranteed that the given
212+
* {@link URI} is also a valid {@link URL}, in order to avoid the
213+
* {@link MalformedURLException} thrown by {@link URI#toURL()}.
214+
*
215+
* If the URI is {@code null} or not a valid {@link URL}, then an image from
216+
* {@link #getMissingImageDescriptor()} will be returned.
211217
*
212218
* @param uriIconPath The URI of the image file.
213219
* @return a new image descriptor
214220
*
215-
* @since 3.19
221+
* @since 3.36
216222
*/
217-
public ImageDescriptor imageDescriptorFromURI(URI uriIconPath) {
223+
public static ImageDescriptor createFromURI(URI uriIconPath) {
218224
try {
219-
return ImageDescriptor.createFromURL(new URL(uriIconPath.toString()));
220-
} catch (MalformedURLException | NullPointerException e) {
225+
return ImageDescriptor.createFromURL(uriIconPath != null ? uriIconPath.toURL() : null);
226+
} catch (MalformedURLException e) {
221227
// return the missing image placeholder to indicate
222228
// the incorrect call without interfering with the user flow
223229
return getMissingImageDescriptor();
224230
}
225231
}
226232

233+
/**
234+
* Convenient method to create an ImageDescriptor from an URI
235+
*
236+
* Delegates to ImageDescriptor createFromURL
237+
*
238+
* @param uriIconPath The URI of the image file.
239+
* @return a new image descriptor
240+
*
241+
* @since 3.19
242+
* @deprecated Use {@link #createFromURI(URI)} instead.
243+
*/
244+
@Deprecated(since = "3.36", forRemoval = true)
245+
public ImageDescriptor imageDescriptorFromURI(URI uriIconPath) {
246+
return createFromURI(uriIconPath);
247+
}
248+
227249
@Override
228250
public Object createResource(Device device) throws DeviceResourceException {
229251
Image result = createImage(false, device);

bundles/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/PreviewWizardPage.java

Lines changed: 126 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*******************************************************************************/
1414
package org.eclipse.ltk.internal.ui.refactoring;
1515

16+
import java.lang.reflect.InvocationTargetException;
1617
import java.text.Collator;
1718
import java.text.MessageFormat;
1819
import java.util.ArrayList;
@@ -29,6 +30,8 @@
2930
import org.eclipse.swt.accessibility.AccessibleEvent;
3031
import org.eclipse.swt.custom.BusyIndicator;
3132
import org.eclipse.swt.custom.SashForm;
33+
import org.eclipse.swt.events.MouseEvent;
34+
import org.eclipse.swt.events.MouseListener;
3235
import org.eclipse.swt.graphics.Point;
3336
import org.eclipse.swt.graphics.Rectangle;
3437
import org.eclipse.swt.layout.GridData;
@@ -43,31 +46,45 @@
4346
import org.eclipse.swt.widgets.ToolItem;
4447

4548
import org.eclipse.core.runtime.CoreException;
49+
import org.eclipse.core.runtime.IAdaptable;
4650

4751
import org.eclipse.jface.action.Action;
4852
import org.eclipse.jface.action.ActionContributionItem;
4953
import org.eclipse.jface.action.IAction;
5054
import org.eclipse.jface.action.IMenuCreator;
55+
import org.eclipse.jface.action.MenuManager;
5156
import org.eclipse.jface.action.Separator;
5257
import org.eclipse.jface.action.ToolBarManager;
5358
import org.eclipse.jface.dialogs.Dialog;
5459
import org.eclipse.jface.dialogs.IDialogConstants;
5560
import org.eclipse.jface.dialogs.IDialogSettings;
5661
import org.eclipse.jface.dialogs.MessageDialog;
62+
import org.eclipse.jface.operation.IRunnableContext;
63+
import org.eclipse.jface.operation.IRunnableWithProgress;
5764
import org.eclipse.jface.viewers.CheckStateChangedEvent;
5865
import org.eclipse.jface.viewers.ICheckStateListener;
5966
import org.eclipse.jface.viewers.ILabelProvider;
6067
import org.eclipse.jface.viewers.ISelectionChangedListener;
68+
import org.eclipse.jface.viewers.ISelectionProvider;
6169
import org.eclipse.jface.viewers.IStructuredSelection;
6270
import org.eclipse.jface.viewers.ITreeContentProvider;
6371
import org.eclipse.jface.viewers.StructuredSelection;
6472
import org.eclipse.jface.viewers.Viewer;
6573
import org.eclipse.jface.viewers.ViewerComparator;
74+
import org.eclipse.jface.wizard.IWizardContainer;
6675

76+
import org.eclipse.ui.IActionBars;
77+
import org.eclipse.ui.IWorkbenchPart;
6778
import org.eclipse.ui.PlatformUI;
6879
import org.eclipse.ui.part.PageBook;
80+
import org.eclipse.ui.services.IServiceLocator;
6981

82+
import org.eclipse.compare.CompareConfiguration;
7083
import org.eclipse.compare.CompareUI;
84+
import org.eclipse.compare.ICompareContainer;
85+
import org.eclipse.compare.ICompareNavigator;
86+
import org.eclipse.compare.structuremergeviewer.ICompareInput;
87+
import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
7188

7289
import org.eclipse.ltk.core.refactoring.Change;
7390
import org.eclipse.ltk.core.refactoring.CompositeChange;
@@ -461,7 +478,7 @@ public void getName(AccessibleEvent e) {
461478
fTreeViewer.setContentProvider(createTreeContentProvider());
462479
fTreeViewer.setLabelProvider(createTreeLabelProvider());
463480
fTreeViewer.setComparator(createTreeComparator());
464-
fTreeViewer.addSelectionChangedListener(createSelectionChangedListener());
481+
fTreeViewer.addSelectionChangedListener(createSelectionChangedListener(fTreeViewer));
465482
fTreeViewer.addCheckStateListener(createCheckStateListener());
466483
fTreeViewerPane.setContent(fTreeViewer.getControl());
467484
fTreeViewer.getControl().getAccessible().addAccessibleListener(new AccessibleAdapter() {
@@ -596,14 +613,47 @@ private boolean isChild(PreviewNode element, PreviewNode child) {
596613
};
597614
}
598615

599-
private ISelectionChangedListener createSelectionChangedListener() {
616+
private ISelectionChangedListener createSelectionChangedListener(ChangeElementTreeViewer treeViewer) {
617+
Runnable[] runOnMouseUp=new Runnable[] {null};
618+
boolean[] mouseDownPressed = new boolean[] {false};
619+
treeViewer.getTree().addMouseListener(new MouseListener() {
620+
621+
@Override
622+
public void mouseUp(MouseEvent e) {
623+
mouseDownPressed[0] = false;
624+
if (runOnMouseUp[0] != null) {
625+
runOnMouseUp[0].run();
626+
runOnMouseUp[0] = null;
627+
}
628+
}
629+
630+
@Override
631+
public void mouseDown(MouseEvent e) {
632+
mouseDownPressed[0] = true;
633+
}
634+
635+
@Override
636+
public void mouseDoubleClick(MouseEvent e) {
637+
}
638+
});
600639
return event -> {
601640
IStructuredSelection sel= (IStructuredSelection) event.getSelection();
602641
if (sel.size() == 1) {
603642
PreviewNode newSelection= (PreviewNode)sel.getFirstElement();
604643
if (newSelection != fCurrentSelection) {
605644
fCurrentSelection= newSelection;
606-
showPreview(newSelection);
645+
Runnable r = new Runnable() {
646+
647+
@Override
648+
public void run() {
649+
showPreview(newSelection);
650+
}
651+
};
652+
if (mouseDownPressed[0]) {
653+
runOnMouseUp[0] = r;
654+
}else {
655+
r.run();
656+
}
607657
}
608658
} else {
609659
showPreview(null);
@@ -622,6 +672,13 @@ private void showPreview(PreviewNode element) {
622672
if (descriptor != null) {
623673
newViewer= descriptor.createViewer();
624674
newViewer.createControl(fPreviewContainer);
675+
IWizardContainer container = getContainer();
676+
if (container != null) {
677+
if (newViewer.getControl() instanceof IAdaptable adaptable) {
678+
CompareConfiguration config = adaptable.getAdapter(CompareConfiguration.class);
679+
config.setContainer(new WizardCompareContainer(container));
680+
}
681+
}
625682
} else {
626683
newViewer= fNullPreviewer;
627684
}
@@ -761,4 +818,70 @@ private void setHideDerived(boolean hide) {
761818
public Change getChange() {
762819
return fChange;
763820
}
821+
822+
private static final class WizardCompareContainer implements ICompareContainer {
823+
824+
private IRunnableContext context;
825+
826+
public WizardCompareContainer(IRunnableContext context) {
827+
this.context=context;
828+
}
829+
830+
@Override
831+
public void setStatusMessage(String message) {
832+
}
833+
834+
@Override
835+
public void addCompareInputChangeListener(ICompareInput input,
836+
ICompareInputChangeListener listener) {
837+
input.addCompareInputChangeListener(listener);
838+
}
839+
840+
@Override
841+
public void removeCompareInputChangeListener(ICompareInput input,
842+
ICompareInputChangeListener listener) {
843+
input.removeCompareInputChangeListener(listener);
844+
}
845+
846+
@Override
847+
public void registerContextMenu(MenuManager menu,
848+
ISelectionProvider selectionProvider) {
849+
}
850+
851+
@Override
852+
public IServiceLocator getServiceLocator() {
853+
return null;
854+
}
855+
856+
@Override
857+
public IActionBars getActionBars() {
858+
return null;
859+
}
860+
861+
@Override
862+
public void run(boolean fork, boolean cancelable,
863+
IRunnableWithProgress runnable)
864+
throws InvocationTargetException, InterruptedException {
865+
context.run(fork, cancelable, runnable);
866+
}
867+
868+
@Override
869+
public ICompareNavigator getNavigator() {
870+
return null;
871+
}
872+
873+
@Override
874+
public synchronized void runAsynchronously(IRunnableWithProgress runnable) {
875+
try {
876+
context.run(true, false, runnable);
877+
} catch (InvocationTargetException | InterruptedException e) {
878+
RefactoringUIPlugin.log(e);
879+
}
880+
}
881+
882+
@Override
883+
public IWorkbenchPart getWorkbenchPart() {
884+
return null;
885+
}
886+
}
764887
}

bundles/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/TextEditChangePreviewViewer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ public void setText(String text) {
118118
current.dispose();
119119
}
120120
}
121+
@SuppressWarnings("unchecked")
122+
@Override
123+
public <T> T getAdapter(Class<T> adapter) {
124+
if (CompareConfiguration.class.equals(adapter)) {
125+
return (T) fCompareConfiguration;
126+
}
127+
return super.getAdapter(adapter);
128+
}
121129
}
122130

123131
private static class CompareElement implements ITypedElement, IEncodedStreamContentAccessor, IResourceProvider {

0 commit comments

Comments
 (0)