diff options
Diffstat (limited to 'bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java')
-rw-r--r-- | bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java | 246 |
1 files changed, 123 insertions, 123 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java index cb3ad2c40..3b051a58d 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java @@ -33,9 +33,9 @@ import org.eclipse.team.internal.core.*; * must minimally: * <ol> * <li>extend <code>RepositoryProvider</code> - * <li>define a repository extension in <code>plugin.xml</code>. + * <li>define a repository extension in <code>plugin.xml</code>. * Here is an example extension point definition: - * + * * <code> * <br><extension point="org.eclipse.team.core.repository"> * <br> <repository @@ -54,24 +54,24 @@ import org.eclipse.team.internal.core.*; * @since 2.0 */ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { - + private final static String TEAM_SETID = "org.eclipse.team.repository-provider"; //$NON-NLS-1$ private final static List AllProviderTypeIds = initializeAllProviderTypes(); - + // the project instance that this nature is assigned to - private IProject project; - + private IProject project; + // lock to ensure that map/unmap and getProvider support concurrency private static final ILock mappingLock = Job.getJobManager().newLock(); - + // Session property used to identify projects that are not mapped private static final Object NOT_MAPPED = new Object(); - + /** * Instantiate a new RepositoryProvider with concrete class by given providerID * and associate it with project. - * + * * @param project the project to be mapped * @param id the ID of the provider to be mapped to the project * @throws TeamException if @@ -89,16 +89,16 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { // mappingLock. This is required because a caller of getProvider // may hold a scheduling rule before getProvider is invoked but // getProvider itself does not (and can not) obtain a scheduling rule. - // Thus, the locking order is always scheduling rule followed by + // Thus, the locking order is always scheduling rule followed by // mappingLock. Job.getJobManager().beginRule(rule, null); try { mappingLock.acquire(); RepositoryProvider existingProvider = null; - + if(project.getPersistentProperty(TeamPlugin.PROVIDER_PROP_KEY) != null) existingProvider = getProvider(project); // get the real one, not the nature one - + //if we already have a provider, and its the same ID, we're ok //if the ID's differ, unmap the existing. if(existingProvider != null) { @@ -107,11 +107,11 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { else unmap(project); } - + // Create the provider as a session property before adding the persistent // property to ensure that the provider can be instantiated RepositoryProvider provider = mapNewProvider(project, id); - + //mark it with the persistent ID for filtering try { project.setPersistentProperty(TeamPlugin.PROVIDER_PROP_KEY, id); @@ -124,17 +124,17 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { TeamPlugin.log(IStatus.ERROR, NLS.bind(Messages.RepositoryProvider_couldNotClearAfterError, new String[] { project.getName(), id }), inner); } throw outer; - } - + } + provider.configure(); - + //adding the nature would've caused project description delta, so trigger one project.touch(null); - + // Set the rule factory for the provider after the touch // so the touch does not fail due to incompatible modify rules TeamHookDispatcher.setProviderRuleFactory(project, provider.getRuleFactory()); - + // Notify any listeners RepositoryProviderManager.getInstance().providerMapped(provider); } finally { @@ -145,13 +145,13 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } finally { Job.getJobManager().endRule(rule); } - } + } /* * Instantiate the provider denoted by ID and store it in the session property. * Return the new provider instance. If a TeamException is thrown, it is * guaranteed that the session property will not be set. - * + * * @param project * @param id * @return RepositoryProvider @@ -162,15 +162,15 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { final RepositoryProvider provider = newProvider(id); // instantiate via extension point if(provider == null) - throw new TeamException(NLS.bind(Messages.RepositoryProvider_couldNotInstantiateProvider, new String[] { project.getName(), id })); - + throw new TeamException(NLS.bind(Messages.RepositoryProvider_couldNotInstantiateProvider, new String[] { project.getName(), id })); + // validate that either the provider supports linked resources or the project has no linked resources if (!provider.canHandleLinkedResourceURI()) { try { project.accept(new IResourceProxyVisitor() { public boolean visit(IResourceProxy proxy) throws CoreException { if (proxy.isLinked()) { - if (!provider.canHandleLinkedResources() || + if (!provider.canHandleLinkedResources() || proxy.requestFullPath().segmentCount() > 2 || !EFS.SCHEME_FILE.equals(proxy.requestResource().getLocationURI().getScheme())) throw new TeamException(new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedURIsExist, new String[] { project.getName(), id }), null)); @@ -192,14 +192,14 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { for (int i = 0; i < members.length; i++) { IResource resource = members[i]; if (resource.isLinked()) { - throw new TeamException(new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedResourcesExist, new String[] { project.getName(), id }), null)); + throw new TeamException(new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedResourcesExist, new String[] { project.getName(), id }), null)); } } } catch (CoreException e) { throw TeamPlugin.wrapException(e); } } - + //store provider instance as session property try { project.setSessionProperty(TeamPlugin.PROVIDER_PROP_KEY, provider); @@ -208,7 +208,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { throw TeamPlugin.wrapException(e); } return provider; - } + } private static RepositoryProvider mapExistingProvider(IProject project, String id) throws TeamException { try { @@ -250,12 +250,12 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { try { mappingLock.acquire(); String id = project.getPersistentProperty(TeamPlugin.PROVIDER_PROP_KEY); - + //If you tried to remove a non-existant nature it would fail, so we need to as well with the persistent prop if(id == null) { - throw new TeamException(NLS.bind(Messages.RepositoryProvider_No_Provider_Registered, new String[] { project.getName() })); + throw new TeamException(NLS.bind(Messages.RepositoryProvider_No_Provider_Registered, new String[] { project.getName() })); } - + //This will instantiate one if it didn't already exist, //which is ok since we need to call deconfigure() on it for proper lifecycle RepositoryProvider provider = getProvider(project); @@ -263,23 +263,23 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { // There is a persistent property but the provider cannot be obtained. // The reason could be that the provider's plugin is no longer available. // Better log it just in case this is unexpected. - TeamPlugin.log(IStatus.ERROR, NLS.bind(Messages.RepositoryProvider_couldNotInstantiateProvider, new String[] { project.getName(), id }), null); + TeamPlugin.log(IStatus.ERROR, NLS.bind(Messages.RepositoryProvider_couldNotInstantiateProvider, new String[] { project.getName(), id }), null); } - + if (provider != null) provider.deconfigure(); - + project.setSessionProperty(TeamPlugin.PROVIDER_PROP_KEY, null); project.setPersistentProperty(TeamPlugin.PROVIDER_PROP_KEY, null); - + if (provider != null) provider.deconfigured(); - + //removing the nature would've caused project description delta, so trigger one project.touch(null); - + // Change the rule factory after the touch in order to // avoid rule incompatibility TeamHookDispatcher.setProviderRuleFactory(project, null); - + // Notify any listeners RepositoryProviderManager.getInstance().providerUnmapped(project); } finally { @@ -290,8 +290,8 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } finally { Job.getJobManager().endRule(rule); } - } - + } + /* * Return the provider mapped to project, or null if none; */ @@ -301,7 +301,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { return (RepositoryProvider) provider; } return null; - } + } /** @@ -312,21 +312,21 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } /** - * Configures the provider for the given project. This method is called after <code>setProject</code>. + * Configures the provider for the given project. This method is called after <code>setProject</code>. * If an exception is generated during configuration * of the project, the provider will not be assigned to the project. - * - * @throws CoreException if the configuration fails. + * + * @throws CoreException if the configuration fails. */ abstract public void configureProject() throws CoreException; - + /** * Configures the nature for the given project. This is called by <code>RepositoryProvider.map()</code> * the first time a provider is mapped to a project. It is not intended to be called by clients. - * + * * @throws CoreException if this method fails. If the configuration fails the provider will not be * associated with the project. - * + * * @see RepositoryProvider#configureProject() */ final public void configure() throws CoreException { @@ -336,7 +336,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { try { RepositoryProvider.unmap(getProject()); } catch(TeamException e2) { - throw new CoreException(new Status(IStatus.ERROR, TeamPlugin.ID, 0, Messages.RepositoryProvider_Error_removing_nature_from_project___1 + getID(), e2)); + throw new CoreException(new Status(IStatus.ERROR, TeamPlugin.ID, 0, Messages.RepositoryProvider_Error_removing_nature_from_project___1 + getID(), e2)); } throw e; } @@ -349,30 +349,30 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { */ protected void deconfigured() { } - + /** - * Answer the id of this provider instance. The id should be the repository provider's + * Answer the id of this provider instance. The id should be the repository provider's * id as defined in the provider plugin's plugin.xml. - * + * * @return the nature id of this provider */ abstract public String getID(); /** - * Returns an <code>IFileModificationValidator</code> for pre-checking operations + * Returns an <code>IFileModificationValidator</code> for pre-checking operations * that modify the contents of files. * Returns <code>null</code> if the provider does not wish to participate in * file modification validation. - * @return an <code>IFileModificationValidator</code> for pre-checking operations + * @return an <code>IFileModificationValidator</code> for pre-checking operations * that modify the contents of files - * + * * @see org.eclipse.core.resources.IFileModificationValidator * @deprecated use {@link #getFileModificationValidator2()} */ public IFileModificationValidator getFileModificationValidator() { return null; } - + /** * Returns a {@link FileModificationValidator} for pre-checking operations * that modify the contents of files. Returns <code>null</code> if the @@ -386,10 +386,10 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { * <p> * This method is not intended to be called by clients. Clients should * use the {@link IWorkspace#validateEdit(IFile[], Object)} method instead. - * + * * @return an <code>FileModificationValidator</code> for pre-checking * operations that modify the contents of files - * + * * @see FileModificationValidator * @see IWorkspace#validateEdit(IFile[], Object) * @since 3.3 @@ -414,7 +414,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } }; } - + /** * Returns an <code>IFileHistoryProvider</code> which can be used to access * file histories. By default, returns <code>null</code>. Subclasses may override. @@ -425,46 +425,46 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { public IFileHistoryProvider getFileHistoryProvider(){ return null; } - + /** * Returns an <code>IMoveDeleteHook</code> for handling moves and deletes - * that occur within projects managed by the provider. This allows providers - * to control how moves and deletes occur and includes the ability to prevent them. + * that occur within projects managed by the provider. This allows providers + * to control how moves and deletes occur and includes the ability to prevent them. * <p> * Returning <code>null</code> signals that the default move and delete behavior is desired. * @return an <code>IMoveDeleteHook</code> for handling moves and deletes * that occur within projects managed by the provider - * + * * @see org.eclipse.core.resources.team.IMoveDeleteHook */ public IMoveDeleteHook getMoveDeleteHook() { return null; } - + /** * Returns a brief description of this provider. The exact details of the * representation are unspecified and subject to change, but the following * may be regarded as typical: - * + * * "SampleProject:org.eclipse.team.cvs.provider" - * + * * @return a string description of this provider */ public String toString() { - return NLS.bind(Messages.RepositoryProvider_toString, new String[] { getProject().getName(), getID() }); + return NLS.bind(Messages.RepositoryProvider_toString, new String[] { getProject().getName(), getID() }); } - + /** * Returns all known (registered) RepositoryProvider ids. - * + * * @return an array of registered repository provider ids. */ final public static String[] getAllProviderTypeIds() { IProjectNatureDescriptor[] desc = ResourcesPlugin.getWorkspace().getNatureDescriptors(); Set teamSet = new HashSet(); - + teamSet.addAll(AllProviderTypeIds); // add in all the ones we know via extension point - + //fall back to old method of nature ID to find any for backwards compatibility for (int i = 0; i < desc.length; i++) { String[] setIds = desc[i].getNatureSetIds(); @@ -476,10 +476,10 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } return (String[]) teamSet.toArray(new String[teamSet.size()]); } - + /** - * Returns the provider for a given IProject or <code>null</code> if a provider is not associated with - * the project or if the project is closed or does not exist. This method should be called if the caller + * Returns the provider for a given IProject or <code>null</code> if a provider is not associated with + * the project or if the project is closed or does not exist. This method should be called if the caller * is looking for <b>any</b> repository provider. Otherwise call <code>getProvider(project, id)</code> * to look for a specific repository provider type. * </p> @@ -487,9 +487,9 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { * @return the repository provider associated with the project */ final public static RepositoryProvider getProvider(IProject project) { - try { + try { if (project.isAccessible()) { - + //----------------------------- //First, look for the session property RepositoryProvider provider = lookupProviderProp(project); @@ -499,15 +499,15 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { // This is done to avoid accessing the persistent property store if (isMarkedAsUnshared(project)) return null; - + // ----------------------------- //Next, check if it has the ID as a persistent property, if yes then instantiate provider String id = project.getPersistentProperty(TeamPlugin.PROVIDER_PROP_KEY); if(id != null) return mapExistingProvider(project, id); - + //Couldn't find using new method, fall back to lookup using natures for backwards compatibility - //----------------------------- + //----------------------------- IProjectDescription projectDesc = project.getDescription(); String[] natureIds = projectDesc.getNatureIds(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); @@ -521,7 +521,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { for (int j = 0; j < setIds.length; j++) { if(setIds[j].equals(TEAM_SETID)) { return getProvider(project, natureIds[i]); - } + } } } } @@ -535,7 +535,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } return null; } - + /* * Return whether the given exception is acceptable during a getProvider(). * If the exception is acceptable, it is assumed that there is no provider @@ -546,10 +546,10 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } /** - * Returns a provider of type with the given id if associated with the given project + * Returns a provider of type with the given id if associated with the given project * or <code>null</code> if the project is not associated with a provider of that type * or the nature id is that of a non-team repository provider nature. - * + * * @param project the project to query for a provider * @param id the repository provider id * @return the repository provider @@ -570,11 +570,11 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { // This is done to avoid accessing the persistent property store if (isMarkedAsUnshared(project)) return null; - + // There isn't one so check the persistent property String existingID = project.getPersistentProperty(TeamPlugin.PROVIDER_PROP_KEY); if(id.equals(existingID)) { - // The ids are equal so instantiate and return + // The ids are equal so instantiate and return RepositoryProvider newProvider = mapExistingProvider(project, id); if (newProvider!= null && newProvider.getID().equals(id)) { return newProvider; @@ -583,7 +583,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { return null; } } - + //couldn't find using new method, fall back to lookup using natures for backwards compatibility //----------------------------- @@ -592,12 +592,12 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { IProjectNatureDescriptor desc = ResourcesPlugin.getWorkspace().getNatureDescriptor(id); if(desc == null) //for backwards compatibility, may not have any nature by that ID return null; - + String[] setIds = desc.getNatureSetIds(); for (int i = 0; i < setIds.length; i++) { if(setIds[i].equals(TEAM_SETID)) { return (RepositoryProvider)project.getNature(id); - } + } } markAsUnshared(project); } @@ -609,20 +609,20 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { } return null; } - + /** * Returns whether the given project is shared or not. This is a lightweight * method in that it will not instantiate a provider instance (as * <code>getProvider</code> would) if one is not already instantiated. - * + * * Note that IProject.touch() generates a project description delta. This, in combination * with isShared() can be used to be notified of sharing/unsharing of projects. - * + * * @param project the project being tested. * @return boolean - * + * * @see #getProvider(IProject) - * + * * @since 2.1 */ public static boolean isShared(IProject project) { @@ -642,7 +642,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { return false; } } - + private static boolean isMarkedAsUnshared(IProject project) { try { return project.getSessionProperty(TeamPlugin.PROVIDER_PROP_KEY) == NOT_MAPPED; @@ -672,10 +672,10 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { public void setProject(IProject project) { this.project = project; } - + private static List initializeAllProviderTypes() { List allIDs = new ArrayList(); - + TeamPlugin plugin = TeamPlugin.getPlugin(); if (plugin != null) { IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.ID, TeamPlugin.REPOSITORY_EXTENSION); @@ -710,17 +710,17 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { TeamPlugin.log(e); } catch (ClassCastException e) { String className = configElements[j].getAttribute("class"); //$NON-NLS-1$ - TeamPlugin.log(IStatus.ERROR, NLS.bind(Messages.RepositoryProvider_invalidClass, new String[] { id, className }), e); + TeamPlugin.log(IStatus.ERROR, NLS.bind(Messages.RepositoryProvider_invalidClass, new String[] { id, className }), e); } return null; } } } - } + } } return null; - } - + } + /** * Method validateCreateLink is invoked by the Platform Core TeamHook when a * linked resource is about to be added to the provider's project. It should @@ -728,14 +728,14 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { * subclasses (although it is possible to do so in special cases). * Subclasses can indicate that they support linked resources by overriding * the <code>canHandleLinkedResources()</code> method. - * + * * @param resource see <code>org.eclipse.core.resources.team.TeamHook</code> * @param updateFlags see <code>org.eclipse.core.resources.team.TeamHook</code> * @param location see <code>org.eclipse.core.resources.team.TeamHook</code> * @return IStatus see <code>org.eclipse.core.resources.team.TeamHook</code> - * + * * @see RepositoryProvider#canHandleLinkedResources() - * + * * @deprecated see {@link #validateCreateLink(IResource, int, URI) } instead * @since 2.1 */ @@ -743,10 +743,10 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { if (canHandleLinkedResources()) { return Team.OK_STATUS; } else { - return new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedResourcesNotSupported, new String[] { getProject().getName(), getID() }), null); + return new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedResourcesNotSupported, new String[] { getProject().getName(), getID() }), null); } } - + /** * Method validateCreateLink is invoked by the Platform Core TeamHook when a * linked resource is about to be added to the provider's project. It should @@ -754,14 +754,14 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { * subclasses (although it is possible to do so in special cases). * Subclasses can indicate that they support linked resources by overriding * the <code>canHandleLinkedResourcesAtArbitraryDepth()</code> method. - * + * * @param resource see <code>org.eclipse.core.resources.team.TeamHook</code> * @param updateFlags see <code>org.eclipse.core.resources.team.TeamHook</code> * @param location see <code>org.eclipse.core.resources.team.TeamHook</code> * @return IStatus see <code>org.eclipse.core.resources.team.TeamHook</code> - * + * * @see RepositoryProvider#canHandleLinkedResourceURI() - * + * * @since 3.2 */ public IStatus validateCreateLink(IResource resource, int updateFlags, URI location) { @@ -773,30 +773,30 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { if (canHandleLinkedResourceURI()) { return Team.OK_STATUS; } else { - return new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedURIsNotSupported, new String[] { getProject().getName(), getID() }), null); + return new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.LINKING_NOT_ALLOWED, NLS.bind(Messages.RepositoryProvider_linkedURIsNotSupported, new String[] { getProject().getName(), getID() }), null); } } - + /** * Method canHandleLinkedResources should be overridden by subclasses who * support linked resources. At a minimum, supporting linked resources - * requires changes to the move/delete hook + * requires changes to the move/delete hook * {@link org.eclipse.core.resources.team.IMoveDeleteHook}. This method is * called after the RepositoryProvider is instantiated but before * <code>setProject()</code> is invoked so it will not have access to any * state determined from the <code>setProject()</code> method. * @return boolean - * + * * @see org.eclipse.core.resources.team.IMoveDeleteHook - * + * * @since 2.1 - * + * * @deprecated see {@link #canHandleLinkedResourceURI() } */ public boolean canHandleLinkedResources() { return canHandleLinkedResourceURI(); } - + /** * Return whether this repository provider can handle linked resources that * are located via a URI (i.e. may not be on the local file system) or occur @@ -808,24 +808,24 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { * RepositoryProvider is instantiated but before <code>setProject()</code> * is invoked so it will not have access to any state determined from the * <code>setProject()</code> method. - * + * * @return whether this repository provider can handle linked resources that * are located via a URI or occur at an arbitrary depth in the * project - * + * * @see #validateCreateLink(IResource, int, URI) - * + * * @since 3.2 */ public boolean canHandleLinkedResourceURI() { return false; } - - + + /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ - public Object getAdapter(Class adapter) { + public Object getAdapter(Class adapter) { return null; } @@ -836,7 +836,7 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { * on the resources in the project the provider is mapped to. * <p> * By default, the factory returned by this method is pessimistic and - * obtains the workspace lock for all operations that could result in a + * obtains the workspace lock for all operations that could result in a * callback to the provider (either through the <code>IMoveDeleteHook</code> * or <code>IFileModificationValidator</code>). This is done to ensure that * older providers are not broken. However, providers should override this @@ -850,10 +850,10 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { public IResourceRuleFactory getRuleFactory() { return new PessimisticResourceRuleFactory(); } - + /** * Return a {@link Subscriber} that describes the synchronization state - * of the resources contained in the project associated with this + * of the resources contained in the project associated with this * provider. The subscriber is obtained from the {@link RepositoryProviderType} * associated with a provider and is thus shared for all providers of the * same type. @@ -866,4 +866,4 @@ public abstract class RepositoryProvider implements IProjectNature, IAdaptable { return type.getSubscriber(); return null; } -} +} |