View | Details | Raw Unified | Return to bug 307280 | Differences between
and this patch

Collapse All | Expand All

(-)compare/org/eclipse/compare/internal/CompareContentViewerSwitchingPane.java (-2 / +21 lines)
Lines 16-23 Link Here
16
16
17
import org.eclipse.compare.CompareConfiguration;
17
import org.eclipse.compare.CompareConfiguration;
18
import org.eclipse.compare.CompareEditorInput;
18
import org.eclipse.compare.CompareEditorInput;
19
import org.eclipse.compare.CompareUI;
19
import org.eclipse.compare.CompareViewerSwitchingPane;
20
import org.eclipse.compare.CompareViewerSwitchingPane;
20
import org.eclipse.compare.Splitter;
21
import org.eclipse.compare.Splitter;
22
import org.eclipse.compare.internal.core.LCS;
21
import org.eclipse.compare.structuremergeviewer.ICompareInput;
23
import org.eclipse.compare.structuremergeviewer.ICompareInput;
22
import org.eclipse.jface.viewers.Viewer;
24
import org.eclipse.jface.viewers.Viewer;
23
import org.eclipse.osgi.util.NLS;
25
import org.eclipse.osgi.util.NLS;
Lines 37-48 Link Here
37
import org.eclipse.swt.graphics.Point;
39
import org.eclipse.swt.graphics.Point;
38
import org.eclipse.swt.graphics.Rectangle;
40
import org.eclipse.swt.graphics.Rectangle;
39
import org.eclipse.swt.layout.RowLayout;
41
import org.eclipse.swt.layout.RowLayout;
42
import org.eclipse.swt.widgets.Button;
40
import org.eclipse.swt.widgets.Composite;
43
import org.eclipse.swt.widgets.Composite;
41
import org.eclipse.swt.widgets.Control;
44
import org.eclipse.swt.widgets.Control;
42
import org.eclipse.swt.widgets.Menu;
45
import org.eclipse.swt.widgets.Menu;
43
import org.eclipse.swt.widgets.MenuItem;
46
import org.eclipse.swt.widgets.MenuItem;
44
import org.eclipse.swt.widgets.ToolBar;
47
import org.eclipse.swt.widgets.ToolBar;
45
import org.eclipse.swt.widgets.ToolItem;
48
import org.eclipse.swt.widgets.ToolItem;
49
import org.eclipse.ui.IEditorPart;
50
import org.eclipse.ui.IReusableEditor;
46
import org.eclipse.ui.PlatformUI;
51
import org.eclipse.ui.PlatformUI;
47
52
48
public class CompareContentViewerSwitchingPane extends
53
public class CompareContentViewerSwitchingPane extends
Lines 56-62 Link Here
56
	private ViewerDescriptor fSelectedViewerDescriptor;
61
	private ViewerDescriptor fSelectedViewerDescriptor;
57
62
58
	private ToolBar toolBar;
63
	private ToolBar toolBar;
59
	private CLabel clOptimized;
64
	private Button clOptimized;
60
65
61
	private boolean menuShowing;
66
	private boolean menuShowing;
62
67
Lines 129-135 Link Here
129
			}
134
			}
130
		});
135
		});
131
136
132
		clOptimized = new CLabel(composite, SWT.NONE);
137
		clOptimized = new Button(composite, SWT.NONE);
133
		clOptimized
138
		clOptimized
134
				.setText(CompareMessages.CompareContentViewerSwitchingPane_optimized);
139
				.setText(CompareMessages.CompareContentViewerSwitchingPane_optimized);
135
		clOptimized
140
		clOptimized
Lines 145-150 Link Here
145
				}
150
				}
146
			}
151
			}
147
		});
152
		});
153
		clOptimized.addSelectionListener(new SelectionListener() {
154
			public void widgetSelected(SelectionEvent e) {
155
				LCS.cap = false;
156
				IEditorPart activeEditor = fCompareEditorInput.getCompareConfiguration().getContainer().getWorkbenchPart().getSite().getPage().getActiveEditor();
157
				if (activeEditor instanceof IReusableEditor) {
158
					IReusableEditor reusableEditor = (IReusableEditor) activeEditor;
159
					CompareUI.reuseCompareEditor(fCompareEditorInput, reusableEditor);
160
				}
161
				LCS.cap = true;
162
			}
163
			
164
			public void widgetDefaultSelected(SelectionEvent e) {
165
			}
166
		});
148
167
149
		return composite;
168
		return composite;
150
	}
169
	}
