private void doTestEnablement(IBuildObject cfg) {
    ITool tool = getTool(cfg, "enablement.this.child_1.2.3");
    ITool otherTool = getTool(cfg, "enablement.other");
    ITool tool2 = getTool(cfg, "enablement.this.child.2_1.2.3");

    //		IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);

    IOption thisBoolean = tool.getOptionBySuperClassId("this.boolean");
    IOption thisString = tool.getOptionBySuperClassId("this.string");
    IOption thisEnum = tool.getOptionBySuperClassId("this.enum");

    IOption otherString = otherTool.getOptionBySuperClassId("other.string");
    IOption otherBoolean = otherTool.getOptionBySuperClassId("other.boolean");

    try {

      IOption option = tool.getOptionBySuperClassId("enablement.command.c1");

      assertEquals(option.getCommand(), "c1");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.command.c2");
      assertEquals(option.getCommand(), "c2");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.commandFalse.c1");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "c1");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.commandFalse.c2");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "c2");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.command.c1.commandFalse.cF1");
      assertEquals(option.getCommand(), "c1");
      assertEquals(option.getCommandFalse(), "cF1");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.command.cmd.commandFalse.cmdF");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.command.c1.commandFalse.cmdF");
      assertEquals(option.getCommand(), "c1");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.command.cmd.commandFalse.cF1");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.ui.en");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.ui.vis");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.cmd.us");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.cmdUs.or.uiVis");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.uiEn.or.uiVis");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.all");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.all.ac.vh");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");

      setEnablement(false, false, false);
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      setEnablement(false, true, false);
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      setEnablement(false, false, true);
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      setEnablement(true, false, false);
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      setEnablement(false, false, false);
      option = tool.getOptionBySuperClassId("enablement.all.cF1.ac.vh");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      setEnablement(true, false, true);

      option = tool.getOptionBySuperClassId("enablement.all.cF.cmdF");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.all.cF.cF1");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cF1");
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("this.boolean");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.boolean.True");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisBoolean.getBooleanValue() == true,
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisBoolean.getBooleanValue() == true,
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisBoolean.getBooleanValue() == true,
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.boolean.False");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisBoolean.getBooleanValue() == false,
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisBoolean.getBooleanValue() == false,
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisBoolean.getBooleanValue() == false,
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.string.Q.empty");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisString.getStringValue().equals(""),
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals(""),
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals(""),
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.string.Q.test a b c");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisString.getStringValue().equals("test a b c"),
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals("test a b c"),
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals("test a b c"),
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option =
          tool.getOptionBySuperClassId(
              "enablement.checkOpt.all.Q.this.enum.Q.testgnu.enablement.c.optimization.level.optimize");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      String id = thisEnum.getEnumeratedId(thisEnum.getStringValue());
      if (id == null) id = "";
      assertEquals(
          id.equals("testgnu.enablement.c.optimization.level.optimize"),
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          id.equals("testgnu.enablement.c.optimization.level.optimize"),
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          id.equals("testgnu.enablement.c.optimization.level.optimize"),
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.Q.true");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          option.getBooleanValue() == true,
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          option.getBooleanValue() == true,
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          option.getBooleanValue() == true,
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option =
          tool.getOptionBySuperClassId(
              "enablement.checkOpt.all.Q.this.string.Q.start ${ParentVersion} stop");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisString.getStringValue().equals("start 1.2.3 stop"),
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals("start 1.2.3 stop"),
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals("start 1.2.3 stop"),
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.string.Q.other.string");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisString.getStringValue().equals(otherString.getStringValue()),
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals(otherString.getStringValue()),
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals(otherString.getStringValue()),
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOpt.all.Q.this.string.Q.other.string");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertEquals(
          thisString.getStringValue().equals(otherString.getStringValue()),
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals(otherString.getStringValue()),
          option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertEquals(
          thisString.getStringValue().equals(otherString.getStringValue()),
          option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkString");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkString.2");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkString.3");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkFalse.false");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkNot.false");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkOr.true");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkAnd.false");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertFalse(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool.getOptionBySuperClassId("enablement.checkHolder.true.1.false.2");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertTrue(option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionVisible(cfg, tool, option));
      assertTrue(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool, option));

      option = tool2.getOptionBySuperClassId("enablement.checkHolder.true.1.false.2");
      assertEquals(option.getCommand(), "cmd");
      assertEquals(option.getCommandFalse(), "cmdF");
      assertFalse(
          option.getApplicabilityCalculator().isOptionUsedInCommandLine(cfg, tool2, option));
      assertFalse(option.getApplicabilityCalculator().isOptionVisible(cfg, tool2, option));
      assertFalse(option.getApplicabilityCalculator().isOptionEnabled(cfg, tool2, option));

    } catch (BuildException e) {
      fail(e.getLocalizedMessage());
    }
  }
 /**
  * This method parses the string that is entered in the all build option field editor and stores
  * the options to the corresponding option fields.
  */
 public void parseAllOptions() {
   // Get the all build options string from all options field
   String alloptions = getToolSettingsPrefStore().getString(ToolSettingsPrefStore.ALL_OPTIONS_ID);
   // list that holds the options for the option type other than
   // boolean,string and enumerated
   List<String> optionsList = new ArrayList<String>();
   // additional options buffer
   StringBuffer addnOptions = new StringBuffer();
   // split all build options string
   Vector<String> optionsArr = getOptionVector(alloptions);
   for (String optionValue : optionsArr) {
     boolean optionValueExist = false;
     // get the options for this tool
     IOption[] options = fTool.getOptions();
     for (IOption opt : options) {
       // String name = opt.getId();
       // check whether the option value is "STRING" type
       for (String s : stringOptionsMap.values()) {
         if (s.indexOf(optionValue) != -1) optionValueExist = true;
       }
       // check whether the option value is "OBJECTS" type
       for (String s : userObjsMap.values()) {
         if (s.indexOf(optionValue) != -1) optionValueExist = true;
       }
       // if the value does not exist in string option or user objects
       // option
       if (!optionValueExist) {
         try {
           // check whether the option value is already exist
           // and also change the preference store based on
           // the option value
           switch (opt.getValueType()) {
             case IOption.BOOLEAN:
               String boolCommand;
               boolCommand = opt.getCommand();
               if (boolCommand != null && boolCommand.equals(optionValue)) {
                 setOption(opt, true);
                 optionValueExist = true;
               }
               boolCommand = opt.getCommandFalse();
               if (boolCommand != null && boolCommand.equals(optionValue)) {
                 setOption(opt, false);
                 optionValueExist = true;
               }
               break;
             case IOption.ENUMERATED:
               String enumeration = ""; // $NON-NLS-1$
               String[] enumValues = opt.getApplicableValues();
               for (int i = 0; i < enumValues.length; i++) {
                 if (opt.getEnumCommand(enumValues[i]).equals(optionValue)) {
                   enumeration = enumValues[i];
                   optionValueExist = true;
                 }
               }
               if (!enumeration.equals("")) // $NON-NLS-1$
               setOption(opt, enumeration);
               break;
             case IOption.STRING_LIST:
             case IOption.INCLUDE_PATH:
             case IOption.PREPROCESSOR_SYMBOLS:
             case IOption.LIBRARIES:
             case IOption.INCLUDE_FILES:
             case IOption.LIBRARY_PATHS:
             case IOption.LIBRARY_FILES:
             case IOption.MACRO_FILES:
             case IOption.UNDEF_INCLUDE_PATH:
             case IOption.UNDEF_PREPROCESSOR_SYMBOLS:
             case IOption.UNDEF_INCLUDE_FILES:
             case IOption.UNDEF_LIBRARY_PATHS:
             case IOption.UNDEF_LIBRARY_FILES:
             case IOption.UNDEF_MACRO_FILES:
               if (opt.getCommand() != null && optionValue.startsWith(opt.getCommand())) {
                 optionsList.add(optionValue);
                 optionValueExist = true;
               }
               break;
             default:
               break;
           }
         } catch (BuildException e) {
         }
       }
     }
     // If the parsed string does not match with any previous option
     // values then consider this option as a additional build option
     if (!optionValueExist) {
       addnOptions.append(optionValue + ITool.WHITE_SPACE);
     }
   }
   // check whether some of the "STRING" option value or "OBJECTS" type
   // option value removed
   // by the user from all build option field
   Set<String> set = stringOptionsMap.keySet();
   for (int i = 0; i < set.size(); i++) {
     Iterator<String> iterator = set.iterator();
     while (iterator.hasNext()) {
       Object key = iterator.next();
       String val = stringOptionsMap.get(key);
       if (alloptions.indexOf(val) == -1) {
         StringBuffer buf = new StringBuffer();
         String[] vals = val.split(WHITESPACE);
         for (int t = 0; t < vals.length; t++) {
           if (alloptions.indexOf(vals[t]) != -1) buf.append(vals[t] + ITool.WHITE_SPACE);
         }
         setOption(((IOption) key), buf.toString().trim());
       }
     }
   }
   // "OBJECTS" type
   Set<IOption> objSet = userObjsMap.keySet();
   for (int s = 0; s < objSet.size(); s++) {
     for (IOption op : objSet) {
       String val = userObjsMap.get(op);
       ArrayList<String> list = new ArrayList<String>();
       for (String v : parseString(val)) {
         if (alloptions.indexOf(v) != -1) list.add(v);
       }
       String listArr[] = new String[list.size()];
       list.toArray(listArr);
       setOption(op, listArr);
     }
   }
   // Now update the preference store with parsed options
   // Get the options for this tool
   IOption[] options = fTool.getOptions();
   for (int k = 0; k < options.length; ++k) {
     IOption opt = options[k];
     // String name = opt.getId();
     // String listStr = ""; //$NON-NLS-1$
     // String[] listVal = null;
     try {
       switch (opt.getValueType()) {
         case IOption.BOOLEAN:
           ArrayList<String> optsList = new ArrayList<String>(optionsArr);
           if (opt.getCommand() != null
               && opt.getCommand().length() > 0
               && !optsList.contains(opt.getCommand())) setOption(opt, false);
           if (opt.getCommandFalse() != null
               && opt.getCommandFalse().length() > 0
               && !optsList.contains(opt.getCommandFalse())) setOption(opt, true);
           break;
         case IOption.STRING:
           // TODO create a lst of valid default string options for the tool
           if (getDefaultOptionNames().contains(opt.getName())) {
             String newOptions = opt.getStringValue();
             if (addnOptions.length() > 0) {
               newOptions = newOptions + ITool.WHITE_SPACE + addnOptions.toString().trim();
             }
             setOption(opt, newOptions);
           }
           break;
         case IOption.STRING_LIST:
         case IOption.INCLUDE_PATH:
         case IOption.PREPROCESSOR_SYMBOLS:
         case IOption.LIBRARIES:
           ArrayList<String> newList = new ArrayList<String>();
           for (String s : optionsList) {
             if (opt.getCommand() != null && s.startsWith(opt.getCommand())) {
               newList.add(s.substring(opt.getCommand().length()));
             }
           }
           String[] strlist = new String[newList.size()];
           newList.toArray(strlist);
           newList.clear();
           setOption(opt, strlist);
           break;
         default:
           break;
       }
     } catch (BuildException e) {
     }
   }
 }