From a6a24e957f336205c7716d6ed1b835e80429fcbf Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 25 Oct 2006 15:59:02 +0000 Subject: [PATCH] Call hierarchy: use timestamps from index. --- .../internal/index/tests/IndexBugsTests.java | 53 ++++++++++--------- .../eclipse/cdt/ui/tests/BaseUITestCase.java | 3 +- .../internal/ui/missingapi/CIndexQueries.java | 14 ++--- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java index e14c50d695f..11273fb9ac8 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBugsTests.java @@ -77,32 +77,32 @@ public class IndexBugsTests extends BaseTestCase { return TestSourceReader.readTaggedComment(CTestPlugin.getDefault().getBundle(), "parser", getClass(), tag); } - protected IFile createFile(IContainer container, String fileName, String contents, int waitMillis) throws Exception { - long now= System.currentTimeMillis(); - IFile result= TestSourceReader.createFile(container, new Path(fileName), contents); - if (waitMillis >= 0) { - long endTime= now + waitMillis; - int timeLeft= (int) (endTime-now); - while (timeLeft >= 0) { - assertTrue(CCorePlugin.getIndexManager().joinIndexer(timeLeft, NPM)); - fIndex.acquireReadLock(); - try { - IIndexFile pfile= fIndex.getFile(result.getLocation()); - if (pfile != null && pfile.getTimestamp() >= now) { - return result; - } - } - finally { - fIndex.releaseReadLock(); - } - Thread.sleep(50); - timeLeft= (int) (endTime - System.currentTimeMillis()); - } - throw new Exception("Indexer did not complete in time!"); - } - return result; + protected IFile createFile(IContainer container, String fileName, String contents) throws Exception { + return TestSourceReader.createFile(container, new Path(fileName), contents); } - + + protected void waitForIndexer(IFile file, int maxmillis) throws Exception { + long endTime= System.currentTimeMillis() + maxmillis; + int timeLeft= maxmillis; + while (timeLeft >= 0) { + assertTrue(CCorePlugin.getIndexManager().joinIndexer(timeLeft, NPM)); + fIndex.acquireReadLock(); + try { + IIndexFile pfile= fIndex.getFile(file.getLocation()); + if (pfile != null && pfile.getTimestamp() >= file.getLocalTimeStamp()) { + return; + } + } + finally { + fIndex.releaseReadLock(); + } + + Thread.sleep(50); + timeLeft= (int) (endTime-System.currentTimeMillis()); + } + throw new Exception("Indexer did not complete in time!"); + } + protected Pattern[] getPattern(String qname) { String[] parts= qname.split("::"); Pattern[] result= new Pattern[parts.length]; @@ -127,7 +127,8 @@ public class IndexBugsTests extends BaseTestCase { int indexOfDecl = content.indexOf(funcName); int indexOfDef = content.indexOf(funcName, indexOfDecl+1); - createFile(getProject(), fileName, content, 1000); + IFile file= createFile(getProject(), fileName, content); + waitForIndexer(file, 1000); // make sure the ast is correct ITranslationUnit tu= (ITranslationUnit) fCProject.findElement(new Path(fileName)); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java index d74b8779593..842d0d7f6e4 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java @@ -73,8 +73,7 @@ public class BaseUITestCase extends BaseTestCase { index.acquireReadLock(); try { IIndexFile pfile= index.getFile(file.getLocation()); - // mstodo check timestamp - if (pfile != null) { + if (pfile != null && pfile.getTimestamp() >= file.getLocalTimeStamp()) { return; } } 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 88affdac5c9..a4ee5e9ba4e 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 @@ -383,12 +383,14 @@ public class CIndexQueries { if (declName instanceof IIndexName) { IIndexName pname= (IIndexName) declName; region= new Region(pname.getNodeOffset(), pname.getNodeLength()); - // mstodo use correct timestamp - // PDOMFile file= pname.getFile(); - long timestamp= tu.getPath().toFile().lastModified(); - IPositionConverter pc= CCorePlugin.getPositionTrackerManager().findPositionConverter(tu.getPath(), timestamp); - if (pc != null) { - region= pc.historicToActual(region); + try { + long timestamp= pname.getFile().getTimestamp(); + IPositionConverter pc= CCorePlugin.getPositionTrackerManager().findPositionConverter(tu.getPath(), timestamp); + if (pc != null) { + region= pc.historicToActual(region); + } + } catch (CoreException e) { + CUIPlugin.getDefault().log(e); } } else {