Copyright (c) 2000, 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 James Blackburn (Broadcom Corp.) - ongoing development Lars Vogel - Bug 473427
/******************************************************************************* * Copyright (c) 2000, 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 * James Blackburn (Broadcom Corp.) - ongoing development * Lars Vogel <Lars.Vogel@vogella.com> - Bug 473427 *******************************************************************************/
package org.eclipse.core.internal.resources; import java.util.ArrayList; import org.eclipse.core.internal.utils.Messages; import org.eclipse.core.resources.IProjectNatureDescriptor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.*; import org.eclipse.osgi.util.NLS; /** */ public class ProjectNatureDescriptor implements IProjectNatureDescriptor { protected String id; protected String label; protected String[] requiredNatures; protected String[] natureSets; protected String[] builderIds; protected String[] contentTypeIds; protected boolean allowLinking = true; //descriptors that are in a dependency cycle are never valid protected boolean hasCycle = false; //colours used by cycle detection algorithm protected byte colour = 0;
Creates a new descriptor based on the given extension markup.
Throws:
  • CoreException – if the given nature extension is not correctly formed.
/** * Creates a new descriptor based on the given extension markup. * @exception CoreException if the given nature extension is not correctly formed. */
protected ProjectNatureDescriptor(IExtension natureExtension) throws CoreException { readExtension(natureExtension); } protected void fail() throws CoreException { fail(NLS.bind(Messages.natures_invalidDefinition, id)); } protected void fail(String reason) throws CoreException { throw new ResourceException(new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, 1, reason, null)); }
Returns the IDs of the incremental builders that this nature claims to own. These builders do not necessarily exist in the registry.
/** * Returns the IDs of the incremental builders that this nature claims to * own. These builders do not necessarily exist in the registry. */
public String[] getBuilderIds() { return builderIds; }
Returns the IDs of the content types this nature declares to have affinity with. These content types do not necessarily exist in the registry.
/** * Returns the IDs of the content types this nature declares to * have affinity with. These content types do not necessarily exist in the registry. */
public String[] getContentTypeIds() { return contentTypeIds; }
See Also:
  • getNatureId.getNatureId()
/** * @see IProjectNatureDescriptor#getNatureId() */
@Override public String getNatureId() { return id; }
See Also:
  • getLabel.getLabel()
/** * @see IProjectNatureDescriptor#getLabel() */
@Override public String getLabel() { return label; }
See Also:
  • getRequiredNatureIds.getRequiredNatureIds()
/** * @see IProjectNatureDescriptor#getRequiredNatureIds() */
@Override public String[] getRequiredNatureIds() { return requiredNatures; }
See Also:
  • getNatureSetIds.getNatureSetIds()
/** * @see IProjectNatureDescriptor#getNatureSetIds() */
@Override public String[] getNatureSetIds() { return natureSets; }
See Also:
  • isLinkingAllowed.isLinkingAllowed()
/** * @see IProjectNatureDescriptor#isLinkingAllowed() */
@Override public boolean isLinkingAllowed() { return allowLinking; }
Initialize this nature descriptor based on the provided extension point.
/** * Initialize this nature descriptor based on the provided extension point. */
protected void readExtension(IExtension natureExtension) throws CoreException { //read the extension id = natureExtension.getUniqueIdentifier(); if (id == null) { fail(Messages.natures_missingIdentifier); } label = natureExtension.getLabel(); IConfigurationElement[] elements = natureExtension.getConfigurationElements(); int count = elements.length; ArrayList<String> requiredList = new ArrayList<>(count); ArrayList<String> setList = new ArrayList<>(count); ArrayList<String> builderList = new ArrayList<>(count); ArrayList<String> contentTypeList = new ArrayList<>(count); for (int i = 0; i < count; i++) { IConfigurationElement element = elements[i]; String name = element.getName(); if (name.equalsIgnoreCase("requires-nature")) { //$NON-NLS-1$ String attribute = element.getAttribute("id"); //$NON-NLS-1$ if (attribute == null) fail(); requiredList.add(attribute); } else if (name.equalsIgnoreCase("one-of-nature")) { //$NON-NLS-1$ String attribute = element.getAttribute("id"); //$NON-NLS-1$ if (attribute == null) fail(); setList.add(attribute); } else if (name.equalsIgnoreCase("builder")) { //$NON-NLS-1$ String attribute = element.getAttribute("id"); //$NON-NLS-1$ if (attribute == null) fail(); builderList.add(attribute); } else if (name.equalsIgnoreCase("content-type")) { //$NON-NLS-1$ String attribute = element.getAttribute("id"); //$NON-NLS-1$ if (attribute == null) fail(); contentTypeList.add(attribute); } else if (name.equalsIgnoreCase("options")) { //$NON-NLS-1$ String attribute = element.getAttribute("allowLinking"); //$NON-NLS-1$ //when in doubt (missing attribute, wrong value) default to allow linking allowLinking = !Boolean.FALSE.toString().equalsIgnoreCase(attribute); } } requiredNatures = requiredList.toArray(new String[requiredList.size()]); natureSets = setList.toArray(new String[setList.size()]); builderIds = builderList.toArray(new String[builderList.size()]); contentTypeIds = contentTypeList.toArray(new String[contentTypeList.size()]); }
Prints out a string representation for debugging purposes only.
/** * Prints out a string representation for debugging purposes only. */
@Override public String toString() { return "ProjectNatureDescriptor(" + id + ")"; //$NON-NLS-1$ //$NON-NLS-2$ } }