diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
index e60e68fb651..88d5170ff0d 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
+++ b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
@@ -922,7 +922,6 @@ The value of this attribute is used only in case languageInfoCalculator is not s
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.
-
@@ -1933,6 +1932,7 @@ If the "buildPathResolver" attribute is specified, the "pathDelim
+
@@ -2325,6 +2325,23 @@ The only difference between this element and the resourceConfiguration is that r
+
+
+
+ Checks whether the project containing the resource has a given nature
+
+
+
+
+
+
+ The id of the nature
+
+
+
+
+
+
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CompositeExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CompositeExpression.java
index c8c1e962496..cb57fe33287 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CompositeExpression.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CompositeExpression.java
@@ -39,23 +39,24 @@ public abstract class CompositeExpression implements IBooleanExpression {
protected IBooleanExpression createExpression(IManagedConfigElement element){
String name = element.getName();
- if(AndExpression.NAME.equals(name))
+ if (AndExpression.NAME.equals(name))
return new AndExpression(element);
- else if(OrExpression.NAME.equals(name))
+ else if (OrExpression.NAME.equals(name))
return new OrExpression(element);
- else if(NotExpression.NAME.equals(name))
+ else if (NotExpression.NAME.equals(name))
return new NotExpression(element);
- else if(CheckOptionExpression.NAME.equals(name))
+ else if (CheckOptionExpression.NAME.equals(name))
return new CheckOptionExpression(element);
- else if(CheckStringExpression.NAME.equals(name))
+ else if (CheckStringExpression.NAME.equals(name))
return new CheckStringExpression(element);
- else if(FalseExpression.NAME.equals(name))
+ else if (FalseExpression.NAME.equals(name))
return new FalseExpression(element);
- else if(CheckHolderExpression.NAME.equals(name))
+ else if (CheckHolderExpression.NAME.equals(name))
return new CheckHolderExpression(element);
- else if(CheckBuildPropertyExpression.NAME.equals(name)){
+ else if (CheckBuildPropertyExpression.NAME.equals(name))
return new CheckBuildPropertyExpression(element);
- }
+ else if (HasNatureExpression.NAME.equals(name))
+ return new HasNatureExpression(element);
return null;
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/HasNatureExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/HasNatureExpression.java
new file mode 100644
index 00000000000..6598f217dbc
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/HasNatureExpression.java
@@ -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;
+ }
+ }
+
+}