From fc38a2a891db2ba344504270185f0959b84ccf95 Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Tue, 27 Feb 2007 13:58:09 +0000 Subject: [PATCH] fix bug in DBProperties use in the PDOM --- .../cdt/internal/pdom/tests/PDOMBugsTest.java | 62 +++++++++++++++++++ .../cdt/internal/pdom/tests/PDOMTests.java | 1 + .../eclipse/cdt/internal/core/pdom/PDOM.java | 14 +++-- 3 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMBugsTest.java diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMBugsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMBugsTest.java new file mode 100644 index 00000000000..29d0a2dacdb --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMBugsTest.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2007 Symbian Software Systems 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andrew Ferguson (Symbian) - Initial implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.pdom.tests; + +import junit.framework.Test; + +import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase; +import org.eclipse.cdt.internal.core.CCoreInternals; +import org.eclipse.cdt.internal.core.index.IWritableIndexFragment; +import org.eclipse.cdt.internal.core.pdom.WritablePDOM; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.NullProgressMonitor; + +/** + * Tests bugs found in the PDOM + */ +public class PDOMBugsTest extends BaseTestCase { + ICProject cproject; + + public static Test suite() { + return suite(PDOMBugsTest.class); + } + + protected void setUp() throws Exception { + cproject= CProjectHelper.createCCProject("PDOMBugsTest"+System.currentTimeMillis(), "bin", IPDOMManager.ID_NO_INDEXER); + super.setUp(); + } + + protected void tearDown() throws Exception { + if (cproject != null) { + cproject.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor()); + } + super.tearDown(); + } + + public void testPDOMProperties() throws Exception { + IWritableIndexFragment pdom = (IWritableIndexFragment) CCoreInternals.getPDOMManager().getPDOM(cproject); + pdom.acquireWriteLock(0); + try { + WritablePDOM wpdom = (WritablePDOM) pdom; + wpdom.setProperty("a", "b"); + assertEquals("b", wpdom.getProperty("a")); + wpdom.setProperty("c", "d"); + assertEquals("d", wpdom.getProperty("c")); + wpdom.setProperty("c", "e"); + assertEquals("e", wpdom.getProperty("c")); + } finally { + pdom.releaseWriteLock(0); + } + } +} diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMTests.java index 21422e049d9..8f231643850 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMTests.java @@ -26,6 +26,7 @@ public class PDOMTests extends TestSuite { suite.addTest(DBTest.suite()); suite.addTest(DBPropertiesTests.suite()); + suite.addTest(PDOMBugsTest.suite()); suite.addTest(PDOMSearchTest.suite()); suite.addTestSuite(PDOMLocationTests.class); suite.addTestSuite(EnumerationTests.class); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 2fbed745670..3ccb99822a6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -48,9 +48,9 @@ import org.eclipse.cdt.internal.core.index.IIndexFragmentName; import org.eclipse.cdt.internal.core.pdom.db.BTree; import org.eclipse.cdt.internal.core.pdom.db.DBProperties; import org.eclipse.cdt.internal.core.pdom.db.Database; +import org.eclipse.cdt.internal.core.pdom.dom.ApplyVisitor; import org.eclipse.cdt.internal.core.pdom.dom.BindingCollector; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; -import org.eclipse.cdt.internal.core.pdom.dom.ApplyVisitor; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMFile; import org.eclipse.cdt.internal.core.pdom.dom.PDOMInclude; @@ -190,15 +190,21 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM { return file; } + protected void clearFileIndex() throws CoreException { + db.putInt(FILE_INDEX, 0); + fileIndex = null; + } + protected void clear() throws CoreException { Database db = getDB(); // Clear out the database db.clear(1); // Zero out the File Index and Linkages - db.putInt(FILE_INDEX, 0); - fileIndex = null; - + clearFileIndex(); + + db.putInt(PROPERTIES, 0); + db.putInt(LINKAGES, 0); fLinkageIDCache.clear(); }