diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.managedbuilder.ui.tests/META-INF/MANIFEST.MF
index 07e2a24ad8b..c4114bca42f 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui.tests/META-INF/MANIFEST.MF
+++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/META-INF/MANIFEST.MF
@@ -13,7 +13,8 @@ Require-Bundle: org.eclipse.ui,
org.junit,
org.eclipse.cdt.managedbuilder.core,
org.eclipse.cdt.core,
- org.eclipse.core.resources
+ org.eclipse.core.resources,
+ org.eclipse.cdt.managedbuilder.core.tests
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.eclipse.cdt.managedbuilder.ui.tests,
diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/plugin.xml b/build/org.eclipse.cdt.managedbuilder.ui.tests/plugin.xml
index cb7d4257433..d344a2f2724 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui.tests/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/plugin.xml
@@ -46,6 +46,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/HideEmptyOptionCategoryApplicabilityCalculator.java b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/HideEmptyOptionCategoryApplicabilityCalculator.java
new file mode 100644
index 00000000000..f24d9bd4e20
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/HideEmptyOptionCategoryApplicabilityCalculator.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2018 STMicroelectronics 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:
+ * STMicroelectronics
+ *******************************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.tests.properties;
+
+import java.util.Arrays;
+
+import org.eclipse.cdt.managedbuilder.core.IBuildObject;
+import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
+import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.IOptionCategoryApplicability;
+
+public class HideEmptyOptionCategoryApplicabilityCalculator implements IOptionCategoryApplicability {
+
+ public HideEmptyOptionCategoryApplicabilityCalculator() {
+ }
+
+ @Override
+ public boolean isOptionCategoryVisible(IBuildObject configuration, IHoldsOptions optHolder,
+ IOptionCategory category) {
+ // Check that the category contains at least one option
+ return Arrays.asList(optHolder.getOptions())
+ .stream()
+ .map((opt) -> opt.getCategory())
+ .anyMatch((cat) -> cat != null && cat.equals(category));
+ }
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/ToolListContentProviderTests.java b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/ToolListContentProviderTests.java
new file mode 100644
index 00000000000..81bca2aba95
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/ToolListContentProviderTests.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2018 STMicroelectronics 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:
+ * STMicroelectronics
+ *******************************************************************************/
+package org.eclipse.cdt.managedbuilder.ui.tests.properties;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
+import org.eclipse.cdt.managedbuilder.ui.properties.ToolListContentProvider;
+import org.eclipse.cdt.managedbuilder.ui.properties.ToolListElement;
+import org.eclipse.core.resources.IProject;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+public class ToolListContentProviderTests extends TestCase {
+
+ private static final String testName = "ToolListContentProvider"; //$NON-NLS-1$
+ private static boolean fHandleValueCalled;
+
+ public static Test suite() {
+ return new TestSuite(ToolListContentProviderTests.class);
+ }
+
+ private void resetValueHandler(){
+ fHandleValueCalled = false;
+ }
+
+ public void testToolListContentProvider(){
+ resetValueHandler();
+
+ IProject project = ManagedBuildTestHelper.createProject(testName,
+ "cdt.managedbuild.target.ToolListContentProvider.exe"); //$NON-NLS-1$
+
+ IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
+ IConfiguration cfg = info.getManagedProject().getConfigurations()[0];
+ assertFalse(fHandleValueCalled);
+
+ doTestToolListContentProvider(cfg);
+
+ ManagedBuildTestHelper.removeProject(testName);
+ }
+
+ private void doTestToolListContentProvider(IConfiguration cfg){
+ ToolListContentProvider provider = new ToolListContentProvider(ToolListContentProvider.PROJECT);
+ provider.inputChanged(null, null, cfg.getRootFolderInfo());
+
+ ToolListElement[] elements = (ToolListElement[])provider.getChildren(cfg);
+
+ // Toolchain level
+ List toolchainOptCats = getOptionCategories(elements);
+ assertTrue(toolchainOptCats.contains("ToolListContentProvider.toolchain.empty.category1"));
+ assertFalse(toolchainOptCats.contains("ToolListContentProvider.toolchain.empty.category2"));
+
+ // Tool level
+ for (ToolListElement element : elements) {
+ ITool tool = element.getTool();
+ if (tool != null && tool.getBaseId().equals("ToolListContentProvider.tool.empty1")) {
+ List toolOptCats = getOptionCategories(element.getChildElements());
+ assertTrue(toolOptCats.contains("ToolListContentProvider.tool.empty.category1"));
+ assertFalse(toolOptCats.contains("ToolListContentProvider.tool.empty.category2"));
+ }
+ }
+ }
+
+ private List getOptionCategories(ToolListElement[] elements) {
+ List res = new ArrayList<>();
+ for (ToolListElement element : elements) {
+ IOptionCategory cat = element.getOptionCategory();
+ if (cat != null) { // Only list nodes with option category
+ String id = cat.getBaseId();
+ assertNotNull(id);
+ res.add(id);
+ }
+ }
+ return res;
+ }
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/suite/AutomatedIntegrationSuite.java b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/suite/AutomatedIntegrationSuite.java
index fc7b8a16dec..6f11646356e 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/suite/AutomatedIntegrationSuite.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/suite/AutomatedIntegrationSuite.java
@@ -15,6 +15,7 @@ import junit.framework.TestSuite;
import org.eclipse.cdt.managedbuilder.ui.tests.TestCProjectPlatformPage;
import org.eclipse.cdt.managedbuilder.ui.tests.TestCustomPageManager;
+import org.eclipse.cdt.managedbuilder.ui.tests.properties.ToolListContentProviderTests;
/**
*
@@ -30,6 +31,7 @@ public class AutomatedIntegrationSuite {
// TODO uncoment this
suite.addTest(TestCustomPageManager.suite());
suite.addTestSuite(TestCProjectPlatformPage.class);
+ suite.addTest(ToolListContentProviderTests.suite());
//$JUnit-END$
return suite;
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 f8a3962deba..947caeaf6d3 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
@@ -120,7 +120,7 @@ public class ToolListContentProvider implements ITreeContentProvider{
for (int i=0; i