diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IPositionTrackerManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IPositionTrackerManager.java index 93923bd76d2..04ae6f6de2f 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IPositionTrackerManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IPositionTrackerManager.java @@ -26,5 +26,5 @@ public interface IPositionTrackerManager { * @param timestamp identifies the version of the file stored on disk. * @return the requested position adapter or null. */ - IPositionConverter findPositionAdapter(IFile file, long timestamp); + IPositionConverter findPositionConverter(IFile file, long timestamp); } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/PositionTrackerManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/PositionTrackerManager.java index 0b5f6f96f68..4fea088824f 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/PositionTrackerManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/PositionTrackerManager.java @@ -168,7 +168,7 @@ public class PositionTrackerManager implements IPositionTrackerManager, IFileBuf } } - public synchronized IPositionConverter findPositionAdapter(IFile file, long timestamp) { + public synchronized IPositionConverter findPositionConverter(IFile file, long timestamp) { PositionTrackerChain chain= (PositionTrackerChain) fPositionTrackerMap.get(file.getFullPath()); if (chain != null) { return chain.findTrackerAt(timestamp); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBContentProvider.java index 72ed705bcc7..3eeb144d6f8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBContentProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBContentProvider.java @@ -49,7 +49,7 @@ public class IBContentProvider extends AsyncTreeContentProvider { public Object[] syncronouslyComputeChildren(Object parentElement) { if (parentElement instanceof ITranslationUnit) { ITranslationUnit tu = (ITranslationUnit) parentElement; - return new Object[] { new IBNode(null, new IBFile(tu), null, null, 0) }; + return new Object[] { new IBNode(null, new IBFile(tu), null, null, 0, 0) }; } if (parentElement instanceof IBNode) { IBNode node = (IBNode) parentElement; @@ -90,7 +90,7 @@ public class IBContentProvider extends AsyncTreeContentProvider { } IBNode newnode= new IBNode(node, targetFile, directiveFile, - include.getName(), include.getOffset()); + include.getName(), include.getOffset(), include.getTimestamp()); newnode.setIsActiveCode(include.isActiveCode()); newnode.setIsSystemInclude(include.isSystemInclude()); result[i]= newnode; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBNode.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBNode.java index 1a2cd9477d6..88c76a33f16 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBNode.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBNode.java @@ -35,12 +35,13 @@ public class IBNode implements IAdaptable { private boolean fIsSystemInclude= false; private boolean fIsActive= true; private boolean fIsRecursive; + private long fTimestamp; /** * Creates a new node for the include browser */ public IBNode(IBNode parent, IBFile represents, IBFile fileOfDirective, String nameOfDirective, - int charOffset) { + int charOffset, long timestamp) { fParent= parent; fRepresentedFile= represents; fDirectiveFile= fileOfDirective; @@ -48,6 +49,7 @@ public class IBNode implements IAdaptable { fDirectiveCharacterOffset= charOffset; fIsRecursive= computeIsRecursive(fParent, represents.getLocation()); fHashCode= computeHashCode(); + fTimestamp= timestamp; } private int computeHashCode() { @@ -183,4 +185,8 @@ public class IBNode implements IAdaptable { } return fRepresentedFile.getLocation(); } + + public long getTimestamp() { + return fTimestamp; + } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java index 88f52a9d3bf..6d55bdbd5b0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/includebrowser/IBViewPart.java @@ -25,6 +25,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.text.Position; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelection; @@ -72,6 +73,7 @@ import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.IPositionConverter; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; @@ -670,13 +672,14 @@ public class IBViewPart extends ViewPart IBFile ibf= node.getDirectiveFile(); if (ibf != null) { IEditorPart editor= null; - int offset= node.getDirectiveCharacterOffset(); - int length= node.getDirectiveName().length() + 2; + Position pos= new Position(node.getDirectiveCharacterOffset(), + node.getDirectiveName().length() + 2); IFile f= ibf.getResource(); if (f != null) { fLastNavigationNode= node; - // mstodo position tracker + IPositionConverter converter= CCorePlugin.getPositionTrackerManager().findPositionConverter(f, node.getTimestamp()); + pos= converter.historicToActual(pos); try { editor= IDE.openEditor(page, f, false); } catch (PartInitException e) { @@ -698,7 +701,7 @@ public class IBViewPart extends ViewPart } if (editor instanceof ITextEditor) { ITextEditor te= (ITextEditor) editor; - te.selectAndReveal(offset, length); + te.selectAndReveal(pos.getOffset(), pos.getLength()); } } else { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/missingapi/CIndexQueries.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/missingapi/CIndexQueries.java index 999534c44bc..a786570e2ac 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/missingapi/CIndexQueries.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/missingapi/CIndexQueries.java @@ -53,6 +53,9 @@ public class CIndexQueries { public int getOffset() { return 9; } + public long getTimestamp() { + return 0; + } } private static final IPDOMInclude[] EMPTY_INCLUDES = new IPDOMInclude[0];