mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Call hierarchy: use timestamps from index.
This commit is contained in:
parent
429128162f
commit
a6a24e957f
3 changed files with 36 additions and 34 deletions
|
@ -77,32 +77,32 @@ public class IndexBugsTests extends BaseTestCase {
|
||||||
return TestSourceReader.readTaggedComment(CTestPlugin.getDefault().getBundle(), "parser", getClass(), tag);
|
return TestSourceReader.readTaggedComment(CTestPlugin.getDefault().getBundle(), "parser", getClass(), tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IFile createFile(IContainer container, String fileName, String contents, int waitMillis) throws Exception {
|
protected IFile createFile(IContainer container, String fileName, String contents) throws Exception {
|
||||||
long now= System.currentTimeMillis();
|
return TestSourceReader.createFile(container, new Path(fileName), contents);
|
||||||
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 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) {
|
protected Pattern[] getPattern(String qname) {
|
||||||
String[] parts= qname.split("::");
|
String[] parts= qname.split("::");
|
||||||
Pattern[] result= new Pattern[parts.length];
|
Pattern[] result= new Pattern[parts.length];
|
||||||
|
@ -127,7 +127,8 @@ public class IndexBugsTests extends BaseTestCase {
|
||||||
|
|
||||||
int indexOfDecl = content.indexOf(funcName);
|
int indexOfDecl = content.indexOf(funcName);
|
||||||
int indexOfDef = content.indexOf(funcName, indexOfDecl+1);
|
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
|
// make sure the ast is correct
|
||||||
ITranslationUnit tu= (ITranslationUnit) fCProject.findElement(new Path(fileName));
|
ITranslationUnit tu= (ITranslationUnit) fCProject.findElement(new Path(fileName));
|
||||||
|
|
|
@ -73,8 +73,7 @@ public class BaseUITestCase extends BaseTestCase {
|
||||||
index.acquireReadLock();
|
index.acquireReadLock();
|
||||||
try {
|
try {
|
||||||
IIndexFile pfile= index.getFile(file.getLocation());
|
IIndexFile pfile= index.getFile(file.getLocation());
|
||||||
// mstodo check timestamp
|
if (pfile != null && pfile.getTimestamp() >= file.getLocalTimeStamp()) {
|
||||||
if (pfile != null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -383,12 +383,14 @@ public class CIndexQueries {
|
||||||
if (declName instanceof IIndexName) {
|
if (declName instanceof IIndexName) {
|
||||||
IIndexName pname= (IIndexName) declName;
|
IIndexName pname= (IIndexName) declName;
|
||||||
region= new Region(pname.getNodeOffset(), pname.getNodeLength());
|
region= new Region(pname.getNodeOffset(), pname.getNodeLength());
|
||||||
// mstodo use correct timestamp
|
try {
|
||||||
// PDOMFile file= pname.getFile();
|
long timestamp= pname.getFile().getTimestamp();
|
||||||
long timestamp= tu.getPath().toFile().lastModified();
|
IPositionConverter pc= CCorePlugin.getPositionTrackerManager().findPositionConverter(tu.getPath(), timestamp);
|
||||||
IPositionConverter pc= CCorePlugin.getPositionTrackerManager().findPositionConverter(tu.getPath(), timestamp);
|
if (pc != null) {
|
||||||
if (pc != null) {
|
region= pc.historicToActual(region);
|
||||||
region= pc.historicToActual(region);
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CUIPlugin.getDefault().log(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue