From 0a90b65e971ba1c562a9f04e454405fafbba7c84 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Mon, 25 Apr 2011 04:38:22 +0000 Subject: [PATCH] bug 222817: [Contribution] - + diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java index c6f726efc71..65fdaadca1d 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java @@ -34,6 +34,7 @@ import org.eclipse.cdt.managedbuilder.core.tests.ManagedProject21MakefileTests; import org.eclipse.cdt.managedbuilder.core.tests.ManagedProject30MakefileTests; import org.eclipse.cdt.managedbuilder.core.tests.ManagedProjectUpdateTests; import org.eclipse.cdt.managedbuilder.core.tests.MultiVersionSupportTests; +import org.eclipse.cdt.managedbuilder.core.tests.OptionCategoryEnablementTests; import org.eclipse.cdt.managedbuilder.core.tests.OptionEnablementTests; import org.eclipse.cdt.managedbuilder.core.tests.PathConverterTest; import org.eclipse.cdt.managedbuilder.core.tests.ResourceBuildCoreTests; @@ -74,6 +75,7 @@ public class AllManagedBuildTests { suite.addTest(ManagedBuildTCSupportedTest.suite()); suite.addTest(MultiVersionSupportTests.suite()); suite.addTest(OptionEnablementTests.suite()); + suite.addTest(OptionCategoryEnablementTests.suite()); suite.addTest(ManagedBuildDependencyCalculatorTests.suite()); suite.addTest(BuildDescriptionModelTests.suite()); suite.addTest(PathConverterTest.suite()); diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/OptionCategoryEnablementTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/OptionCategoryEnablementTests.java new file mode 100644 index 00000000000..3d14af36dfd --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/OptionCategoryEnablementTests.java @@ -0,0 +1,197 @@ +/******************************************************************************* + * Copyright (c) 2011 Intel Corporation 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: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.managedbuilder.core.tests; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.eclipse.cdt.managedbuilder.core.BuildException; +import org.eclipse.cdt.managedbuilder.core.IBuildObject; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IFileInfo; +import org.eclipse.cdt.managedbuilder.core.IFolderInfo; +import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; +import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOptionCategory; +import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; +import org.eclipse.cdt.managedbuilder.core.IResourceInfo; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; + +public class OptionCategoryEnablementTests extends TestCase { + + private static final String testName = "optcaten"; //$NON-NLS-1$ + private static boolean fHandleValueCalled; + + public static Test suite() { + return new TestSuite(OptionCategoryEnablementTests.class); + } + + private void resetValueHandler(){ + fHandleValueCalled = false; + } + + public void testEnablement(){ + resetValueHandler(); + + IProject project = ManagedBuildTestHelper.createProject(testName, + "cdt.managedbuild.target.enablement.exe"); //$NON-NLS-1$ + IFolder folder = ManagedBuildTestHelper.createFolder(project, "Folder"); + IFile aFile = ManagedBuildTestHelper.createFile(project, "a.c"); //$NON-NLS-1$ + + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); + IConfiguration cfg = info.getManagedProject().getConfigurations()[0]; + assertFalse(fHandleValueCalled); + + doTestEnablement(cfg, folder, aFile); + + ManagedBuildTestHelper.removeProject(testName); + } + + private void doTestEnablement(IBuildObject cfg, IFolder folder, IFile file){ + final String TOOL_ID = "enablement.this"; //$NON-NLS-1$ + final String OPTION_ID = "enablement.trigger"; //$NON-NLS-1$ + final String CATEGORY_ID = "enablement.category"; //$NON-NLS-1$ + IOption option; + IOptionCategory optionCategory; + + try{ + ITool tool = getTool(cfg, TOOL_ID); + + option = tool.getOptionBySuperClassId(OPTION_ID); + assertEquals(option.getBooleanValue(),false); + + // Config Level + // trigger option is false, so category should not be visible + optionCategory = tool.getOptionCategory(CATEGORY_ID); + assertFalse(optionCategory.getApplicabilityCalculator().isOptionCategoryVisible(cfg, tool, optionCategory)); + + // set the trigger option + ((IConfiguration) cfg).setOption(tool, option, true); + + // trigger option is true, so category should be visible + assertTrue(optionCategory.getApplicabilityCalculator().isOptionCategoryVisible(cfg, tool, optionCategory)); + + // Folder Level + IResourceInfo folderInfo = ((IConfiguration) cfg).getResourceInfo(folder.getFullPath(),false); + assertNotNull(folderInfo); + + // unset the trigger option + option = getOptionForFolder((IFolderInfo)folderInfo, TOOL_ID, OPTION_ID); + assertNotNull(option); + folderInfo.setOption(tool, option, false); + // category should not be visible + optionCategory = getOptionCategoryForFolder((IFolderInfo)folderInfo, /*TOOL_ID,*/ CATEGORY_ID); + assertNotNull(optionCategory); + assertFalse(optionCategory.getApplicabilityCalculator().isOptionCategoryVisible(cfg, tool, optionCategory)); + + // set the trigger option + folderInfo.setOption(tool, option, true); + + // category should be visible + assertTrue(optionCategory.getApplicabilityCalculator().isOptionCategoryVisible(cfg, tool, optionCategory)); + + // File Level + // set the trigger option + IResourceConfiguration fileInfo = ((IConfiguration) cfg).getResourceConfiguration(file.getFullPath().toString()); + if (fileInfo==null) + fileInfo = ((IConfiguration) cfg).createResourceConfiguration(file); + option = getOptionForFile((IFileInfo)fileInfo, OPTION_ID); + assertNotNull(option); + fileInfo.setOption(tool, option, false); + optionCategory = getOptionCategoryForFile((IFileInfo)fileInfo, CATEGORY_ID); + assertNotNull(optionCategory); + // category should not be visible + assertFalse(optionCategory.getApplicabilityCalculator().isOptionCategoryVisible(cfg, tool, optionCategory)); + + // set the trigger option + fileInfo.setOption(tool, option, true); + + // category should be visible + assertTrue(optionCategory.getApplicabilityCalculator().isOptionCategoryVisible(cfg, tool, optionCategory)); + }catch (BuildException e){ + fail(e.getLocalizedMessage()); + } + } + + + private ITool getTool(IBuildObject cfgBo, String id){ + IResourceConfiguration rcCfg = null; + IConfiguration cfg = null; + ITool tool = null; + if(cfgBo instanceof IResourceConfiguration){ + rcCfg = (IResourceConfiguration)cfgBo; + cfg = rcCfg.getParent(); + ITool tools[] = rcCfg.getTools(); + for(int i = 0; i < tools.length; i++){ + for(ITool tmp = tools[i]; tmp != null; tmp=tmp.getSuperClass()){ + if(tmp.getId().equals(id)){ + tool = tools[i]; + break; + } + } + } + } else if(cfgBo instanceof IConfiguration){ + cfg = (IConfiguration)cfgBo; + tool = cfg.getToolsBySuperClassId(id)[0]; + } else + fail("wrong argument"); + return tool; + } + + private IOption getOptionForFolder(IFolderInfo rcInfo, String toolId, String optionId) { + ITool[] tools = null; + tools = rcInfo.getToolsBySuperClassId(toolId); + assertNotNull(tools); + ITool tool = tools[0]; + assertNotNull(tool); + + IOption option = tool.getOptionBySuperClassId(optionId); + return option; + } + + private IOption getOptionForFile(IFileInfo rcInfo, String optionId) { + ITool[] tools = null; + tools = rcInfo.getTools(); + assertNotNull(tools); + ITool tool = tools[0]; + assertNotNull(tool); + + IOption option = tool.getOptionBySuperClassId(optionId); + return option; + } + + private IOptionCategory getOptionCategoryForFolder(IFolderInfo rcInfo, String categoryId) { + ITool[] tools = rcInfo.getTools(); + tools = rcInfo.getTools(); + assertNotNull(tools); + ITool tool = tools[0]; + assertNotNull(tool); + IOptionCategory optionCategory = tool.getOptionCategory(categoryId); + return optionCategory; + } + + private IOptionCategory getOptionCategoryForFile(IFileInfo rcInfo, String categoryId) { + ITool[] tools = rcInfo.getTools(); + tools = rcInfo.getTools(); + assertNotNull(tools); + ITool tool = tools[0]; + assertNotNull(tool); + + IOptionCategory optionCategory = tool.getOptionCategory(categoryId); + return optionCategory; + } +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd index 538c8417e4b..83e75654f87 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd +++ b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd @@ -1144,6 +1144,9 @@ A custom field-editor needs to be registered, under the same ID, through the < + + + @@ -1448,6 +1451,9 @@ Additional special types exist to flag options of special relevance to the build + + + diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java index f0cb3292e4b..aeda577dc36 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2010 IBM Corporation and others. + * Copyright (c) 2003, 2011 IBM Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * IBM - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.core; @@ -119,4 +120,10 @@ public interface IOptionCategory extends IBuildObject { * Sets the element's "dirty" (have I been modified?) flag. */ public void setDirty(boolean isDirty); + + /** + * @return an instance of the class that calculates whether the option category is visible. + * @since 8.0 + */ + public IOptionCategoryApplicability getApplicabilityCalculator(); } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategoryApplicability.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategoryApplicability.java new file mode 100644 index 00000000000..c06b7fe07e7 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategoryApplicability.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2011 Intel Corporation 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: + * Miwako Tokugawa (Intel Corporation) - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.managedbuilder.core; + +/** + * This interface determines whether or not the option category is currently displayed. + * + * @noextend This class is not intended to be subclassed by clients. + * @noimplement This interface is not intended to be implemented by clients. + * + * @since 8.0 + */ +public interface IOptionCategoryApplicability { + /** + * This method is queried whenever a new option category is displayed. + * + * @param configuration build configuration of option + * (may be IConfiguration or IResourceConfiguration) + * @param optHolder contains the holder of the option + * @param category the option category itself + * + * @return true if this option should be visible in the build options page, + * false otherwise + */ + public boolean isOptionCategoryVisible( + IBuildObject configuration, + IHoldsOptions optHolder, IOptionCategory category); +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/BooleanExpressionApplicabilityCalculator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/BooleanExpressionApplicabilityCalculator.java index a4b3c0369fc..5e48a85cd92 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/BooleanExpressionApplicabilityCalculator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/BooleanExpressionApplicabilityCalculator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,6 +7,8 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) + *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.core; @@ -23,6 +25,8 @@ import org.eclipse.cdt.managedbuilder.core.IInputType; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; import org.eclipse.cdt.managedbuilder.core.IOption; import org.eclipse.cdt.managedbuilder.core.IOptionApplicability; +import org.eclipse.cdt.managedbuilder.core.IOptionCategory; +import org.eclipse.cdt.managedbuilder.core.IOptionCategoryApplicability; import org.eclipse.cdt.managedbuilder.core.IOutputType; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; @@ -30,7 +34,7 @@ import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.internal.enablement.AdjustmentContext; import org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression; -public class BooleanExpressionApplicabilityCalculator implements IOptionApplicability { +public class BooleanExpressionApplicabilityCalculator implements IOptionApplicability, IOptionCategoryApplicability { private OptionEnablementExpression fExpressions[]; private Map> fRefPropsMap; @@ -231,4 +235,17 @@ public class BooleanExpressionApplicabilityCalculator implements IOptionApplicab return set.toArray(new String[set.size()]); } + public boolean isOptionCategoryVisible(IBuildObject configuration, IHoldsOptions optHolder, + IOptionCategory category) { + return evaluateCategory(rcInfoFromConfiguration(configuration), optHolder, category); + } + + private boolean evaluateCategory(IResourceInfo rcInfo, IHoldsOptions holder, IOptionCategory category) { + for(int i = 0; i < fExpressions.length; i++){ + if(!fExpressions[i].evaluate(rcInfo, holder, category)) + return false; + } + return true; +} + } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java index 6784d1e5814..d3110c78ed3 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java @@ -7,6 +7,7 @@ * * Contributors: * IBM - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.core; @@ -23,11 +24,16 @@ 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.IOptionCategory; +import org.eclipse.cdt.managedbuilder.core.IOptionCategoryApplicability; import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; +import org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Path; import org.osgi.framework.Version; @@ -46,6 +52,13 @@ public class OptionCategory extends BuildObject implements IOptionCategory { private IOptionCategory owner; // The logical Option Category parent private String ownerId; private URL iconPathURL; + + private IConfigurationElement applicabilityCalculatorElement = null; + private IOptionCategoryApplicability applicabilityCalculator = null; + private BooleanExpressionApplicabilityCalculator booleanExpressionCalculator = null; + + public static final String APPLICABILITY_CALCULATOR = "applicabilityCalculator"; //$NON-NLS-1$ + // Miscellaneous private boolean isExtensionOptionCategory = false; private boolean isDirty = false; @@ -63,7 +76,7 @@ public class OptionCategory extends BuildObject implements IOptionCategory { * This constructor is called to create an option category defined by an extension point in * a plugin manifest file, or returned by a dynamic element provider * - * @param parent The IHoldsOptions parent of this catgeory, or null if + * @param parent The IHoldsOptions parent of this category, or null if * defined at the top level * @param element The category definition from the manifest file or a dynamic element * provider @@ -124,6 +137,19 @@ public class OptionCategory extends BuildObject implements IOptionCategory { String icon = element.getAttribute(IOptionCategory.ICON); iconPathURL = ManagedBuildManager.getURLInBuildDefinitions( (DefaultManagedConfigElement)element, new Path(icon) ); } + + //get enablements + IManagedConfigElement enablements[] = element.getChildren(OptionEnablementExpression.NAME); + if(enablements.length > 0) + booleanExpressionCalculator = new BooleanExpressionApplicabilityCalculator(enablements); + + // get the applicability calculator, if any + String applicabilityCalculatorStr = element.getAttribute(APPLICABILITY_CALCULATOR); + if (applicabilityCalculatorStr != null && element instanceof DefaultManagedConfigElement) { + applicabilityCalculatorElement = ((DefaultManagedConfigElement)element).getConfigurationElement(); + } else { + applicabilityCalculator = booleanExpressionCalculator; + } } /* (non-Javadoc) @@ -535,5 +561,25 @@ public class OptionCategory extends BuildObject implements IOptionCategory { } } return primary; - } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.cdt.managedbuilder.core.IOptionCategory#getApplicabilityCalculator() + */ + public IOptionCategoryApplicability getApplicabilityCalculator() { + if (applicabilityCalculator == null) { + if (applicabilityCalculatorElement != null) { + try { + if (applicabilityCalculatorElement.getAttribute(APPLICABILITY_CALCULATOR) != null) + applicabilityCalculator = (IOptionCategoryApplicability) applicabilityCalculatorElement + .createExecutableExtension(APPLICABILITY_CALCULATOR); + } catch (CoreException e) { + ManagedBuilderCorePlugin.log(e); + } + } + } + return applicabilityCalculator; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java index dbb2d5c25be..7702377f880 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java @@ -8,6 +8,7 @@ * Contributors: * IBM - Initial API and implementation * Baltasar Belyavsky (Texas Instruments) - [279633] Custom option command-generator support + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.core; @@ -49,6 +50,7 @@ import org.eclipse.cdt.managedbuilder.core.IManagedProject; import org.eclipse.cdt.managedbuilder.core.IOption; import org.eclipse.cdt.managedbuilder.core.IOptionApplicability; import org.eclipse.cdt.managedbuilder.core.IOptionCategory; +import org.eclipse.cdt.managedbuilder.core.IOptionCategoryApplicability; import org.eclipse.cdt.managedbuilder.core.IOptionCommandGenerator; import org.eclipse.cdt.managedbuilder.core.IOptionPathConverter; import org.eclipse.cdt.managedbuilder.core.IOutputType; @@ -2499,6 +2501,9 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch // check to see if the option has an applicability calculator IOptionApplicability applicabilityCalculator = option.getApplicabilityCalculator(); + IOptionCategory cat = option.getCategory(); + IOptionCategoryApplicability catApplicabilityCalculator = cat.getApplicabilityCalculator(); + IBuildObject config = null; IBuildObject parent = getParent(); if ( parent instanceof IResourceConfiguration ) { @@ -2507,7 +2512,8 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch config = ((IToolChain)parent).getParent(); } - if (applicabilityCalculator == null || applicabilityCalculator.isOptionUsedInCommandLine(config, this, option)) { + if ((catApplicabilityCalculator==null || catApplicabilityCalculator.isOptionCategoryVisible(config, this, cat)) + && (applicabilityCalculator == null || applicabilityCalculator.isOptionUsedInCommandLine(config, this, option))) { // update option in case when its value changed. // This code is added to fix bug #219684 and @@ -4041,4 +4047,14 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch public boolean isExtensionBuildObject() { return isExtensionElement(); } + + /* + * (non-Javadoc) + * + * @see org.eclipse.cdt.managedbuilder.core.IOptionCategory#getApplicabilityCalculator() + */ + public IOptionCategoryApplicability getApplicabilityCalculator() { + // Tool does not have any ApplicabilityCalculator. + return null; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/AndExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/AndExpression.java index 4127b181ee7..6ce3ddf1804 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/AndExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/AndExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,12 +7,14 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; public class AndExpression extends CompositeExpression { @@ -32,4 +34,14 @@ public class AndExpression extends CompositeExpression { } return true; } + public boolean evaluate(IResourceInfo rcInfo, + IHoldsOptions holder, + IOptionCategory category) { + IBooleanExpression children[] = getChildren(); + for(int i = 0; i < children.length; i++){ + if(!children[i].evaluate(rcInfo, holder, category)) + return false; + } + return true; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckBuildPropertyExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckBuildPropertyExpression.java index 98bb131a5f3..83f3d9a721d 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckBuildPropertyExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckBuildPropertyExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007 Intel Corporation and others. + * Copyright (c) 2007, 2011 Intel Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; @@ -15,6 +16,7 @@ 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; public class CheckBuildPropertyExpression implements IBooleanExpression { @@ -41,6 +43,15 @@ public class CheckBuildPropertyExpression implements IBooleanExpression { public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, IOption option) { + return evaluate(rcInfo); + } + + public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, + IOptionCategory category) { + return evaluate(rcInfo); + } + + private boolean evaluate(IResourceInfo rcInfo) { IConfiguration cfg = rcInfo.getParent(); IBuildProperty prop = getBuildProperty(cfg, fPropertyId); if(prop != null){ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckHolderExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckHolderExpression.java index 640c4f2c20f..13063fdbf5b 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckHolderExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckHolderExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,12 +7,14 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; @@ -28,9 +30,17 @@ public class CheckHolderExpression implements IBooleanExpression { fHolderId = element.getAttribute(HOLDER_ID); } - public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, IOption option) { + return evaluate(holder); + } + + public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, + IOptionCategory category) { + return evaluate(holder); + } + + private boolean evaluate(IHoldsOptions holder) { if(fHolderId != null){ for(; holder != null; holder = getHolderSuperClass(holder)){ if(fHolderId.equals(holder.getId())) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckOptionExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckOptionExpression.java index 1bdcf42d620..ce65b6ab81f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckOptionExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckOptionExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; @@ -22,6 +23,7 @@ import org.eclipse.cdt.managedbuilder.core.IFolderInfo; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; @@ -79,7 +81,21 @@ public class CheckOptionExpression implements IBooleanExpression { (IOption)otherHo[1],((IHoldsOptions)otherHo[0])); } } + return result; + } + + public boolean evaluate(IResourceInfo rcInfo, + IHoldsOptions holder, + IOptionCategory category) { + boolean result = false; + IBuildObject ho[] = getHolderAndOption(fOptionId, fHolderId, + rcInfo, holder); + if(ho != null){ + if(fValue != null) + result = evaluate((IOption)ho[1],((IHoldsOptions)ho[0]),fValue); + // otherOptionId shouldn't be set when enabling optionCategory + } return result; } @@ -252,6 +268,29 @@ public class CheckOptionExpression implements IBooleanExpression { } return result; } + + /* This is called for optionCategory */ + protected IBuildObject[] getHolderAndOption(String optionId, + String holderId, + IResourceInfo rcInfo, + IHoldsOptions holder + ){ + IBuildObject result[] = null; + if(optionId != null) { + IHoldsOptions hld = null; + if(holderId == null) + hld = holder; + else + hld = getHolder(holderId,rcInfo); + + if(hld != null) { + IOption opt = getOption(optionId,hld); + if(opt != null) + result = new IBuildObject[]{hld,opt}; + } + } + return result; + } protected IOption getOption(String optionId, IHoldsOptions holder){ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java index 2200519be6b..f7bacd32842 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2008 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; @@ -16,6 +17,7 @@ import java.util.regex.Pattern; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider; @@ -78,5 +80,38 @@ public class CheckStringExpression implements IBooleanExpression { } return false; } + + public boolean evaluate(IResourceInfo rcInfo, + IHoldsOptions holder, + IOptionCategory category) { + + IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider(); + IEnvironmentVariableProvider env = ManagedBuildManager.getEnvironmentVariableProvider(); + String delimiter = env.getDefaultDelimiter(); + try { + String resolvedString = provider.resolveValue(fString, + " ", //$NON-NLS-1$ + delimiter, + IBuildMacroProvider.CONTEXT_OPTION, + new OptionContextData(category,holder) + ); + + String resolvedValue = provider.resolveValue(fValue, + " ", //$NON-NLS-1$ + delimiter, + IBuildMacroProvider.CONTEXT_OPTION, + new OptionContextData(category,holder) + ); + + if(fIsRegex){ + Pattern pattern = Pattern.compile(resolvedValue); + Matcher matcher = pattern.matcher(resolvedString); + return matcher.matches(); + } + return resolvedString.equals(resolvedValue); + } catch (BuildMacroException e) { + } + return false; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/FalseExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/FalseExpression.java index 59d6a9598e9..2219acc8c0d 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/FalseExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/FalseExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,12 +7,14 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; public class FalseExpression implements IBooleanExpression { @@ -25,5 +27,9 @@ public class FalseExpression implements IBooleanExpression { IOption option) { return false; } + public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, + IOptionCategory category) { + return false; + } } 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 index ad97360e102..2d4ec62a4c9 100644 --- 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 @@ -1,5 +1,5 @@ /********************************************************************** - * Copyright (c) 2007 QNX Software Systems and others. + * Copyright (c) 2007, 2011 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 @@ -7,13 +7,15 @@ * * Contributors: * QNX Software Systems - Initial API and implementation - **********************************************************************/ + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) +**********************************************************************/ 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -37,6 +39,15 @@ public class HasNatureExpression implements IBooleanExpression { public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, IOption option) { + return evaluate(rcInfo); + } + + public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, + IOptionCategory category) { + return evaluate(rcInfo); + } + + private boolean evaluate(IResourceInfo rcInfo) { // 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. @@ -60,5 +71,4 @@ public class HasNatureExpression implements IBooleanExpression { } return false; } - } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/IBooleanExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/IBooleanExpression.java index b3718be6143..cf4536d86ce 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/IBooleanExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/IBooleanExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,15 +7,20 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; public interface IBooleanExpression { public boolean evaluate(IResourceInfo rcInfo, IHoldsOptions holder, IOption option); + public boolean evaluate(IResourceInfo rcInfo, + IHoldsOptions holder, + IOptionCategory category); } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/NotExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/NotExpression.java index 2c498f72353..89504156495 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/NotExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/NotExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2008 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,12 +7,14 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; public class NotExpression extends AndExpression { @@ -28,5 +30,12 @@ public class NotExpression extends AndExpression { IOption option) { return !super.evaluate(rcInfo, holder, option); } + + @Override + public boolean evaluate(IResourceInfo rcInfo, + IHoldsOptions holder, + IOptionCategory category) { + return !super.evaluate(rcInfo, holder, category); + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/OrExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/OrExpression.java index 55f13650c8a..6c58d4be082 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/OrExpression.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/OrExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,12 +7,14 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.enablement; 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.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; public class OrExpression extends CompositeExpression { @@ -32,4 +34,14 @@ public class OrExpression extends CompositeExpression { } return false; } + public boolean evaluate(IResourceInfo rcInfo, + IHoldsOptions holder, + IOptionCategory category) { + IBooleanExpression children[] = getChildren(); + for(int i = 0; i < children.length; i++){ + if(children[i].evaluate(rcInfo, holder, category)) + return true; + } + return false; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/BuildMacroProvider.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/BuildMacroProvider.java index 17a817f6c77..f1a4759e5b4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/BuildMacroProvider.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/BuildMacroProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2010 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.macros; @@ -209,6 +210,7 @@ public class BuildMacroProvider implements IBuildMacroProvider, IMacroContextInf String listDelimiter, int contextType, Object contextData) throws BuildMacroException { IMacroContextInfo info = getMacroContextInfo(contextType,contextData); + if(info != null){ try { return CdtVariableResolver.resolveToString(value, diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java index d98cd32a62a..e399ce6bcf2 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java @@ -782,6 +782,9 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { return EMPTY_STRING; IncludeDefaultsSubstitutor sub = new IncludeDefaultsSubstitutor(parent); IOption option = parent.getOption(); + if (option==null) + return null; + String str = null; String strL[] = null; try{ @@ -831,6 +834,9 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { return new String[]{EMPTY_STRING}; IncludeDefaultsSubstitutor sub = new IncludeDefaultsSubstitutor(parent); IOption option = parent.getOption(); + if (option==null) + return null; + String str = null; String strL[] = null; try{ @@ -894,83 +900,85 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { fType = 0; if(parentOptionContextData != null){ IOption option = parentOptionContextData.getOption(); - try{ - switch (option.getValueType()) { - case IOption.BOOLEAN: - break; - case IOption.STRING: - fType = IBuildMacro.VALUE_TEXT; - fStringValue = option.getStringValue(); - break; - case IOption.ENUMERATED: - break; - case IOption.STRING_LIST: - fType = IBuildMacro.VALUE_TEXT_LIST; - fStringListValue = option.getStringListValue(); - break; - case IOption.INCLUDE_PATH: - fType = IBuildMacro.VALUE_PATH_DIR_LIST; - fStringListValue = option.getIncludePaths(); - break; - case IOption.PREPROCESSOR_SYMBOLS: - fType = IBuildMacro.VALUE_TEXT_LIST; - fStringListValue = option.getDefinedSymbols(); - break; - case IOption.LIBRARIES: - fType = IBuildMacro.VALUE_TEXT_LIST; - fStringListValue = option.getLibraries(); - break; - case IOption.OBJECTS: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getUserObjects(); - break; - case IOption.INCLUDE_FILES: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.LIBRARY_PATHS: - fType = IBuildMacro.VALUE_PATH_DIR_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.LIBRARY_FILES: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.MACRO_FILES: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.UNDEF_INCLUDE_PATH: - fType = IBuildMacro.VALUE_PATH_DIR_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.UNDEF_PREPROCESSOR_SYMBOLS: - fType = IBuildMacro.VALUE_TEXT_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.UNDEF_INCLUDE_FILES: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.UNDEF_LIBRARY_PATHS: - fType = IBuildMacro.VALUE_PATH_DIR_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.UNDEF_LIBRARY_FILES: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getBasicStringListValue(); - break; - case IOption.UNDEF_MACRO_FILES: - fType = IBuildMacro.VALUE_PATH_FILE_LIST; - fStringListValue = option.getBasicStringListValue(); - break; + if (option!=null) { + try{ + switch (option.getValueType()) { + case IOption.BOOLEAN: + break; + case IOption.STRING: + fType = IBuildMacro.VALUE_TEXT; + fStringValue = option.getStringValue(); + break; + case IOption.ENUMERATED: + break; + case IOption.STRING_LIST: + fType = IBuildMacro.VALUE_TEXT_LIST; + fStringListValue = option.getStringListValue(); + break; + case IOption.INCLUDE_PATH: + fType = IBuildMacro.VALUE_PATH_DIR_LIST; + fStringListValue = option.getIncludePaths(); + break; + case IOption.PREPROCESSOR_SYMBOLS: + fType = IBuildMacro.VALUE_TEXT_LIST; + fStringListValue = option.getDefinedSymbols(); + break; + case IOption.LIBRARIES: + fType = IBuildMacro.VALUE_TEXT_LIST; + fStringListValue = option.getLibraries(); + break; + case IOption.OBJECTS: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getUserObjects(); + break; + case IOption.INCLUDE_FILES: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.LIBRARY_PATHS: + fType = IBuildMacro.VALUE_PATH_DIR_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.LIBRARY_FILES: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.MACRO_FILES: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.UNDEF_INCLUDE_PATH: + fType = IBuildMacro.VALUE_PATH_DIR_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.UNDEF_PREPROCESSOR_SYMBOLS: + fType = IBuildMacro.VALUE_TEXT_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.UNDEF_INCLUDE_FILES: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.UNDEF_LIBRARY_PATHS: + fType = IBuildMacro.VALUE_PATH_DIR_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.UNDEF_LIBRARY_FILES: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + case IOption.UNDEF_MACRO_FILES: + fType = IBuildMacro.VALUE_PATH_FILE_LIST; + fStringListValue = option.getBasicStringListValue(); + break; + } + if(fStringValue != null) + fStringValue = CdtVariableResolver.resolveToString(fStringValue,new IncludeDefaultsSubstitutor(parentOptionContextData)); + else if(fStringListValue != null) + fStringListValue = CdtVariableResolver.resolveStringListValues(fStringListValue,new IncludeDefaultsSubstitutor(parentOptionContextData), true); + }catch(Exception e){ + fType = 0; } - if(fStringValue != null) - fStringValue = CdtVariableResolver.resolveToString(fStringValue,new IncludeDefaultsSubstitutor(parentOptionContextData)); - else if(fStringListValue != null) - fStringListValue = CdtVariableResolver.resolveStringListValues(fStringListValue,new IncludeDefaultsSubstitutor(parentOptionContextData), true); - }catch(Exception e){ - fType = 0; } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java index 86a86093b99..d37558b1312 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,6 +7,7 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.macros; @@ -16,30 +17,47 @@ import org.eclipse.cdt.managedbuilder.core.IFileInfo; import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.macros.IOptionContextData; /** - * This is a trivial implementation of the IOptionContextData used internaly by the MBS + * This is a trivial implementation of the IOptionContextData used internally by the MBS * * @since 3.0 */ public class OptionContextData implements IOptionContextData { private IOption fOption; + private IOptionCategory fCategory; private IBuildObject fParent; public OptionContextData(IOption option, IBuildObject parent){ fOption = option; fParent = parent; } + + /* + * @since 8.0 + */ + public OptionContextData(IOptionCategory category, IBuildObject parent){ + fCategory = category; + fParent = parent; + } /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IOptionContextData#getOption() */ public IOption getOption() { return fOption; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.macros.IOptionContextData#getOptionCategory() + */ + public IOptionCategory getOptionCategory() { + return fCategory; + } /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IOptionContextData#getParent() diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java index 09d86b43fb8..d8512cd60f8 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2010 Intel Corporation and others. + * Copyright (c) 2005, 2011 Intel Corporation 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 @@ -7,11 +7,13 @@ * * Contributors: * Intel Corporation - Initial API and implementation + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.macros; import org.eclipse.cdt.managedbuilder.core.IBuildObject; import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOptionCategory; /** * This interface is used to represent an option context data @@ -24,10 +26,19 @@ public interface IOptionContextData { /** * Returns an option * - * @return IOption + * @return IOption, could be {@code null} */ public IOption getOption(); + /** + * Returns an option category + * + * @return IOptionCategory, could be {@code null} + * + * @since 8.0 + */ + public IOptionCategory getOptionCategory(); + /** * Returns IBuildObject that represents the option holder. * For the backward compatibility MBS will also support the cases diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java index 215d396cf62..87ce6f2c980 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java @@ -189,7 +189,7 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { */ @Override protected void createFieldEditors() { - // true if he user selected "Display tool option tips at a fixed location" in Preferences AND + // true if the user selected "Display tool option tips at a fixed location" in Preferences AND // and we are displaying the tool tip box on this page because one or more option has non-empty tool tip. boolean pageHasToolTipBox = isToolTipBoxNeeded(); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java index 940e7f24273..43bd6109bd2 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolListContentProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2010 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation 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 @@ -8,6 +8,7 @@ * Contributors: * Timesys - Initial API and implementation * IBM Rational Software + * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; @@ -18,6 +19,7 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; import org.eclipse.cdt.managedbuilder.core.IOptionCategory; +import org.eclipse.cdt.managedbuilder.core.IOptionCategoryApplicability; import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; @@ -66,7 +68,7 @@ public class ToolListContentProvider implements ITreeContentProvider{ for (int i=0; i