diff options
author | lgoubet | 2019-09-04 09:18:59 +0000 |
---|---|---|
committer | lgoubet | 2019-09-04 09:18:59 +0000 |
commit | 057565817412dd193eac16a0c389be9c5474e727 (patch) | |
tree | 396107d8e6667b4a53aa510058b7d385ff52f13a /plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui | |
parent | 6b7ff72076920b9913bcbb6dceded85830ef25a4 (diff) | |
download | org.eclipse.emf.compare-057565817412dd193eac16a0c389be9c5474e727.tar.gz org.eclipse.emf.compare-057565817412dd193eac16a0c389be9c5474e727.tar.xz org.eclipse.emf.compare-057565817412dd193eac16a0c389be9c5474e727.zip |
Make sure the UI won't try to compute the LCS for huge lists
Change-Id: If5c456fb90063919d927edfd9f07012ee5bbb55c
Diffstat (limited to 'plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui')
2 files changed, 6 insertions, 15 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/property/PropertyDescriptorItem.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/property/PropertyDescriptorItem.java index d66cf7479..9a397a597 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/property/PropertyDescriptorItem.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/property/PropertyDescriptorItem.java @@ -31,6 +31,7 @@ import org.eclipse.emf.compare.DifferenceSource; import org.eclipse.emf.compare.Match; import org.eclipse.emf.compare.ide.ui.internal.configuration.EMFCompareConfiguration; import org.eclipse.emf.compare.internal.utils.DiffUtil; +import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants; import org.eclipse.emf.compare.rcp.ui.internal.util.MergeViewerUtil; import org.eclipse.emf.compare.rcp.ui.mergeviewer.IMergeViewer.MergeViewerSide; import org.eclipse.emf.compare.rcp.ui.mergeviewer.item.IMergeViewerItem; @@ -119,7 +120,7 @@ class PropertyDescriptorItem extends PropertyItem { getSide())); } - if (haveDiffs()) { + if (haveDiffs() && listValue.size() < EMFCompareConstants.LIST_SIZE_INSERTION_POINT_THRESHOLD) { createPlaceholders(propertyItems); } } @@ -154,7 +155,7 @@ class PropertyDescriptorItem extends PropertyItem { final int count = size(filter(subList, IMergeViewerItem.IS_INSERTION_POINT)); index = Math.min(insertionIndex + count, propertyItems.size()); } else { - index = 0; + index = 0; } // Create the placeholder and insert it at the appropriate diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/provider/TreeMergeViewerItemContentProvider.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/provider/TreeMergeViewerItemContentProvider.java index 2ddb4b231..ad9de1fbe 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/provider/TreeMergeViewerItemContentProvider.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/provider/TreeMergeViewerItemContentProvider.java @@ -54,6 +54,7 @@ import org.eclipse.emf.compare.ResourceAttachmentChange; import org.eclipse.emf.compare.graph.IGraphView; import org.eclipse.emf.compare.internal.utils.DiffUtil; import org.eclipse.emf.compare.match.impl.NotLoadedFragmentMatch; +import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.item.impl.MergeViewerItem; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.item.impl.ResourceAttachmentChangeMergeViewerItem; import org.eclipse.emf.compare.rcp.ui.internal.util.MergeViewerUtil; @@ -81,17 +82,6 @@ import org.eclipse.emf.edit.provider.ITreeItemContentProvider; public class TreeMergeViewerItemContentProvider implements IMergeViewerItemContentProvider { /** - * If the list on any one of the sides contains more elements than the given threshold, don't try and - * compute the insertion index for differences merging. On the one hand, showing insertion points in lists - * with so many elements wouldn't reallybe human readable, on the other hand, trying to compute insertion - * indices for too large lists will easily result in OutOfMemoryErrors. For example, if the left and right - * sides contain 60000 elements, we'll end up trying to instantiate an array with the following signature: - * "int[60000][60000]" to compute the LCS (see DiffUtils). Such an array would cost 13GB of memory as a - * conservative estimate. - */ - private static final short LIST_SIZE_INSERTION_POINT_THRESHOLD = 10000; - - /** * {@inheritDoc} */ public boolean canHandle(Object object) { @@ -311,8 +301,8 @@ public class TreeMergeViewerItemContentProvider implements IMergeViewerItemConte List<Object> ancestorContent = getChildrenFromContentProvider( getSideValue(parent, MergeViewerSide.ANCESTOR), adapterFactory); - if (sideContent.size() > LIST_SIZE_INSERTION_POINT_THRESHOLD - && oppositeContent.size() > LIST_SIZE_INSERTION_POINT_THRESHOLD) { + if (sideContent.size() > EMFCompareConstants.LIST_SIZE_INSERTION_POINT_THRESHOLD + && oppositeContent.size() > EMFCompareConstants.LIST_SIZE_INSERTION_POINT_THRESHOLD) { return new ArrayList<IMergeViewerItem>(values); } |