Index: ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java,v
retrieving revision 1.277
diff -u -r1.277 CompilationUnitEditor.java
--- ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java 2 May 2005 21:35:40 -0000 1.277
+++ ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java 28 May 2005 10:21:43 -0000
@@ -1146,7 +1146,7 @@
* The remembered selection.
* @since 3.0
*/
- private RememberedSelection fRememberedSelection= new RememberedSelection();
+ private RememberedSelection fRememberedSelection;
/** The bracket inserter. */
private BracketInserter fBracketInserter= new BracketInserter();
@@ -1875,6 +1875,8 @@
* @see AbstractTextEditor#rememberSelection()
*/
protected void rememberSelection() {
+ if (fRememberedSelection == null)
+ fRememberedSelection= new RememberedSelection();
fRememberedSelection.remember();
}
@@ -1882,7 +1884,10 @@
* @see AbstractTextEditor#restoreSelection()
*/
protected void restoreSelection() {
- fRememberedSelection.restore();
+ if (fRememberedSelection != null)
+ fRememberedSelection.restore();
+ else
+ super.restoreSelection();
}
/*
Index: ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java,v
retrieving revision 1.61
diff -u -r1.61 EditorUtility.java
--- ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java 19 Apr 2005 12:47:30 -0000 1.61
+++ ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java 28 May 2005 10:21:44 -0000
@@ -14,8 +14,6 @@
import java.lang.reflect.InvocationTargetException;
-import org.eclipse.swt.SWT;
-
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -25,12 +23,15 @@
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IStorage;
+import org.eclipse.swt.SWT;
+
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.text.Assert;
import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.ui.IEditorDescriptor;
@@ -41,19 +42,22 @@
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.ide.IGotoMarker;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
import org.eclipse.ui.texteditor.TextEditorAction;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.ide.IGotoMarker;
+
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ILocalVariable;
import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.ITypeParameter;
@@ -63,6 +67,8 @@
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.corext.util.Messages;
+import org.eclipse.jdt.ui.PreferenceConstants;
+
import org.eclipse.jdt.internal.ui.JavaPlugin;
/**
@@ -128,11 +134,6 @@
return openInEditor((IFile) inputElement, activate);
IEditorInput input= getEditorInput(inputElement);
- if (input instanceof IFileEditorInput) {
- IFileEditorInput fileInput= (IFileEditorInput) input;
- return openInEditor(fileInput.getFile(), activate);
- }
-
if (input != null)
return openInEditor(input, getEditorID(input, inputElement), activate);
@@ -268,7 +269,12 @@
private static void initializeHighlightRange(IEditorPart editorPart) {
if (editorPart instanceof ITextEditor) {
IAction toggleAction= editorPart.getEditorSite().getActionBars().getGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY);
- if (toggleAction != null && toggleAction.isEnabled() && toggleAction.isChecked()) {
+ boolean enable= toggleAction != null;
+ if (enable && editorPart instanceof JavaEditor)
+ enable= JavaPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SHOW_SEGMENTS);
+ else
+ enable= enable && toggleAction.isEnabled() && toggleAction.isChecked();
+ if (enable) {
if (toggleAction instanceof TextEditorAction) {
// Reset the action
((TextEditorAction)toggleAction).setEditor(null);
@@ -301,17 +307,30 @@
return null;
}
- private static IEditorInput getEditorInput(IJavaElement element) throws JavaModelException {
+ private static IEditorInput getEditorInput(IJavaElement je) throws JavaModelException {
+ final ITextSelection textSelection= getTextSelection(je);
+ IJavaElement element= je;
while (element != null) {
if (element instanceof ICompilationUnit) {
ICompilationUnit unit= JavaModelUtil.toOriginal((ICompilationUnit) element);
IResource resource= unit.getResource();
- if (resource instanceof IFile)
- return new FileEditorInput((IFile) resource);
+ if (resource instanceof IFile) {
+ return new FileEditorInput((IFile) resource) {
+ public Object getAdapter(Class adapter) {
+ if (adapter == ITextSelection.class)
+ return textSelection;
+ return super.getAdapter(adapter);
+ }
+ };
+ }
}
- if (element instanceof IClassFile)
- return new InternalClassFileEditorInput((IClassFile) element);
+ if (element instanceof IClassFile) {
+ if (textSelection != null)
+ return new InternalClassFileEditorInput((IClassFile) element, textSelection);
+ else
+ return new InternalClassFileEditorInput((IClassFile) element);
+ }
element= element.getParent();
}
@@ -319,6 +338,96 @@
return null;
}
+ /**
+ * Returns the text selection for the given Java element.
+ *
+ * @param je the Java element
+ * @return the text selection or null
+ */
+ public static ITextSelection getTextSelection(IJavaElement je) {
+ if (je instanceof ISourceReference)
+ return getTextSelection((ISourceReference)je);
+ return null;
+ }
+
+ /**
+ * Returns the text selection for the given source reference.
+ *
+ * @param reference the source reference
+ * @return the text selection or null
+ */
+ public static ITextSelection getTextSelection(ISourceReference reference) {
+ if (reference == null)
+ return null;
+
+ try {
+ ISourceRange range= null;
+ if (reference instanceof ILocalVariable) {
+ IJavaElement je2= ((ILocalVariable)reference).getParent();
+ if (je2 instanceof ISourceReference)
+ range= ((ISourceReference)je2).getSourceRange();
+ } else
+ range= reference.getSourceRange();
+
+ if (range == null)
+ return null;
+
+ int offset= range.getOffset();
+ int length= range.getLength();
+
+ if (offset < 0 || length < 0)
+ return null;
+
+ offset= -1;
+ length= -1;
+
+ if (reference instanceof IMember) {
+ range= ((IMember) reference).getNameRange();
+ if (range != null) {
+ offset= range.getOffset();
+ length= range.getLength();
+ }
+ } else if (reference instanceof ITypeParameter) {
+ range= ((ITypeParameter) reference).getNameRange();
+ if (range != null) {
+ offset= range.getOffset();
+ length= range.getLength();
+ }
+ } else if (reference instanceof ILocalVariable) {
+ range= ((ILocalVariable)reference).getNameRange();
+ if (range != null) {
+ offset= range.getOffset();
+ length= range.getLength();
+ }
+ } else if (reference instanceof IImportDeclaration) {
+ String name= ((IImportDeclaration) reference).getElementName();
+ if (name != null && name.length() > 0) {
+ String content= reference.getSource();
+ if (content != null) {
+ offset= range.getOffset() + content.indexOf(name);
+ length= name.length();
+ }
+ }
+ } else if (reference instanceof IPackageDeclaration) {
+ String name= ((IPackageDeclaration) reference).getElementName();
+ if (name != null && name.length() > 0) {
+ String content= reference.getSource();
+ if (content != null) {
+ offset= range.getOffset() + content.indexOf(name);
+ length= name.length();
+ }
+ }
+ }
+ if (offset >= 0 && length >= 0)
+ return new TextSelection(offset, length);
+
+ } catch (JavaModelException x) {
+ } catch (IllegalArgumentException x) {
+ }
+
+ return null;
+ }
+
public static IEditorInput getEditorInput(Object input) throws JavaModelException {
if (input instanceof IJavaElement)
return getEditorInput((IJavaElement) input);
Index: ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java,v
retrieving revision 1.9
diff -u -r1.9 InternalClassFileEditorInput.java
--- ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java 19 Apr 2005 12:47:30 -0000 1.9
+++ ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java 28 May 2005 10:21:44 -0000
@@ -12,8 +12,12 @@
package org.eclipse.jdt.internal.ui.javaeditor;
+import org.eclipse.core.runtime.IAdaptable;
+
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.ITextSelection;
+
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistableElement;
@@ -26,13 +30,19 @@
/**
* Class file considered as editor input.
*/
-public class InternalClassFileEditorInput implements IClassFileEditorInput, IPersistableElement {
+public class InternalClassFileEditorInput implements IClassFileEditorInput, IPersistableElement, IAdaptable {
private IClassFile fClassFile;
+ private ITextSelection fInitialSelection;
public InternalClassFileEditorInput(IClassFile classFile) {
fClassFile= classFile;
}
+
+ public InternalClassFileEditorInput(IClassFile classFile, ITextSelection initialSelection) {
+ fClassFile= classFile;
+ fInitialSelection= initialSelection;
+ }
/*
* @see Object#equals(Object)
@@ -112,6 +122,10 @@
public Object getAdapter(Class adapter) {
if (adapter == IClassFile.class)
return fClassFile;
+
+ if (adapter == ITextSelection.class)
+ return fInitialSelection;
+
return fClassFile.getAdapter(adapter);
}
@@ -128,6 +142,7 @@
public String getFactoryId() {
return ClassFileEditorInputFactory.ID;
}
+
}
Index: ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java,v
retrieving revision 1.361
diff -u -r1.361 JavaEditor.java
--- ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java 26 May 2005 15:13:55 -0000 1.361
+++ ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java 28 May 2005 10:21:49 -0000
@@ -166,11 +166,8 @@
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ILocalVariable;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.ASTNode;
@@ -1927,13 +1924,16 @@
if (getSelectionProvider() == null)
return;
+ ITextSelection newSelection= EditorUtility.getTextSelection(reference);
ISelection selection= getSelectionProvider().getSelection();
if (selection instanceof TextSelection) {
- TextSelection textSelection= (TextSelection) selection;
+ TextSelection currentSelection= (TextSelection) selection;
+ if (newSelection != null && newSelection.getOffset() == currentSelection.getOffset() && newSelection.getLength() == currentSelection.getLength())
+ return;
// PR 39995: [navigation] Forward history cleared after going back in navigation history:
// mark only in navigation history if the cursor is being moved (which it isn't if
// this is called from a PostSelectionEvent that should only update the magnet)
- if (moveCursor && (textSelection.getOffset() != 0 || textSelection.getLength() != 0))
+ if (moveCursor && (currentSelection.getOffset() != 0 || currentSelection.getLength() != 0))
markInNavigationHistory();
}
@@ -1971,53 +1971,12 @@
if (!moveCursor)
return;
- offset= -1;
- length= -1;
-
- if (reference instanceof IMember) {
- range= ((IMember) reference).getNameRange();
- if (range != null) {
- offset= range.getOffset();
- length= range.getLength();
- }
- } else if (reference instanceof ITypeParameter) {
- range= ((ITypeParameter) reference).getNameRange();
- if (range != null) {
- offset= range.getOffset();
- length= range.getLength();
- }
- } else if (reference instanceof ILocalVariable) {
- range= ((ILocalVariable)reference).getNameRange();
- if (range != null) {
- offset= range.getOffset();
- length= range.getLength();
- }
- } else if (reference instanceof IImportDeclaration) {
- String name= ((IImportDeclaration) reference).getElementName();
- if (name != null && name.length() > 0) {
- String content= reference.getSource();
- if (content != null) {
- offset= range.getOffset() + content.indexOf(name);
- length= name.length();
- }
- }
- } else if (reference instanceof IPackageDeclaration) {
- String name= ((IPackageDeclaration) reference).getElementName();
- if (name != null && name.length() > 0) {
- String content= reference.getSource();
- if (content != null) {
- offset= range.getOffset() + content.indexOf(name);
- length= name.length();
- }
- }
- }
-
- if (offset > -1 && length > 0) {
+ if (newSelection != null && newSelection.getOffset() > -1 && newSelection.getLength() > 0) {
try {
textWidget.setRedraw(false);
- sourceViewer.revealRange(offset, length);
- sourceViewer.setSelectedRange(offset, length);
+ sourceViewer.revealRange(newSelection.getOffset(), newSelection.getLength());
+ sourceViewer.setSelectedRange(newSelection.getOffset(), newSelection.getLength());
} finally {
textWidget.setRedraw(true);
}
@@ -2045,7 +2004,14 @@
*/
return;
}
-
+
+ if (getSelectionProvider().getSelection() instanceof ITextSelection) {
+ ITextSelection currentSelection= (ITextSelection)getSelectionProvider().getSelection();
+ ITextSelection newSelection= EditorUtility.getTextSelection(element);
+ if (newSelection != null && newSelection.getOffset() == currentSelection.getOffset() && newSelection.getLength() == currentSelection.getLength())
+ return;
+ }
+
IJavaElement corresponding= getCorrespondingElement(element);
if (corresponding instanceof ISourceReference) {
ISourceReference reference= (ISourceReference) corresponding;