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:
parent
c5bbb9ea48
commit
bdc1cb98a7
6 changed files with 138 additions and 69 deletions
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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 {}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue