mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 09:46:02 +02:00
Added hasNature expression for MBS enablement. This allows things like setting magic options when the C++ nature is in effect for a project, like for the linker.
This commit is contained in:
parent
d2b052c767
commit
04e799d307
3 changed files with 100 additions and 10 deletions
|
@ -922,7 +922,6 @@ The value of this attribute is used only in case languageInfoCalculator is not s
|
||||||
<documentation>
|
<documentation>
|
||||||
Specifies the name of the class that implements org.eclipse.cdt.managedbuilder.core.ILanguageInfoCalculator for dinamic providing the language id info.
|
Specifies the name of the class that implements org.eclipse.cdt.managedbuilder.core.ILanguageInfoCalculator for dinamic providing the language id info.
|
||||||
Overrides language id specified with the languageId attribute.
|
Overrides language id specified with the languageId attribute.
|
||||||
|
|
||||||
</documentation>
|
</documentation>
|
||||||
<appInfo>
|
<appInfo>
|
||||||
<meta.attribute kind="java" basedOn=":org.eclipse.cdt.managedbuilder.core.ILanguageInfoCalculator"/>
|
<meta.attribute kind="java" basedOn=":org.eclipse.cdt.managedbuilder.core.ILanguageInfoCalculator"/>
|
||||||
|
@ -1933,6 +1932,7 @@ If the "buildPathResolver" attribute is specified, the "pathDelim
|
||||||
<element ref="false" minOccurs="0" maxOccurs="unbounded"/>
|
<element ref="false" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<element ref="checkHolder" minOccurs="0" maxOccurs="unbounded"/>
|
<element ref="checkHolder" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<element ref="checkBuildProperty" minOccurs="0" maxOccurs="unbounded"/>
|
<element ref="checkBuildProperty" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<element ref="hasNature" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</choice>
|
</choice>
|
||||||
<attribute name="type" type="string" use="default" value="ALL">
|
<attribute name="type" type="string" use="default" value="ALL">
|
||||||
<annotation>
|
<annotation>
|
||||||
|
@ -2325,6 +2325,23 @@ The only difference between this element and the resourceConfiguration is that r
|
||||||
</complexType>
|
</complexType>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
|
<element name="hasNature">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
Checks whether the project containing the resource has a given nature
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
<complexType>
|
||||||
|
<attribute name="natureId" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
The id of the nature
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
<annotation>
|
<annotation>
|
||||||
<appInfo>
|
<appInfo>
|
||||||
<meta.section type="since"/>
|
<meta.section type="since"/>
|
||||||
|
|
|
@ -39,23 +39,24 @@ public abstract class CompositeExpression implements IBooleanExpression {
|
||||||
|
|
||||||
protected IBooleanExpression createExpression(IManagedConfigElement element){
|
protected IBooleanExpression createExpression(IManagedConfigElement element){
|
||||||
String name = element.getName();
|
String name = element.getName();
|
||||||
if(AndExpression.NAME.equals(name))
|
if (AndExpression.NAME.equals(name))
|
||||||
return new AndExpression(element);
|
return new AndExpression(element);
|
||||||
else if(OrExpression.NAME.equals(name))
|
else if (OrExpression.NAME.equals(name))
|
||||||
return new OrExpression(element);
|
return new OrExpression(element);
|
||||||
else if(NotExpression.NAME.equals(name))
|
else if (NotExpression.NAME.equals(name))
|
||||||
return new NotExpression(element);
|
return new NotExpression(element);
|
||||||
else if(CheckOptionExpression.NAME.equals(name))
|
else if (CheckOptionExpression.NAME.equals(name))
|
||||||
return new CheckOptionExpression(element);
|
return new CheckOptionExpression(element);
|
||||||
else if(CheckStringExpression.NAME.equals(name))
|
else if (CheckStringExpression.NAME.equals(name))
|
||||||
return new CheckStringExpression(element);
|
return new CheckStringExpression(element);
|
||||||
else if(FalseExpression.NAME.equals(name))
|
else if (FalseExpression.NAME.equals(name))
|
||||||
return new FalseExpression(element);
|
return new FalseExpression(element);
|
||||||
else if(CheckHolderExpression.NAME.equals(name))
|
else if (CheckHolderExpression.NAME.equals(name))
|
||||||
return new CheckHolderExpression(element);
|
return new CheckHolderExpression(element);
|
||||||
else if(CheckBuildPropertyExpression.NAME.equals(name)){
|
else if (CheckBuildPropertyExpression.NAME.equals(name))
|
||||||
return new CheckBuildPropertyExpression(element);
|
return new CheckBuildPropertyExpression(element);
|
||||||
}
|
else if (HasNatureExpression.NAME.equals(name))
|
||||||
|
return new HasNatureExpression(element);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2007 QNX Software Systems 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:
|
||||||
|
* QNX Software Systems - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.managedbuilder.internal.enablement;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IOption;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IProjectDescription;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Doug Schaefer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class HasNatureExpression implements IBooleanExpression {
|
||||||
|
|
||||||
|
public static final String NAME = "hasNature";
|
||||||
|
|
||||||
|
private static final String NATURE_ID = "natureId";
|
||||||
|
|
||||||
|
private String natureId;
|
||||||
|
|
||||||
|
public HasNatureExpression(IManagedConfigElement element) {
|
||||||
|
natureId = element.getAttribute(NATURE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder,
|
||||||
|
IOption option) {
|
||||||
|
// All null checks returns false to keep this expression
|
||||||
|
// from accidentally turning things on. Although
|
||||||
|
// a 'z' value would be better to avoid having any affect.
|
||||||
|
if (natureId == null || natureId.length() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IConfiguration config = rcInfo.getParent();
|
||||||
|
if (config == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IResource resource = config.getOwner();
|
||||||
|
if (resource == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IProject project = resource.getProject();
|
||||||
|
try {
|
||||||
|
IProjectDescription projDesc = project.getDescription();
|
||||||
|
String[] natures = projDesc.getNatureIds();
|
||||||
|
for (int i = 0; i < natures.length; ++i) {
|
||||||
|
if (natureId.equals(natures[i]))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Not found
|
||||||
|
return false;
|
||||||
|
} catch (CoreException e) {
|
||||||
|
ManagedBuilderCorePlugin.log(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue