Copyright (c) 2005, 2015 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2005, 2015 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.ltk.internal.core.refactoring.history; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IRegistryChangeEvent; import org.eclipse.core.runtime.IRegistryChangeListener; import org.eclipse.core.runtime.Platform; import org.eclipse.ltk.core.refactoring.RefactoringContribution; import org.eclipse.ltk.core.refactoring.RefactoringCore; import org.eclipse.ltk.core.refactoring.RefactoringDescriptor; import org.eclipse.ltk.internal.core.refactoring.Messages; import org.eclipse.ltk.internal.core.refactoring.RefactoringCoreMessages; import org.eclipse.ltk.internal.core.refactoring.RefactoringCorePlugin;
Contribution manager for refactorings.
Since:3.2
/** * Contribution manager for refactorings. * * @since 3.2 */
public final class RefactoringContributionManager implements IRegistryChangeListener {
The class attribute
/** The class attribute */
private static final String ATTRIBUTE_CLASS= "class"; //$NON-NLS-1$
The id attribute
/** The id attribute */
private static final String ATTRIBUTE_ID= "id"; //$NON-NLS-1$
The singleton instance
/** The singleton instance */
private static RefactoringContributionManager fInstance= null;
The refactoring contributions extension point
/** The refactoring contributions extension point */
private static final String REFACTORING_CONTRIBUTIONS_EXTENSION_POINT= "refactoringContributions"; //$NON-NLS-1$
Returns the singleton instance of the refactoring contribution manager.
Returns:the singleton instance
/** * Returns the singleton instance of the refactoring contribution manager. * * @return the singleton instance */
public static RefactoringContributionManager getInstance() { if (fInstance == null) fInstance= new RefactoringContributionManager(); return fInstance; }
The refactoring contribution cache
/** The refactoring contribution cache */
private Map<String, RefactoringContribution> fContributionCache= null;
The refactoring contribution cache.
Since:3.3
/** * The refactoring contribution cache. * * @since 3.3 */
private Map<RefactoringContribution, String> fIdCache= null;
Creates a new refactoring contribution manager.
/** * Creates a new refactoring contribution manager. */
private RefactoringContributionManager() { // Not instantiatable }
Connects this manager to the platform's extension registry.
/** * Connects this manager to the platform's extension registry. */
public void connect() { Platform.getExtensionRegistry().addRegistryChangeListener(this, RefactoringCore.ID_PLUGIN); }
Creates a new refactoring descriptor for the specified input data.
Params:
  • id – the unique id of the refactoring
  • project – the project name, or null
  • description – a description
  • comment – the comment, or null
  • arguments – the argument map
  • flags – the flags
Throws:
Returns:the refactoring descriptor
/** * Creates a new refactoring descriptor for the specified input data. * * @param id * the unique id of the refactoring * @param project * the project name, or <code>null</code> * @param description * a description * @param comment * the comment, or <code>null</code> * @param arguments * the argument map * @param flags * the flags * @return the refactoring descriptor * @throws IllegalArgumentException if the argument map contains invalid keys/values */
public RefactoringDescriptor createDescriptor(final String id, final String project, final String description, final String comment, final Map<String, String> arguments, final int flags) throws IllegalArgumentException { Assert.isNotNull(id); Assert.isNotNull(description); Assert.isNotNull(arguments); Assert.isLegal(flags >= RefactoringDescriptor.NONE); final RefactoringContribution contribution= getRefactoringContribution(id); if (contribution != null) return contribution.createDescriptor(id, project, description, comment, arguments, flags); return new DefaultRefactoringDescriptor(id, project, description, comment, arguments, flags); }
Disconnects this manager from the platform's extension registry.
/** * Disconnects this manager from the platform's extension registry. */
public void disconnect() { Platform.getExtensionRegistry().removeRegistryChangeListener(this); }
Returns the refactoring contribution for the refactoring with the specified id.
Params:
  • id – the unique id of the refactoring
Returns:the refactoring contribution, or null if no refactoring contribution has been registered with the specified id
/** * Returns the refactoring contribution for the refactoring with the * specified id. * * @param id * the unique id of the refactoring * @return the refactoring contribution, or <code>null</code> if no * refactoring contribution has been registered with the specified * id */
public RefactoringContribution getRefactoringContribution(final String id) { Assert.isNotNull(id); Assert.isTrue(!"".equals(id)); //$NON-NLS-1$ populateCache(); return fContributionCache.get(id); }
Returns the refactoring id for the specified refactoring contribution.
Params:
  • contribution – the refactoring contribution
Returns:the corresonding refactoring id
Since:3.3
/** * Returns the refactoring id for the specified refactoring contribution. * * @param contribution * the refactoring contribution * @return the corresonding refactoring id * * @since 3.3 */
public String getRefactoringId(final RefactoringContribution contribution) { Assert.isNotNull(contribution); populateCache(); return fIdCache.get(contribution); }
Populates the refactoring contribution cache if necessary.
Since:3.3
/** * Populates the refactoring contribution cache if necessary. * * @since 3.3 */
private void populateCache() { if (fContributionCache == null || fIdCache == null) { fContributionCache= new HashMap<>(32); fIdCache= new HashMap<>(32); final IConfigurationElement[] elements= Platform.getExtensionRegistry().getConfigurationElementsFor(RefactoringCore.ID_PLUGIN, REFACTORING_CONTRIBUTIONS_EXTENSION_POINT); for (IConfigurationElement element : elements) { final String attributeId= element.getAttribute(ATTRIBUTE_ID); final String point= RefactoringCore.ID_PLUGIN + "." + REFACTORING_CONTRIBUTIONS_EXTENSION_POINT; //$NON-NLS-1$ if (attributeId != null && !"".equals(attributeId)) { //$NON-NLS-1$ final String className= element.getAttribute(ATTRIBUTE_CLASS); if (className != null && !"".equals(className)) { //$NON-NLS-1$ try { final Object implementation= element.createExecutableExtension(ATTRIBUTE_CLASS); if (implementation instanceof RefactoringContribution) { if (fContributionCache.get(attributeId) != null) RefactoringCorePlugin.logErrorMessage(Messages.format(RefactoringCoreMessages.RefactoringCorePlugin_duplicate_warning, new String[] { attributeId, point})); fContributionCache.put(attributeId, (RefactoringContribution) implementation); fIdCache.put((RefactoringContribution) implementation, attributeId); } else RefactoringCorePlugin.logErrorMessage(Messages.format(RefactoringCoreMessages.RefactoringCorePlugin_creation_error, new String[] { point, attributeId})); } catch (CoreException exception) { RefactoringCorePlugin.log(exception); } } else RefactoringCorePlugin.logErrorMessage(Messages.format(RefactoringCoreMessages.RefactoringCorePlugin_missing_class_attribute, new String[] { point, attributeId, ATTRIBUTE_CLASS})); } else RefactoringCorePlugin.logErrorMessage(Messages.format(RefactoringCoreMessages.RefactoringCorePlugin_missing_attribute, new String[] { point, ATTRIBUTE_ID})); } } } @Override public void registryChanged(final IRegistryChangeEvent event) { fContributionCache= null; fIdCache= null; } }