(-)compare/org/eclipse/compare/internal/merge/DocumentMerger.java (-5 / +25 lines)
Lines 11-27 Link Here
11
package org.eclipse.compare.internal.merge;
11
package org.eclipse.compare.internal.merge;
12
12
13
import java.lang.reflect.InvocationTargetException;
13
import java.lang.reflect.InvocationTargetException;
14
import java.util.*;
14
import java.util.ArrayList;
15
import java.util.Iterator;
16
import java.util.List;
15
17
16
import org.eclipse.compare.CompareConfiguration;
18
import org.eclipse.compare.CompareConfiguration;
17
import org.eclipse.compare.contentmergeviewer.ITokenComparator;
19
import org.eclipse.compare.contentmergeviewer.ITokenComparator;
18
import org.eclipse.compare.internal.*;
20
import org.eclipse.compare.internal.CompareContentViewerSwitchingPane;
21
import org.eclipse.compare.internal.CompareMessages;
22
import org.eclipse.compare.internal.CompareUIPlugin;
23
import org.eclipse.compare.internal.DocLineComparator;
24
import org.eclipse.compare.internal.MergeViewerContentProvider;
25
import org.eclipse.compare.internal.Utilities;
19
import org.eclipse.compare.internal.core.LCS;
26
import org.eclipse.compare.internal.core.LCS;
20
import org.eclipse.compare.rangedifferencer.*;
27
import org.eclipse.compare.rangedifferencer.IRangeComparator;
28
import org.eclipse.compare.rangedifferencer.RangeDifference;
29
import org.eclipse.compare.rangedifferencer.RangeDifferencer;
21
import org.eclipse.compare.structuremergeviewer.Differencer;
30
import org.eclipse.compare.structuremergeviewer.Differencer;
22
import org.eclipse.core.runtime.*;
31
import org.eclipse.core.runtime.CoreException;
32
import org.eclipse.core.runtime.IProgressMonitor;
33
import org.eclipse.core.runtime.IStatus;
34
import org.eclipse.core.runtime.Status;
23
import org.eclipse.jface.operation.IRunnableWithProgress;
35
import org.eclipse.jface.operation.IRunnableWithProgress;
24
import org.eclipse.jface.text.*;
36
import org.eclipse.jface.text.BadLocationException;
37
import org.eclipse.jface.text.BadPositionCategoryException;
38
import org.eclipse.jface.text.IDocument;
39
import org.eclipse.jface.text.IRegion;
40
import org.eclipse.jface.text.Position;
41
import org.eclipse.jface.text.Region;
42
import org.eclipse.jface.text.TextUtilities;
25
import org.eclipse.swt.graphics.Image;
43
import org.eclipse.swt.graphics.Image;
26
import org.eclipse.swt.graphics.Point;
44
import org.eclipse.swt.graphics.Point;
27
import org.eclipse.ui.PlatformUI;
45
import org.eclipse.ui.PlatformUI;
Lines 532-537 Link Here
532
550
533
	private boolean isCapped(DocLineComparator ancestor,
551
	private boolean isCapped(DocLineComparator ancestor,
534
			DocLineComparator left, DocLineComparator right) {
552
			DocLineComparator left, DocLineComparator right) {
553
		if (!LCS.cap)
554
			return false;
535
		int aLength = ancestor == null? 0 : ancestor.getRangeCount();
555
		int aLength = ancestor == null? 0 : ancestor.getRangeCount();
536
		int lLength = left.getRangeCount();
556
		int lLength = left.getRangeCount();
537
		int rLength = right.getRangeCount();
557
		int rLength = right.getRangeCount();
(-)src/org/eclipse/compare/internal/core/LCS.java (-1 / +3 lines)
Lines 28-33 Link Here
28
	
28
	
29
	private int length;
29
	private int length;
30
30
31
	public static boolean cap = true;
32
31
	/**
33
	/**
32
	 * Myers' algorithm for longest common subsequence. O((M + N)D) worst case
34
	 * Myers' algorithm for longest common subsequence. O((M + N)D) worst case
33
	 * time, O(M + N + D^2) expected time, O(M + N) space
35
	 * time, O(M + N + D^2) expected time, O(M + N) space
Lines 52-58 Link Here
52
		}
54
		}
53
55
54
		this.max_differences = (length1 + length2 + 1) / 2; // ceil((N+M)/2)
56
		this.max_differences = (length1 + length2 + 1) / 2; // ceil((N+M)/2)
55
		if ((double) length1 * (double) length2 > TOO_LONG) {
57
		if (cap  && (double) length1 * (double) length2 > TOO_LONG) {
56
			// limit complexity to D^POW_LIMIT for long sequences
58
			// limit complexity to D^POW_LIMIT for long sequences
57
			this.max_differences = (int) Math.pow(this.max_differences, POW_LIMIT - 1.0);
59
			this.max_differences = (int) Math.pow(this.max_differences, POW_LIMIT - 1.0);
58
		}
60
		}

Return to bug 307280