From 3c624f71bf1be8b7a873334b7476e7eec853a27c Mon Sep 17 00:00:00 2001 From: Leo Treggiari Date: Fri, 10 Jun 2005 20:07:28 +0000 Subject: [PATCH] Minor bug fixes and enhancements for Options & OptionHandlers --- .../cdt/managedbuilder/core/IOption.java | 7 ++ .../core/ManagedBuildManager.java | 2 +- .../core/ManagedOptionValueHandler.java | 64 +++++++++++++-- .../managedbuilder/internal/core/Option.java | 82 ++++++++++++------- .../internal/core/OptionReference.java | 6 ++ .../internal/core/ResourceConfiguration.java | 2 +- 6 files changed, 123 insertions(+), 40 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java index 28ecdcfb881..f74749fa5e9 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java @@ -375,6 +375,13 @@ public interface IOption extends IBuildObject { */ public String getValueHandlerExtraArgument(); + /** + * Sets the value handlers extra argument specified for this tool + * @param extraArgument + * @since 3.0 + */ + public void setValueHandlerExtraArgument(String extraArgument); + /** * Returns true if this option was loaded from a manifest file, * and false if it was loaded from a project (.cdtbuild) file. diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java index 782c40d66a9..c7a8666c31e 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java @@ -2479,7 +2479,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI } // Get options associated with tools under toolChain - ITool[] tools = toolChain.getTools(); + ITool[] tools = config.getFilteredTools(); for (int i = 0; i < tools.length; ++i) { IOption[] toolOptions = tools[i].getOptions(); for (int j = 0; j < toolOptions.length; ++j) { diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedOptionValueHandler.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedOptionValueHandler.java index 13048f27a08..7984d792120 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedOptionValueHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedOptionValueHandler.java @@ -11,6 +11,8 @@ package org.eclipse.cdt.managedbuilder.core; +import java.util.Arrays; + /** * This class implements the default managed option value handler for MBS. @@ -49,7 +51,7 @@ public class ManagedOptionValueHandler implements IOption option, String extraArgument, int event) { - /* + /* // The following is for debug purposes and thus normally commented out String configLabel = "???"; //$NON-NLS-1$ String holderLabel = "???"; //$NON-NLS-1$ @@ -84,7 +86,7 @@ public class ManagedOptionValueHandler implements option.getId() + ", " + //$NON-NLS-1$ "String = " + //$NON-NLS-1$ extraArgument + ")"); //$NON-NLS-1$ - */ + */ // The event was not handled, thus return false return false; } @@ -95,12 +97,58 @@ public class ManagedOptionValueHandler implements public boolean isDefaultValue(IBuildObject configuration, IHoldsOptions holder, IOption option, String extraArgument) { - // Implement default behavior - if (option.getDefaultValue() == option.getValue()) { - return true; - } else { - return false; - } + // Get the default Value + Object defaultValue = option.getDefaultValue(); + + try { + // Figure out which type the option is and implement default behaviour for it. + switch (option.getValueType()) { + case IOption.STRING: + if (option.getStringValue().equals((String)defaultValue)) { + return true; + } + break; + case IOption.BOOLEAN: + if (option.getBooleanValue() == ((Boolean)defaultValue).booleanValue()) { + return true; + } + break; + case IOption.ENUMERATED: + if (option.getValue().toString().equals(defaultValue.toString())) { + return true; + } + break; + case IOption.INCLUDE_PATH: + if (Arrays.equals(option.getIncludePaths(), (String[])defaultValue)) { + return true; + } + break; + case IOption.STRING_LIST: + if (Arrays.equals(option.getStringListValue(), (String[])defaultValue)) { + return true; + } + break; + case IOption.PREPROCESSOR_SYMBOLS: + if (Arrays.equals(option.getDefinedSymbols(), (String[])defaultValue)) { + return true; + } + break; + case IOption.LIBRARIES: + if (Arrays.equals(option.getLibraries(), (String[])defaultValue)) { + return true; + } + break; + case IOption.OBJECTS: + if (Arrays.equals(option.getUserObjects(), (String[])defaultValue)) { + return true; + } + break; + default: + break; + } + } catch (BuildException e) { + } + return false; } /* (non-Javadoc) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java index 9cf90ccd4f1..b70cadb4a34 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java @@ -195,39 +195,48 @@ public class Option extends BuildObject implements IOption { enumCommands = new HashMap(option.enumCommands); enumNames = new HashMap(option.enumNames); } + if (option.valueType != null) { valueType = new Integer(option.valueType.intValue()); - switch (valueType.intValue()) { - case BOOLEAN: - if (option.value != null) { - value = new Boolean(((Boolean)option.value).booleanValue()); - } - if (option.defaultValue != null) { - defaultValue = new Boolean(((Boolean)option.defaultValue).booleanValue()); - } - break; - case STRING: - case ENUMERATED: - if (option.value != null) { - value = new String((String)option.value); - } - if (option.defaultValue != null) { - defaultValue = new String((String)option.defaultValue); - } - break; - case STRING_LIST: - case INCLUDE_PATH: - case PREPROCESSOR_SYMBOLS: - case LIBRARIES: - case OBJECTS: - if (option.value != null) { - value = new ArrayList((ArrayList)option.value); - } - if (option.defaultValue != null) { - defaultValue = new ArrayList((ArrayList)option.defaultValue); - } - break; + } + Integer vType = null; + try { + vType = new Integer(option.getValueType()); + if (vType != null) { + switch (vType.intValue()) { + case BOOLEAN: + if (option.value != null) { + value = new Boolean(((Boolean)option.value).booleanValue()); + } + if (option.defaultValue != null) { + defaultValue = new Boolean(((Boolean)option.defaultValue).booleanValue()); + } + break; + case STRING: + case ENUMERATED: + if (option.value != null) { + value = new String((String)option.value); + } + if (option.defaultValue != null) { + defaultValue = new String((String)option.defaultValue); + } + break; + case STRING_LIST: + case INCLUDE_PATH: + case PREPROCESSOR_SYMBOLS: + case LIBRARIES: + case OBJECTS: + if (option.value != null) { + value = new ArrayList((ArrayList)option.value); + } + if (option.defaultValue != null) { + defaultValue = new ArrayList((ArrayList)option.defaultValue); + } + break; + } } + } catch (BuildException be) { + // TODO: should we ignore this?? } category = option.category; @@ -1438,6 +1447,19 @@ public class Option extends BuildObject implements IOption { } return valueHandlerExtraArgument; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#setValueHandlerExtraArgument(String)) + */ + public void setValueHandlerExtraArgument(String extraArgument) { + if (extraArgument == null) + extraArgument = ""; //$NON-NLS-1$ + if (valueHandlerExtraArgument == null || !valueHandlerExtraArgument.equals(extraArgument)) { + valueHandlerExtraArgument = extraArgument; + setDirty(true); + } + } + /* * O B J E C T S T A T E M A I N T E N A N C E diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java index 1fe42b80783..ad456253147 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java @@ -789,6 +789,12 @@ public class OptionReference implements IOption { return null; } + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#setValueHandlerExtraArgument(String)) + */ + public void setValueHandlerExtraArgument(String extraArgument) { + } + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.core.IOption#isValid() */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceConfiguration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceConfiguration.java index 03102a458ec..65dccb493d2 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceConfiguration.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceConfiguration.java @@ -1,5 +1,5 @@ /********************************************************************** - * Copyright (c) 2004 Intel Corporation and others. + * Copyright (c) 2004 2005 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at