diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/provider/IndexProviderManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/provider/IndexProviderManager.java
index 92c401da5b9..5759243a068 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/provider/IndexProviderManager.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/provider/IndexProviderManager.java
@@ -6,8 +6,8 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Andrew Ferguson (Symbian) - Initial implementation
- * Markus Schorn (Wind River Systems)
+ * Andrew Ferguson (Symbian) - Initial implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.index.provider;
@@ -50,28 +50,29 @@ import org.osgi.framework.Version;
* The IndexProviderManager is responsible for maintaining the set of index
* fragments contributed via the CIndex extension point.
*
- * It is an internal class, and is public only for testing purposes.
- * @since 4.0
- */
-/*
- * For bug 196338, the role of this class was extended. It now has responsibility to
- * look at the pool of fragments available depending on their IDs, and select the most appropriate.
- * The following rules are applied
- * (i) If its not compatible, don't use it
- * (ii) If multiple are compatible, pick the latest
- *
+ * For bug 196338, the role of this class was extended. It now has responsibility to look
+ * at the pool of fragments available depending on their IDs, and select the most appropriate.
+ * The following rules are applied:
+ *
+ * - If a fragment is not compatible, don't use it.
+ * - If multiple fragments are compatible, pick the latest.
+ *
+ *
* A warning is logged if a fragment is contributed which is incompatible, and for which there is
* no compatible equivalent.
+ *
+ * It is an internal class, and is public only for testing purposes.
+ * @since 4.0
*/
public final class IndexProviderManager implements IElementChangedListener {
private static final String ELEMENT_RO_PDOMPROVIDER= "ReadOnlyPDOMProvider"; //$NON-NLS-1$
private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
private IIndexFragmentProvider[] allProviders;
- private Map provisionMap;
+ private Map provisionMap;
private Set compatibleFragmentUnavailable;
private VersionRange pdomVersionRange;
-
+
public IndexProviderManager() {
reset();
}
@@ -84,7 +85,7 @@ public final class IndexProviderManager implements IElementChangedListener {
Version maxVersion= Version.parseVersion(PDOM.versionString(PDOM.getMaxSupportedVersion()));
reset(new VersionRange(minVersion, true, maxVersion, true));
}
-
+
/**
* Note: This method should not be called by clients for purposes other than testing
* @param pdomVersionRange
@@ -101,21 +102,21 @@ public final class IndexProviderManager implements IElementChangedListener {
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint indexProviders = registry.getExtensionPoint(CCorePlugin.INDEX_UNIQ_ID);
IExtension[] extensions = indexProviders.getExtensions();
- for(int i=0; i id2fragment = new HashMap();
IProject project= config.getProjectDescription().getProject();
- for(int i=0; i preresult= new ArrayList();
- for(Map.Entry entry : id2fragment.entrySet()) {
- if(entry.getValue()==null) {
+ for (Map.Entry entry : id2fragment.entrySet()) {
+ if (entry.getValue() == null) {
String key= entry.getKey();
- if(!compatibleFragmentUnavailable.contains(key)) {
+ if (!compatibleFragmentUnavailable.contains(key)) {
String msg= MessageFormat.format(
Messages.IndexProviderManager_NoCompatibleFragmentsAvailable,
new Object[]{key}
);
- IStatus status= new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, IStatus.WARNING, msg, null);
+ IStatus status= new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID,
+ IStatus.WARNING, msg, null);
CCorePlugin.log(status);
compatibleFragmentUnavailable.add(key);
}
@@ -180,7 +182,7 @@ public final class IndexProviderManager implements IElementChangedListener {
}
return preresult.toArray(new IIndexFragment[preresult.size()]);
}
-
+
/**
* Returns the version range supported by the format identified by the specified formatID.
* @param formatID
@@ -190,12 +192,12 @@ public final class IndexProviderManager implements IElementChangedListener {
* TODO - at the point we support alternate IIndexFragment implementations, this method will need
* to be altered to lookup version ranges for the contributed format via an extension point.
*/
- if(!PDOM.FRAGMENT_PROPERTY_VALUE_FORMAT_ID.equals(formatID)) {
+ if (!PDOM.FRAGMENT_PROPERTY_VALUE_FORMAT_ID.equals(formatID)) {
throw new IllegalArgumentException("Non-PDOM formats are currently unsupported"); //$NON-NLS-1$
}
return pdomVersionRange;
}
-
+
/**
* Examines the candidate fragment, adding it to the map (using its fragment id as key) if
* it compatible with the current run-time, and it is better than any existing fragments for
@@ -203,23 +205,24 @@ public final class IndexProviderManager implements IElementChangedListener {
* @param id2fragment
* @param candidate
*/
- private void processCandidate(Map id2fragment, IIndexFragment candidate) throws InterruptedException, CoreException {
+ private void processCandidate(Map id2fragment, IIndexFragment candidate)
+ throws InterruptedException, CoreException {
String cid= null, csver= null, cformatID= null;
candidate.acquireReadLock();
try {
cid= candidate.getProperty(IIndexFragment.PROPERTY_FRAGMENT_ID);
csver= candidate.getProperty(IIndexFragment.PROPERTY_FRAGMENT_FORMAT_VERSION);
- cformatID= candidate.getProperty(IIndexFragment.PROPERTY_FRAGMENT_FORMAT_ID);
+ cformatID= candidate.getProperty(IIndexFragment.PROPERTY_FRAGMENT_FORMAT_ID);
} finally {
candidate.releaseReadLock();
}
- assert cid!=null && csver!=null && cformatID!=null;
+ assert cid != null && csver != null && cformatID != null;
Version cver= Version.parseVersion(csver); // illegal argument exception
IIndexFragment existing= id2fragment.get(cid);
-
- if(getCurrentlySupportedVersionRangeForFormat(cformatID).isIncluded(cver)) {
- if(existing != null) {
+
+ if (getCurrentlySupportedVersionRangeForFormat(cformatID).isIncluded(cver)) {
+ if (existing != null) {
String esver= null, eformatID= null;
existing.acquireReadLock();
try {
@@ -228,24 +231,24 @@ public final class IndexProviderManager implements IElementChangedListener {
} finally {
existing.releaseReadLock();
}
-
- if(eformatID.equals(cformatID)) {
+
+ if (eformatID.equals(cformatID)) {
Version ever= Version.parseVersion(esver); // illegal argument exception
- if(ever.compareTo(cver) < 0) {
+ if (ever.compareTo(cver) < 0) {
id2fragment.put(cid, candidate);
}
} else {
/*
* In future we could allow users to specify
* how format (i.e. PDOM -> custom IIndexFragment implementation)
- * changes are coped with.
+ * changes are coped with.
*/
}
} else {
id2fragment.put(cid, candidate);
}
} else {
- if(existing==null) {
+ if (existing == null) {
id2fragment.put(cid, null); // signifies candidate is unusable
}
}
@@ -256,7 +259,7 @@ public final class IndexProviderManager implements IElementChangedListener {
* @param provider
*/
public void addIndexProvider(IIndexProvider provider) {
- if(!(provider instanceof IIndexFragmentProvider)) {
+ if (!(provider instanceof IIndexFragmentProvider)) {
/* This engineering compromise can be resolved when we address whether
* IIndexFragment can be made public. The extension point only accepts
* instances of IOfflinePDOMIndexProvider so this should never happen (tm)
@@ -265,7 +268,7 @@ public final class IndexProviderManager implements IElementChangedListener {
return;
}
- IIndexFragmentProvider[] newAllProviders = new IIndexFragmentProvider[allProviders.length+1];
+ IIndexFragmentProvider[] newAllProviders = new IIndexFragmentProvider[allProviders.length + 1];
System.arraycopy(allProviders, 0, newAllProviders, 0, allProviders.length);
newAllProviders[allProviders.length] = (IIndexFragmentProvider) provider;
allProviders = newAllProviders;
@@ -275,12 +278,12 @@ public final class IndexProviderManager implements IElementChangedListener {
* Removes the specified provider by object identity
* Note: This method should not be called for purposes other than testing
* @param provider
- */
+ */
public void removeIndexProvider(IIndexProvider provider) {
ArrayUtil.remove(allProviders, provider);
- if(allProviders[allProviders.length-1]==null) {
- IIndexFragmentProvider[] newAllProviders = new IIndexFragmentProvider[allProviders.length-1];
- System.arraycopy(allProviders, 0, newAllProviders, 0, allProviders.length-1);
+ if (allProviders[allProviders.length - 1] == null) {
+ IIndexFragmentProvider[] newAllProviders = new IIndexFragmentProvider[allProviders.length - 1];
+ System.arraycopy(allProviders, 0, newAllProviders, 0, allProviders.length - 1);
allProviders= newAllProviders;
}
}
@@ -288,12 +291,12 @@ public final class IndexProviderManager implements IElementChangedListener {
private boolean providesForProject(IIndexProvider provider, IProject project) {
ProvisionMapKey key= new ProvisionMapKey(provider, project);
- if(!provisionMap.containsKey(key)) {
+ if (!provisionMap.containsKey(key)) {
try {
ICProject cproject= CoreModel.getDefault().create(project);
provisionMap.put(key, new Boolean(provider.providesFor(cproject)));
- } catch(CoreException ce) {
- CCorePlugin.log(ce);
+ } catch(CoreException e) {
+ CCorePlugin.log(e);
provisionMap.put(key, Boolean.FALSE);
}
}
@@ -325,43 +328,43 @@ public final class IndexProviderManager implements IElementChangedListener {
switch (delta.getKind()) {
case ICElementDelta.REMOVED:
List toRemove = new ArrayList();
- for(Iterator i = provisionMap.keySet().iterator(); i.hasNext(); ) {
+ for (Iterator i = provisionMap.keySet().iterator(); i.hasNext(); ) {
ProvisionMapKey key = i.next();
- if(key.getProject().equals(cproject.getProject())) {
+ if (key.getProject().equals(cproject.getProject())) {
toRemove.add(key);
}
}
- for(ProvisionMapKey key : toRemove) {
+ for (ProvisionMapKey key : toRemove) {
provisionMap.remove(key);
}
break;
}
}
}
-
+
private static class ProvisionMapKey {
private final IIndexProvider provider;
private final IProject project;
-
+
ProvisionMapKey(IIndexProvider provider, IProject project) {
this.provider= provider;
this.project= project;
}
-
+
@Override
public boolean equals(Object obj) {
- if(obj instanceof ProvisionMapKey) {
+ if (obj instanceof ProvisionMapKey) {
ProvisionMapKey other= (ProvisionMapKey) obj;
return other.project.equals(project) && other.provider.equals(provider);
}
return false;
}
-
+
@Override
public int hashCode() {
return project.hashCode() ^ provider.hashCode();
}
-
+
public IProject getProject() {
return project;
}