From aef0eaee8c5cf28b441ec0cfe535acd30418e98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Svensson?= Date: Sat, 6 Oct 2018 23:09:56 +0200 Subject: [PATCH] Bug 539882: Applicability calculator should be called with option category MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some situations, it's convenient to create option categories on the abstract tool and use an option applicability calculator to hide the option category if no option is added to the category in an extending instance of the tool. To make the decision, the calculator needs to know what category is to be checked. Change-Id: Id4a269ee583f1f3dee88dee797ba89a0e92d1a42 Signed-off-by: Torbjörn Svensson --- .../META-INF/MANIFEST.MF | 3 +- .../plugin.xml | 62 +++++++++++++ ...OptionCategoryApplicabilityCalculator.java | 34 +++++++ .../ToolListContentProviderTests.java | 92 +++++++++++++++++++ .../suite/AutomatedIntegrationSuite.java | 2 + .../properties/ToolListContentProvider.java | 2 +- 6 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/HideEmptyOptionCategoryApplicabilityCalculator.java create mode 100644 build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/properties/ToolListContentProviderTests.java 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