1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

200958: apply fix

This commit is contained in:
Andrew Ferguson 2007-08-23 15:59:38 +00:00
parent c5bbb9ea48
commit bdc1cb98a7
6 changed files with 138 additions and 69 deletions

View file

@ -10,10 +10,6 @@
*******************************************************************************/
package org.eclipse.cdt.core.internal.index.provider.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.cdt.core.index.provider.IPDOMDescriptor;
import org.eclipse.cdt.core.index.provider.IReadOnlyPDOMProvider;
import org.eclipse.cdt.core.model.ICProject;
@ -24,30 +20,16 @@ import org.eclipse.core.runtime.CoreException;
* Provides no pdom descriptors, used for testing the behaviour of IndexManager over
* project lifecycles.
*/
public class DummyProvider1 implements IReadOnlyPDOMProvider {
static List prjTrace= Collections.synchronizedList(new ArrayList());
static List cfgTrace= Collections.synchronizedList(new ArrayList());
public static void reset() {
prjTrace.clear();
cfgTrace.clear();
}
public static List getProjectsTrace() {
return prjTrace;
}
public static List getCfgsTrace() {
return cfgTrace;
}
public class AbstractDummyProvider implements IReadOnlyPDOMProvider {
public AbstractDummyProvider() {}
public IPDOMDescriptor[] getDescriptors(ICConfigurationDescription config) {
cfgTrace.add(config);
DummyProviderTraces.getInstance().getCfgsTrace(getClass()).add(config);
return new IPDOMDescriptor[0];
}
public boolean providesFor(ICProject project) throws CoreException {
prjTrace.add(project);
DummyProviderTraces.getInstance().getProjectsTrace(getClass()).add(project);
return true;
}
}

View file

@ -0,0 +1,49 @@
/*******************************************************************************
* Copyright (c) 2007 Symbian Software Ltd. 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 API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.internal.index.provider.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DummyProviderTraces {
static DummyProviderTraces instance = new DummyProviderTraces();
public static DummyProviderTraces getInstance() { return instance; }
private DummyProviderTraces() {}
Map/*<String, List>*/ id2prjTrace= new HashMap();
Map/*<String, List>*/ id2cfgTrace= new HashMap();
public List getProjectsTrace(Class provider) {
String key= provider.getName();
if(!id2prjTrace.containsKey(key)) {
id2prjTrace.put(key, Collections.synchronizedList(new ArrayList()));
}
return (List) id2prjTrace.get(key);
}
public List getCfgsTrace(Class provider) {
String key= provider.getName();
if(!id2cfgTrace.containsKey(key)) {
id2cfgTrace.put(key, Collections.synchronizedList(new ArrayList()));
}
return (List) id2cfgTrace.get(key);
}
public void reset(Class provider) {
getProjectsTrace(provider).clear();
getCfgsTrace(provider).clear();
}
}

View file

