### Eclipse Workspace Patch 1.0 #P org.eclipse.compare Index: compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java,v retrieving revision 1.259 diff -u -r1.259 TextMergeViewer.java --- compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java 15 Apr 2009 11:59:18 -0000 1.259 +++ compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java 21 Apr 2009 12:57:56 -0000 @@ -26,8 +26,10 @@ import java.util.ResourceBundle; import org.eclipse.compare.CompareConfiguration; +import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.CompareNavigator; import org.eclipse.compare.CompareUI; +import org.eclipse.compare.ICompareContainer; import org.eclipse.compare.ICompareNavigator; import org.eclipse.compare.IEditableContentExtension; import org.eclipse.compare.IEncodedStreamContentAccessor; @@ -1909,8 +1911,22 @@ } ); } - - fAncestor= createPart(composite); + + Object input = null; + ICompareContainer container = getCompareConfiguration().getContainer(); + if (container != null) { + IWorkbenchPart part = container.getWorkbenchPart(); + if (part instanceof CompareEditor) { + CompareEditorInput cei = (CompareEditorInput) ((CompareEditor) part).getEditorInput(); + input = cei.getCompareResult(); + } + } + + fAncestorContributor = createLegInfoFor(getMergeContentProvider().getAncestorContent(input), ANCESTOR_CONTRIBUTOR); + if (fAncestorContributor != null) + fAncestor= createPart(composite, fAncestorContributor.getDocumentKey()); + else + fAncestor= createPart(composite, null); setEditable(fAncestor.getSourceViewer(), false); fAncestor.getSourceViewer().getTextWidget().getAccessible().addAccessibleListener(new AccessibleAdapter() { public void getName(AccessibleEvent e) { @@ -1940,7 +1956,11 @@ ); } - fLeft= createPart(composite); + fLeftContributor = createLegInfoFor(getMergeContentProvider().getLeftContent(input), LEFT_CONTRIBUTOR); + if (fLeftContributor != null) + fLeft = createPart(composite, fLeftContributor.getDocumentKey()); + else + fLeft= createPart(composite, null); fLeft.getSourceViewer().getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); fLeft.getSourceViewer().getTextWidget().getAccessible().addAccessibleListener(new AccessibleAdapter() { public void getName(AccessibleEvent e) { @@ -1949,7 +1969,11 @@ }); fLeft.getSourceViewer().addTextPresentationListener(new ChangeHighlighter(fLeft)); - fRight= createPart(composite); + fRightContributor =createLegInfoFor(getMergeContentProvider().getRightContent(input), RIGHT_CONTRIBUTOR); + if (fRightContributor != null) + fRight = createPart(composite, fRightContributor.getDocumentKey()); + else + fRight= createPart(composite, null); fRight.getSourceViewer().getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling); fRight.getSourceViewer().getTextWidget().getAccessible().addAccessibleListener(new AccessibleAdapter() { public void getName(AccessibleEvent e) { @@ -2392,11 +2416,13 @@ * the parent of the viewer's control * @param textOrientation * style constant bit for text orientation + * @param input input for the viewer or null when no input is + * available * @return Default implementation returns an instance of * {@link SourceViewer}. * @since 3.5 */ - protected SourceViewer createSourceViewer(Composite parent, int textOrientation) { + protected SourceViewer createSourceViewer(Composite parent, int textOrientation, IEditorInput input) { return new SourceViewer(parent, new CompositeRuler(), textOrientation | SWT.H_SCROLL | SWT.V_SCROLL); } @@ -2440,9 +2466,9 @@ /* * Creates and initializes a text part. */ - private MergeSourceViewer createPart(Composite parent) { + private MergeSourceViewer createPart(Composite parent, IEditorInput input) { final MergeSourceViewer viewer = new MergeSourceViewer( - createSourceViewer(parent, getDirection()), + createSourceViewer(parent, getDirection(), input), getResourceBundle(), getCompareConfiguration().getContainer()); final StyledText te= viewer.getSourceViewer().getTextWidget(); #P org.eclipse.jdt.ui Index: ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java,v retrieving revision 1.30 diff -u -r1.30 JavaMergeViewer.java --- ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java 15 Apr 2009 08:01:49 -0000 1.30 +++ ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java 21 Apr 2009 12:57:57 -0000 @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.jdt.internal.ui.compare; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -37,9 +36,11 @@ import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.TextViewer; -import org.eclipse.jface.text.source.CompositeRuler; +import org.eclipse.jface.text.source.IOverviewRuler; import org.eclipse.jface.text.source.ISourceViewer; +import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.text.source.SourceViewer; +import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; @@ -51,9 +52,7 @@ import org.eclipse.ui.actions.PartEventAction; import org.eclipse.ui.contexts.IContextService; -import org.eclipse.ui.texteditor.AbstractTextEditor; import org.eclipse.ui.texteditor.ChainedPreferenceStore; -import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.editors.text.EditorsUI; @@ -78,6 +77,7 @@ import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.compare.JavaTokenComparator.ITokenComparatorFactory; import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor; +import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer; import org.eclipse.jdt.internal.ui.text.PreferencesAdapter; @@ -271,13 +271,10 @@ if (editorInput != null) { // when input available, use editor CompilationUnitEditorAdapter editor= (CompilationUnitEditorAdapter)fEditor.get(sourceViewer); - try { - editor.init((IEditorSite)editor.getSite(), editorInput); - editor.createActions(); - configuration= new JavaSourceViewerConfiguration(tools.getColorManager(), fPreferenceStore, editor, getDocumentPartitioning()); - } catch (PartInitException e) { - JavaPlugin.log(e); - } + editor.createActions(); + SourceViewerConfiguration svc= editor.getJavaSourceViewerConfiguration(); + Assert.isTrue(svc instanceof JavaSourceViewerConfiguration); + configuration= (JavaSourceViewerConfiguration)svc; } fSourceViewerConfiguration.put(sourceViewer, configuration); return (JavaSourceViewerConfiguration)fSourceViewerConfiguration.get(sourceViewer); @@ -470,20 +467,27 @@ * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#createSourceViewer(org.eclipse.swt.widgets.Composite, int) * @since 3.5 */ - protected SourceViewer createSourceViewer(Composite parent, int textOrientation) { + protected SourceViewer createSourceViewer(Composite parent, int textOrientation, IEditorInput input) { SourceViewer sourceViewer; - if (getSite() != null) { + if (getSite() != null && input != null) { CompilationUnitEditorAdapter editor= new CompilationUnitEditorAdapter(textOrientation); + try { + editor.init((IEditorSite)editor.getSite(), input); + } catch (PartInitException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } editor.createPartControl(parent); - ISourceViewer iSourceViewer= editor.getViewer(); - Assert.isTrue(iSourceViewer instanceof SourceViewer); - sourceViewer= (SourceViewer)iSourceViewer; + ISourceViewer viewer= editor.getViewer(); + Assert.isTrue(viewer instanceof SourceViewer); + sourceViewer= (SourceViewer)viewer; + if (fEditor == null) fEditor= new HashMap(3); fEditor.put(sourceViewer, editor); } else - sourceViewer= super.createSourceViewer(parent, textOrientation); + sourceViewer= super.createSourceViewer(parent, textOrientation, null); if (fSourceViewer == null) fSourceViewer= new ArrayList(); @@ -532,7 +536,7 @@ super(); fTextOrientation = textOrientation; // TODO: has to be set here - setPreferenceStore(createChainedPreferenceStore(null)); +// setPreferenceStore(createChainedPreferenceStore(null)); } private void setEditable(boolean editable) { fEditable= editable; @@ -551,10 +555,9 @@ } // else do nothing, we will create actions later, when input is available } - public void createPartControl(Composite composite) { - SourceViewer sourceViewer= createJavaSourceViewer(composite, new CompositeRuler(), null, false, fTextOrientation | SWT.H_SCROLL | SWT.V_SCROLL, createChainedPreferenceStore(null)); - setSourceViewer(this, sourceViewer); - getSelectionProvider().addSelectionChangedListener(getSelectionChangedListener()); + protected JavaSourceViewer createJavaSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler, boolean isOverviewRulerVisible, int styles, + IPreferenceStore store) { + return super.createJavaSourceViewer(parent, verticalRuler, overviewRuler, isOverviewRulerVisible, styles|fTextOrientation, store); } protected void doSetInput(IEditorInput input) throws CoreException { super.doSetInput(input); @@ -577,25 +580,9 @@ public void close(boolean save) { getDocumentProvider().disconnect(getEditorInput()); } - } - - // no setter to private field AbstractTextEditor.fSourceViewer - private void setSourceViewer(ITextEditor editor, SourceViewer viewer) { - Field field= null; - try { - field= AbstractTextEditor.class.getDeclaredField("fSourceViewer"); //$NON-NLS-1$ - } catch (SecurityException ex) { - JavaPlugin.log(ex); - } catch (NoSuchFieldException ex) { - JavaPlugin.log(ex); - } - field.setAccessible(true); - try { - field.set(editor, viewer); - } catch (IllegalArgumentException ex) { - JavaPlugin.log(ex); - } catch (IllegalAccessException ex) { - JavaPlugin.log(ex); + protected SourceViewerConfiguration getJavaSourceViewerConfiguration() { + return getSourceViewerConfiguration(); } } + }