mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Fix for 178995, handling of PDOMProperties
This commit is contained in:
parent
ea99f62e2f
commit
bb895064cf
4 changed files with 27 additions and 33 deletions
|
@ -25,6 +25,7 @@ import org.eclipse.cdt.internal.core.CCoreInternals;
|
|||
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
||||
import org.eclipse.cdt.internal.core.index.IWritableIndexFragment;
|
||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||
import org.eclipse.cdt.internal.core.pdom.PDOMManager;
|
||||
import org.eclipse.cdt.internal.core.pdom.WritablePDOM;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.ChunkCache;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
|
@ -91,7 +92,8 @@ public class PDOMBugsTest extends BaseTestCase {
|
|||
|
||||
File tmp= new File(System.getProperty("java.io.tmpdir")+"/temp"+System.currentTimeMillis()+".pdom");
|
||||
IIndexLocationConverter cvr= new ResourceContainerRelativeLocationConverter(cproject.getProject());
|
||||
CCoreInternals.getPDOMManager().exportProjectPDOM(cproject, tmp, cvr);
|
||||
final PDOMManager pdomManager = CCoreInternals.getPDOMManager();
|
||||
pdomManager.exportProjectPDOM(cproject, tmp, cvr);
|
||||
|
||||
IWritableIndexFragment pdom = new WritablePDOM(tmp, cvr, new ChunkCache());
|
||||
pdom.acquireReadLock();
|
||||
|
@ -99,19 +101,20 @@ public class PDOMBugsTest extends BaseTestCase {
|
|||
String id= pdom.getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
|
||||
assertNotNull("Exported pdom ID is null", id);
|
||||
|
||||
String id2= ((PDOM)CCoreInternals.getPDOMManager().getPDOM(cproject)).getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
|
||||
String id2= ((PDOM)pdomManager.getPDOM(cproject)).getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
|
||||
assertNotNull("Project pdom ID is null", id2);
|
||||
assertFalse("Project pdom ID equals export PDOM id", id2.equals(id));
|
||||
|
||||
CCoreInternals.getPDOMManager().reindex(cproject);
|
||||
pdomManager.reindex(cproject);
|
||||
assertTrue(pdomManager.joinIndexer(4000, new NullProgressMonitor()));
|
||||
|
||||
String id3= pdom.getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
|
||||
assertNotNull("Reindexed project pdom ID is null", id3);
|
||||
assertEquals("Reindexex project pdom ID equals exported pdom ID", id, id3);
|
||||
assertNotNull("Exported pdom ID is null after project reindex", id3);
|
||||
assertEquals("Exported pdom ID hasChanged during reindex", id, id3);
|
||||
|
||||
String id4= ((PDOM)CCoreInternals.getPDOMManager().getPDOM(cproject)).getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
|
||||
assertNotNull("Exported pdom ID is null after project reindex", id4);
|
||||
assertFalse("Exported pdom ID equals project pdom ID after reindex", id4.equals(id));
|
||||
String id4= ((PDOM)pdomManager.getPDOM(cproject)).getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
|
||||
assertNotNull("Reindexed project pdom ID is null", id4);
|
||||
assertFalse("Reindexex project pdom ID equals exported pdom ID", id4.equals(id));
|
||||
} finally {
|
||||
pdom.releaseReadLock();
|
||||
}
|
||||
|
|
|
@ -73,4 +73,10 @@ public interface IWritableIndex extends IIndex {
|
|||
* Returns cache misses since last reset of counters.
|
||||
*/
|
||||
long getCacheMisses();
|
||||
|
||||
/**
|
||||
* Returns the primary writable fragment, or <code>null</code> if there is
|
||||
* no writable fragment.
|
||||
*/
|
||||
IWritableIndexFragment getPrimaryWritableFragment();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -128,4 +128,8 @@ public class WritableCIndex extends CIndex implements IWritableIndex {
|
|||
fWritableFragments[i].releaseWriteLock(establishReadlockCount);
|
||||
}
|
||||
}
|
||||
|
||||
public IWritableIndexFragment getPrimaryWritableFragment() {
|
||||
return fWritableFragments.length > 0 ? fWritableFragments[0] : null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ import org.eclipse.cdt.core.dom.IPDOMIndexerTask;
|
|||
import org.eclipse.cdt.core.dom.IPDOMManager;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.internal.core.CCoreInternals;
|
||||
import org.eclipse.cdt.internal.core.index.IWritableIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IWritableIndexFragment;
|
||||
import org.eclipse.cdt.internal.core.index.IWritableIndexManager;
|
||||
import org.eclipse.cdt.internal.core.pdom.IndexerProgress;
|
||||
import org.eclipse.cdt.internal.core.pdom.PDOMManager;
|
||||
|
@ -78,38 +78,19 @@ public class PDOMRebuildTask implements IPDOMIndexerTask {
|
|||
|
||||
if (fDelegate != null) {
|
||||
fDelegate.run(monitor);
|
||||
writeProjectProperties(project);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes project metadata to the pdom
|
||||
* @see PDOMManager#writeProjectPDOMProperties(WritablePDOM, org.eclipse.core.resources.IProject)
|
||||
* @param project the project to write project metadata about
|
||||
*/
|
||||
private void writeProjectProperties(ICProject project) {
|
||||
try {
|
||||
PDOMManager mgr= CCoreInternals.getPDOMManager();
|
||||
WritablePDOM projectPDOM= (WritablePDOM) mgr.getPDOM(project);
|
||||
projectPDOM.acquireWriteLock();
|
||||
try {
|
||||
PDOMManager.writeProjectPDOMProperties(projectPDOM, project.getProject());
|
||||
} finally {
|
||||
projectPDOM.releaseWriteLock();
|
||||
}
|
||||
} catch(CoreException ce) {
|
||||
CCorePlugin.log(ce);
|
||||
} catch(InterruptedException ie) {
|
||||
// no-op
|
||||
}
|
||||
}
|
||||
|
||||
private void clearIndex(ICProject project) throws CoreException, InterruptedException {
|
||||
IWritableIndex index= ((IWritableIndexManager) CCorePlugin.getIndexManager()).getWritableIndex(project);
|
||||
// First clear the pdom
|
||||
index.acquireWriteLock(0);
|
||||
try {
|
||||
index.clear();
|
||||
IWritableIndexFragment wf= index.getPrimaryWritableFragment();
|
||||
if (wf instanceof WritablePDOM) {
|
||||
PDOMManager.writeProjectPDOMProperties((WritablePDOM) wf, project.getProject());
|
||||
}
|
||||
}
|
||||
finally {
|
||||
index.releaseWriteLock(0);
|
||||
|
|
Loading…
Add table
Reference in a new issue