Example #1
0
  public static String getOptionBooleanCommand(IConfiguration config, String sOptionId) {

    IOption option = config.getToolChain().getOptionBySuperClassId(sOptionId);
    String sReturn = null;
    if (option != null) {
      try {
        if (option.getBooleanValue()) sReturn = option.getCommand().trim();
      } catch (BuildException e) {
        Activator.log(e);
      }
    } else {
      Activator.log(sOptionId + " not found");
    }

    return sReturn;
  }
Example #2
0
  public static Boolean getOptionBooleanValue(IConfiguration config, String sOptionId) {

    IOption option = config.getToolChain().getOptionBySuperClassId(sOptionId);
    Boolean bReturn = null;
    if (option != null) {
      try {
        bReturn = new Boolean(option.getBooleanValue());
      } catch (BuildException e) {
        Activator.log(e);
      }
    } else {
      Activator.log(sOptionId + " not found");
    }

    return bReturn;
  }
  private Collection<String> getLinkerOptionValues(int linkerOption) {
    for (ITool tool : config.getToolChain().getTools()) {
      if (!isToolLinker(tool)) {
        continue;
      }

      for (IOption o : tool.getOptions()) {
        try {
          if (o.getValueType() != linkerOption) {
            continue;
          }
          return orderPreservingSet(
              linkerOption == IOption.LIBRARY_PATHS ? o.getLibraryPaths() : o.getLibraries());
        } catch (BuildException e) {
        }
      }
    }
    return Collections.emptySet();
  }
 private void syncNameField(ICConfigurationDescription cfgd) {
   IConfiguration icfg = ManagedBuildManager.getConfigurationForDescription(cfgd);
   String id = cfgd.getId();
   if (icfg != null) {
     IToolChain toolchain = icfg.getToolChain();
     ITool[] tools = toolchain.getTools();
     for (int j = 0; j < tools.length; ++j) {
       ITool tool = tools[j];
       if (tool.getName().equals("configure")) { // $NON-NLS-1$
         IOption option =
             tool.getOptionBySuperClassId(
                 "org.eclipse.linuxtools.cdt.autotools.core.option.configure.name"); // $NON-NLS-1$
         IHoldsOptions h = tool;
         try {
           IOption optionToSet = h.getOptionToSet(option, false);
           optionToSet.setValue(id);
         } catch (BuildException e) {
         }
       }
     }
   }
 }
  @Override
  public String generateCommand(IOption optionCmd, IVariableSubstitutor macroSubstitutor) {

    String allValue = "";
    String[] optionList = null;

    String command = optionCmd.getCommand();
    Object optionListArg = optionCmd.getValue();
    String optionRefId = optionCmd.getBaseId();
    IHoldsOptions optionHolder = optionCmd.getOptionHolder();

    // If cache is defined then it already contains the cdt path.
    optionRefId = optionRefId.substring(0, optionRefId.lastIndexOf("."));
    IOption optionCached = optionHolder.getOptionBySuperClassId(optionRefId + ".cache");
    try {
      if (optionCached.getStringListValue().length != 0) {
        return "";
      }
    } catch (BuildException e) {
    }

    if (!(optionListArg instanceof ArrayList<?>)) {
      return "";
    }
    ((ArrayList<String>) (optionListArg)).trimToSize();
    optionList = ((ArrayList<String>) (optionListArg)).toArray(new String[0]);

    if (optionList.length != 0) {
      for (String argValue : optionList) {
        allValue += command + '"' + stripRelative(argValue, macroSubstitutor) + '"' + " ";
      }
      allValue = allValue.trim();
      return allValue;
    }
    return "";
  }
  public void testEnablement_Bug250686() throws Exception {
    final String testName = getName();
    IProject project = ManagedBuildTestHelper.createProject(testName, PROJECT_TYPE);
    assertNotNull(project);

    IFolder folder = ManagedBuildTestHelper.createFolder(project, "Folder");
    assertNotNull(folder);

    IFile file = ManagedBuildTestHelper.createFile(project, "Folder/file.c");
    assertNotNull(file);

    ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project);
    prjDescription.getConfigurationByName(CFG_NAME);

    IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
    IConfiguration cfg = info.getManagedProject().getConfigurations()[0];
    assertNotNull(cfg);
    assertEquals(CFG_NAME, cfg.getName());

    {
      // Round 1. Test root folder option
      IFolderInfo rootFolderInfo = cfg.getRootFolderInfo();
      assertNotNull(rootFolderInfo);

      IOption option = getOptionForFolder(rootFolderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ENABLEMENT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 1. Test subfolder option
      IResourceInfo folderInfo = cfg.getResourceInfo(folder.getFullPath(), false);
      assertNotNull(folderInfo);
      assertTrue(folderInfo instanceof IFolderInfo);

      IOption option = getOptionForFolder((IFolderInfo) folderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ENABLEMENT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 1. Test file option
      IResourceInfo fileInfo = cfg.getResourceInfo(file.getFullPath(), false);
      assertNotNull(fileInfo);
      assertTrue(fileInfo instanceof IFolderInfo);

      // Option is taken from root folder here
      IOption option = getOptionForFolder((IFolderInfo) fileInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ENABLEMENT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 2. Override the value of the option for the root folder
      IFolderInfo rootFolderInfo = cfg.getRootFolderInfo();
      ITool[] tools = rootFolderInfo.getToolsBySuperClassId(TOOL_ID);
      assertEquals(1, tools.length);
      IOption option = getOptionForFolder(rootFolderInfo, TOOL_ID, OPTION_ID);
      rootFolderInfo.setOption(tools[0], option, OPTION_VALUE_ROOT);
    }

    {
      // Round 2. Test root folder option
      IFolderInfo rootFolderInfo = cfg.getRootFolderInfo();
      assertNotNull(rootFolderInfo);

      IOption option = getOptionForFolder(rootFolderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ROOT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 2. Test subfolder option
      IResourceInfo folderInfo = cfg.getResourceInfo(folder.getFullPath(), false);
      assertNotNull(folderInfo);
      assertTrue(folderInfo instanceof IFolderInfo);

      IOption option = getOptionForFolder((IFolderInfo) folderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ROOT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 2. Test file option
      IResourceInfo fileInfo = cfg.getResourceInfo(file.getFullPath(), false);
      assertNotNull(fileInfo);
      assertTrue(fileInfo instanceof IFolderInfo);

      // Option is taken from root folder here
      IOption option = getOptionForFolder((IFolderInfo) fileInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ROOT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 3. Override the value of the option for the subfolder
      IFolderInfo folderInfo = cfg.createFolderInfo(folder.getFullPath());
      assertNotNull(folderInfo);

      ITool[] tools = folderInfo.getToolsBySuperClassId(TOOL_ID);
      assertEquals(1, tools.length);

      IOption option = getOptionForFolder(folderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ROOT, option.getValue());
      assertFalse(option.isExtensionElement());

      folderInfo.setOption(tools[0], option, OPTION_VALUE_FOLDER);
    }

    {
      // Round 3. Test root folder option
      IFolderInfo rootFolderInfo = cfg.getRootFolderInfo();
      assertNotNull(rootFolderInfo);

      IOption option = getOptionForFolder(rootFolderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ROOT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 3. Test subfolder option
      IResourceInfo folderInfo = cfg.getResourceInfo(folder.getFullPath(), false);
      assertNotNull(folderInfo);
      assertTrue(folderInfo instanceof IFolderInfo);

      IOption option = getOptionForFolder((IFolderInfo) folderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_FOLDER, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 3. Test file option
      IResourceInfo fileInfo = cfg.getResourceInfo(file.getFullPath(), false);
      assertNotNull(fileInfo);
      assertTrue(fileInfo instanceof IFolderInfo);

      // Option is taken from parent folder here
      IOption option = getOptionForFolder((IFolderInfo) fileInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_FOLDER, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 4. Override the value of the option for the file
      IFileInfo fileInfo = cfg.createFileInfo(file.getFullPath());
      assertNotNull(fileInfo);

      ITool[] tools = fileInfo.getTools();
      assertEquals(1, tools.length);
      ITool tool = tools[0];
      assertNotNull(tool);

      IOption option = getOptionForFile(fileInfo, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_FOLDER, option.getValue());
      assertFalse(option.isExtensionElement());

      fileInfo.setOption(tool, option, OPTION_VALUE_FILE);
    }

    {
      // Round 4. Test root folder option
      IFolderInfo rootFolderInfo = cfg.getRootFolderInfo();
      assertNotNull(rootFolderInfo);

      IOption option = getOptionForFolder(rootFolderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_ROOT, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 4. Test subfolder option
      IResourceInfo folderInfo = cfg.getResourceInfo(folder.getFullPath(), false);
      assertNotNull(folderInfo);
      assertTrue(folderInfo instanceof IFolderInfo);

      IOption option = getOptionForFolder((IFolderInfo) folderInfo, TOOL_ID, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_FOLDER, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    {
      // Round 4. Test file option
      IResourceInfo fileInfo = cfg.getResourceInfo(file.getFullPath(), false);
      assertNotNull(fileInfo);
      assertTrue(fileInfo instanceof IFileInfo);

      IOption option = getOptionForFile((IFileInfo) fileInfo, OPTION_ID);
      assertNotNull(option);
      assertEquals(OPTION_VALUE_FILE, option.getValue());
      assertFalse(option.isExtensionElement());
    }

    ManagedBuildTestHelper.removeProject(testName);
  }
  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) {
     }
   }
 }