@ -0,0 +1,19 @@
/*******************************************************************************
* Copyright (c) 2007 Symbian Software Ltd. 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 API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.internal.index.provider.test;
public class Providers {
public static class Dummy1 extends AbstractDummyProvider {}
public static class Dummy2 extends AbstractDummyProvider {}
public static class Dummy3 extends AbstractDummyProvider {}
public static class Dummy4 extends AbstractDummyProvider {}
public static class Dummy5 extends AbstractDummyProvider {}
}

View file

@ -27,7 +27,8 @@ import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.provider.IIndexProvider;
import org.eclipse.cdt.core.internal.index.provider.test.DummyProvider1;
import org.eclipse.cdt.core.internal.index.provider.test.DummyProviderTraces;
import org.eclipse.cdt.core.internal.index.provider.test.Providers;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
@ -67,6 +68,14 @@ import org.eclipse.core.runtime.QualifiedName;
* Example usage and test for IIndexProvider
*/
public class IndexProviderManagerTest extends IndexTestBase {
final static DummyProviderTraces DPT= DummyProviderTraces.getInstance();
final static Class DP1= Providers.Dummy1.class;
final static Class DP2= Providers.Dummy2.class;
final static Class DP3= Providers.Dummy3.class;
final static Class DP4= Providers.Dummy4.class;
final static Class DP5= Providers.Dummy5.class;
final static Class[] DPS= new Class[] {DP4, DP2, DP1, DP3, DP5};
final CCorePlugin core= CCorePlugin.getDefault();
public IndexProviderManagerTest() {
@ -77,8 +86,10 @@ public class IndexProviderManagerTest extends IndexTestBase {
return suite(IndexProviderManagerTest.class);
}
public void testProvider_SimpleLifeCycle() throws Exception {
DummyProvider1.reset();
public void testProvider_SimpleLifeCycle_200958() throws Exception {
for(int i=0; i<DPS.length; i++)
DPT.reset(DPS[i]);
List cprojects = new ArrayList(), expectedTrace = new ArrayList();
try {
for(int i=0; i<3; i++) {
@ -87,12 +98,14 @@ public class IndexProviderManagerTest extends IndexTestBase {
cprojects.add(cproject);
expectedTrace.add(cproject);
}
assertEquals(expectedTrace, DummyProvider1.getProjectsTrace());
for(int i=0; i<DPS.length; i++)
assertEquals(expectedTrace, DPT.getProjectsTrace(DPS[i]));
for(int i=0; i<expectedTrace.size(); i++) {
ICProject cproject = (ICProject) expectedTrace.get(i);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
}
assertEquals(expectedTrace, DummyProvider1.getProjectsTrace());
for(int i=0; i<DPS.length; i++)
assertEquals(expectedTrace, DPT.getProjectsTrace(DPS[i]));
} finally {
for(int i=0; i<cprojects.size(); i++) {
ICProject cproject = (ICProject) expectedTrace.get(i);
@ -102,7 +115,8 @@ public class IndexProviderManagerTest extends IndexTestBase {
}
public void testProvider_OverDeleteAndAdd() throws Exception {
DummyProvider1.reset();
DPT.reset(DP1);
List expectedTrace = new ArrayList();
ICProject cproject = null;
try {
@ -110,13 +124,13 @@ public class IndexProviderManagerTest extends IndexTestBase {
cproject = CProjectHelper.createCProject(name, "bin", IPDOMManager.ID_NO_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
expectedTrace.add(cproject);
assertEquals(expectedTrace, DummyProvider1.getProjectsTrace());
assertEquals(expectedTrace, DPT.getProjectsTrace(DP1));
cproject.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor());
cproject = CProjectHelper.createCProject(name, "bin", IPDOMManager.ID_NO_INDEXER);
index = CCorePlugin.getIndexManager().getIndex(cproject);
expectedTrace.add(cproject);
assertEquals(expectedTrace, DummyProvider1.getProjectsTrace());
assertEquals(expectedTrace, DPT.getProjectsTrace(DP1));
} finally {
if(cproject!=null) {
cproject.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor());
@ -125,7 +139,7 @@ public class IndexProviderManagerTest extends IndexTestBase {
}
public void testProvider_OverMove() throws Exception {
DummyProvider1.reset();
DPT.reset(DP1);
List cprojects = new ArrayList();
List expectedTrace = new ArrayList();
@ -139,7 +153,7 @@ public class IndexProviderManagerTest extends IndexTestBase {
cproject = CProjectHelper.createCProject(name, "bin", IPDOMManager.ID_NO_INDEXER);
IIndex index = CCorePlugin.getIndexManager().getIndex(cproject);
expectedTrace.add(cproject);
assertEquals(expectedTrace, DummyProvider1.getProjectsTrace());
assertEquals(expectedTrace, DPT.getProjectsTrace(DP1));
// move the project to a random new location
File newLocation = CProjectHelper.freshDir();
@ -148,7 +162,7 @@ public class IndexProviderManagerTest extends IndexTestBase {
cproject.getProject().move(description, IResource.FORCE | IResource.SHALLOW, new NullProgressMonitor());
index = CCorePlugin.getIndexManager().getIndex(cproject);
assertEquals(expectedTrace, DummyProvider1.getProjectsTrace());
assertEquals(expectedTrace, DPT.getProjectsTrace(DP1));
} finally {
if(cproject!=null) {
cproject.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor());
@ -170,46 +184,46 @@ public class IndexProviderManagerTest extends IndexTestBase {
index= CCorePlugin.getIndexManager().getIndex(cproject);
CCorePlugin.getIndexManager().joinIndexer(8000, NPM);
try {
DummyProvider1.reset();
try {
DPT.reset(DP1);
changeConfigRelations(project, ICProjectDescriptionPreferences.CONFIGS_LINK_SETTINGS_AND_ACTIVE);
assertEquals(0, DummyProvider1.getProjectsTrace().size());
assertEquals(0, DummyProvider1.getCfgsTrace().size());
assertEquals(0, DPT.getProjectsTrace(DP1).size());
assertEquals(0, DPT.getCfgsTrace(DP1).size());
changeActiveConfiguration(project, cfg1);
DummyProvider1.reset();
DPT.reset(DP1);
index= CCorePlugin.getIndexManager().getIndex(cproject);
assertEquals(0, DummyProvider1.getProjectsTrace().size());
assertEquals(1, DummyProvider1.getCfgsTrace().size());
assertEquals("project.config1", ((ICConfigurationDescription)DummyProvider1.getCfgsTrace().get(0)).getId());
assertEquals(0, DPT.getProjectsTrace(DP1).size());
assertEquals(1, DPT.getCfgsTrace(DP1).size());
assertEquals("project.config1", ((ICConfigurationDescription)DPT.getCfgsTrace(DP1).get(0)).getId());
changeActiveConfiguration(project, cfg2);
DummyProvider1.reset();
DPT.reset(DP1);
index= CCorePlugin.getIndexManager().getIndex(cproject);
assertEquals(0, DummyProvider1.getProjectsTrace().size());
assertEquals(1, DummyProvider1.getCfgsTrace().size());
assertEquals("project.config2", ((ICConfigurationDescription)DummyProvider1.getCfgsTrace().get(0)).getId());
assertEquals(0, DPT.getProjectsTrace(DP1).size());
assertEquals(1, DPT.getCfgsTrace(DP1).size());
assertEquals("project.config2", ((ICConfigurationDescription)DPT.getCfgsTrace(DP1).get(0)).getId());
DummyProvider1.reset();
DPT.reset(DP1);
changeConfigRelations(project, ICProjectDescriptionPreferences.CONFIGS_INDEPENDENT);
assertEquals(0, DummyProvider1.getProjectsTrace().size());
assertEquals(0, DummyProvider1.getCfgsTrace().size());
assertEquals(0, DPT.getProjectsTrace(DP1).size());
assertEquals(0, DPT.getCfgsTrace(DP1).size());
changeActiveConfiguration(project, cfg1);
DummyProvider1.reset();
DPT.reset(DP1);
index= CCorePlugin.getIndexManager().getIndex(cproject);
assertEquals(0, DummyProvider1.getProjectsTrace().size());
assertEquals(1, DummyProvider1.getCfgsTrace().size());
assertEquals(0, DPT.getProjectsTrace(DP1).size());
assertEquals(1, DPT.getCfgsTrace(DP1).size());
// should still be config2, as the change in active configuration does not matter
assertEquals("project.config2", ((ICConfigurationDescription)DummyProvider1.getCfgsTrace().get(0)).getId());
assertEquals("project.config2", ((ICConfigurationDescription)DPT.getCfgsTrace(DP1).get(0)).getId());
changeActiveConfiguration(project, cfg2);
DummyProvider1.reset();
DPT.reset(DP1);
index= CCorePlugin.getIndexManager().getIndex(cproject);
assertEquals(0, DummyProvider1.getProjectsTrace().size());
assertEquals(1, DummyProvider1.getCfgsTrace().size());
assertEquals(0, DPT.getProjectsTrace(DP1).size());
assertEquals(1, DPT.getCfgsTrace(DP1).size());
// there should be no change from the previous state (also config2)
assertEquals("project.config2", ((ICConfigurationDescription)DummyProvider1.getCfgsTrace().get(0)).getId());
assertEquals("project.config2", ((ICConfigurationDescription)DPT.getCfgsTrace(DP1).get(0)).getId());
} finally {
if (cproject != null) {
cproject.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor());
@ -536,22 +550,14 @@ class MockConfig implements ICConfigurationDescription {
}
public String[] getExternalSettingsProviderIds() {
// TODO Auto-generated method stub
return null;
}
public void setExternalSettingsProviderIds(String[] ids) {
// TODO Auto-generated method stub
}
public void setExternalSettingsProviderIds(String[] ids) {}
public void updateExternalSettingsProviders(String[] ids) {
// TODO Auto-generated method stub
}
public void updateExternalSettingsProviders(String[] ids) {}
public ICSourceEntry[] getResolvedSourceEntries() {
// TODO Auto-generated method stub
return null;
}
}

View file

@ -30,7 +30,7 @@
<extension
point="org.eclipse.cdt.core.CIndex">
<ReadOnlyPDOMProvider
class="org.eclipse.cdt.core.internal.index.provider.test.DummyProvider1">
class="org.eclipse.cdt.core.internal.index.provider.test.Providers$Dummy1">
</ReadOnlyPDOMProvider>
<ExportProjectProvider
class="org.eclipse.cdt.internal.pdom.tests.GeneratePDOMApplicationTest$TestProjectProvider1">
@ -136,5 +136,18 @@
<toolChain id="org.eclipse.cdt.core.tests.toolChain6"/>
</template>
</extension>
<extension point="org.eclipse.cdt.core.CIndex">
<ReadOnlyPDOMProvider
class="org.eclipse.cdt.core.internal.index.provider.test.Providers$Dummy2">
</ReadOnlyPDOMProvider>
<ReadOnlyPDOMProvider
class="org.eclipse.cdt.core.internal.index.provider.test.Providers$Dummy3">
</ReadOnlyPDOMProvider>
<ReadOnlyPDOMProvider
class="org.eclipse.cdt.core.internal.index.provider.test.Providers$Dummy4">
</ReadOnlyPDOMProvider>
<ReadOnlyPDOMProvider
class="org.eclipse.cdt.core.internal.index.provider.test.Providers$Dummy5">
</ReadOnlyPDOMProvider>
</extension>
</plugin>

View file

@ -64,7 +64,7 @@ public final class IndexProviderManager implements IElementChangedListener {
IConfigurationElement[] ce = extension.getConfigurationElements();
for(int j=0; j<ce.length; j++) {
if(ce[j].getName().equals(READ_ONLY_PDOM_PROVIDER)) {
IIndexProvider provider = (IIndexProvider) ce[0].createExecutableExtension("class"); //$NON-NLS-1$
IIndexProvider provider = (IIndexProvider) ce[j].createExecutableExtension("class"); //$NON-NLS-1$
if(provider instanceof IReadOnlyPDOMProvider) {
provider = new ReadOnlyPDOMProviderBridge((IReadOnlyPDOMProvider)provider);
providers.add(provider);