Bug 571433: Make ManagedCommandLineGenerator API

Allow extenders to extend the ManagedCommandLineGenerator in order to
add options that are placed on the toolchain node instead of the tool.

Contributed by STMicroelectronics

Change-Id: I548bcbf72f1290cd4bc0ce830c27ce032a62c9c9
Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@st.com>
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedCommandLineGeneratorTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedCommandLineGeneratorTest.java
index e661cb1..0a14e0c 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedCommandLineGeneratorTest.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedCommandLineGeneratorTest.java
@@ -25,7 +25,7 @@
 import org.eclipse.cdt.managedbuilder.core.IProjectType;
 import org.eclipse.cdt.managedbuilder.core.ITool;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedCommandLineGenerator;
+import org.eclipse.cdt.managedbuilder.core.ManagedCommandLineGenerator;
 import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
 import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
 import org.eclipse.core.resources.IProject;
@@ -71,13 +71,8 @@
 		return new TestSuite(ManagedCommandLineGeneratorTest.class);
 	}
 
-	public final void testGetCommandLineGenerator() {
-		IManagedCommandLineGenerator gen = ManagedCommandLineGenerator.getCommandLineGenerator();
-		assertNotNull(gen);
-	}
-
 	public final void testGenerateCommandLineInfoPatterns() {
-		IManagedCommandLineGenerator gen = ManagedCommandLineGenerator.getCommandLineGenerator();
+		IManagedCommandLineGenerator gen = new ManagedCommandLineGenerator();
 		IManagedCommandLineInfo info = null;
 		for (int i = 0; i < testCommandLinePatterns.length; i++) {
 			info = gen.generateCommandLineInfo(null, COMMAND_VAL, FLAGS_ARRAY_VAL, OUTPUT_FLAG_VAL, OUTPUT_PREFIX_VAL,
@@ -90,7 +85,7 @@
 	}
 
 	public final void testGenerateCommandLineInfoDoublePattern() {
-		IManagedCommandLineGenerator gen = ManagedCommandLineGenerator.getCommandLineGenerator();
+		IManagedCommandLineGenerator gen = new ManagedCommandLineGenerator();
 
 		IManagedCommandLineInfo info = gen.generateCommandLineInfo(null, COMMAND_VAL, FLAGS_ARRAY_VAL, OUTPUT_FLAG_VAL,
 				OUTPUT_PREFIX_VAL, OUTPUT_VAL, INPUTS_ARRAY_VAL, "${OUTPUT_FLAG} ${OUTPUT_FLAG}");
@@ -99,7 +94,7 @@
 	}
 
 	public final void testGenerateCommandLineInfoParameters() {
-		IManagedCommandLineGenerator gen = ManagedCommandLineGenerator.getCommandLineGenerator();
+		IManagedCommandLineGenerator gen = new ManagedCommandLineGenerator();
 
 		IManagedCommandLineInfo info = gen.generateCommandLineInfo(null, "", FLAGS_ARRAY_VAL, OUTPUT_FLAG_VAL,
 				OUTPUT_PREFIX_VAL, OUTPUT_VAL, INPUTS_ARRAY_VAL, null);
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IManagedCommandLineInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IManagedCommandLineInfo.java
index 4cfce2c..8fc0d3c 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IManagedCommandLineInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IManagedCommandLineInfo.java
@@ -41,7 +41,9 @@
 
 	/**
 	 * provide list of resources used by tool for transformation
+	 * @deprecated Useless method that does not handle whitespace properly.
 	 */
+	@Deprecated
 	public String getInputs();
 
 	/**
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IResourceConfiguration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IResourceConfiguration.java
index 83e88e6..0a3b9e2 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IResourceConfiguration.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IResourceConfiguration.java
@@ -228,4 +228,9 @@
 	void setRebuildState(boolean rebuild);
 
 	void setTools(ITool[] tools);
+
+	/**
+	 * @since 9.2
+	 */
+	IToolChain getBaseToolChain();
 }
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 5966403..5708e0d 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
@@ -88,7 +88,6 @@
 import org.eclipse.cdt.managedbuilder.internal.core.IMatchKeyProvider;
 import org.eclipse.cdt.managedbuilder.internal.core.InputType;
 import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedCommandLineGenerator;
 import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
 import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
 import org.eclipse.cdt.managedbuilder.internal.core.MatchKey;
@@ -787,7 +786,7 @@
 		if (tool != null) {
 			return tool.getCommandLineGenerator();
 		}
-		return ManagedCommandLineGenerator.getCommandLineGenerator();
+		return new ManagedCommandLineGenerator();
 	}
 
 	/**
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCommandLineGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCommandLineGenerator.java
new file mode 100644
index 0000000..89bdfb7
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCommandLineGenerator.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2016 Intel Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Intel Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.managedbuilder.core;
+
+import org.eclipse.cdt.managedbuilder.internal.core.Tool;
+
+/**
+ * @since 9.2
+ */
+public class ManagedCommandLineGenerator implements IManagedCommandLineGenerator {
+
+	private static final String DOUBLE_QUOTE = "\""; //$NON-NLS-1$
+	private static final String WHITESPACE = " "; //$NON-NLS-1$
+
+	private static final String CMD_LINE_PRM_NAME = "COMMAND"; //$NON-NLS-1$
+	private static final String FLAGS_PRM_NAME = "FLAGS"; //$NON-NLS-1$
+	private static final String OUTPUT_FLAG_PRM_NAME = "OUTPUT_FLAG"; //$NON-NLS-1$
+	private static final String OUTPUT_PREFIX_PRM_NAME = "OUTPUT_PREFIX"; //$NON-NLS-1$
+	private static final String OUTPUT_PRM_NAME = "OUTPUT"; //$NON-NLS-1$
+	private static final String INPUTS_PRM_NAME = "INPUTS"; //$NON-NLS-1$
+
+	private String makeVariable(String variableName) {
+		return "${" + variableName + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	@Override
+	public IManagedCommandLineInfo generateCommandLineInfo(ITool tool, String commandName, String[] flags,
+			String outputFlag, String outputPrefix, String outputName, String[] inputResources,
+			String commandLinePattern) {
+		if (commandLinePattern == null || commandLinePattern.length() <= 0) {
+			commandLinePattern = Tool.DEFAULT_PATTERN;
+		}
+
+		// if the output name isn't a variable then quote it
+		if (outputName.length() > 0 && outputName.indexOf("$(") != 0) { //$NON-NLS-1$
+			outputName = DOUBLE_QUOTE + outputName + DOUBLE_QUOTE;
+		}
+
+		String inputsStr = ""; //$NON-NLS-1$
+		if (inputResources != null) {
+			for (String inp : inputResources) {
+				if (inp != null && !inp.isEmpty()) {
+					// if the input resource isn't a variable then quote it
+					if (inp.indexOf("$(") != 0) { //$NON-NLS-1$
+						inp = DOUBLE_QUOTE + inp + DOUBLE_QUOTE;
+					}
+					inputsStr = inputsStr + inp + WHITESPACE;
+				}
+			}
+			inputsStr = inputsStr.trim();
+		}
+
+		String flagsStr = stringArrayToString(flags);
+
+		String command = commandLinePattern;
+
+		command = command.replace(makeVariable(CMD_LINE_PRM_NAME), commandName);
+		command = command.replace(makeVariable(FLAGS_PRM_NAME), flagsStr);
+		command = command.replace(makeVariable(OUTPUT_FLAG_PRM_NAME), outputFlag);
+		command = command.replace(makeVariable(OUTPUT_PREFIX_PRM_NAME), outputPrefix);
+		command = command.replace(makeVariable(OUTPUT_PRM_NAME), outputName);
+		command = command.replace(makeVariable(INPUTS_PRM_NAME), inputsStr);
+
+		command = command.replace(makeVariable(CMD_LINE_PRM_NAME.toLowerCase()), commandName);
+		command = command.replace(makeVariable(FLAGS_PRM_NAME.toLowerCase()), flagsStr);
+		command = command.replace(makeVariable(OUTPUT_FLAG_PRM_NAME.toLowerCase()), outputFlag);
+		command = command.replace(makeVariable(OUTPUT_PREFIX_PRM_NAME.toLowerCase()), outputPrefix);
+		command = command.replace(makeVariable(OUTPUT_PRM_NAME.toLowerCase()), outputName);
+		command = command.replace(makeVariable(INPUTS_PRM_NAME.toLowerCase()), inputsStr);
+
+		return toManagedCommandLineInfo(command.trim(), commandLinePattern, commandName, flags, outputFlag,
+				outputPrefix, outputName, inputResources);
+	}
+
+	protected IManagedCommandLineInfo toManagedCommandLineInfo(String commandLine, String commandLinePattern,
+			String commandName, String[] flags, String outputFlag, String outputPrefix, String outputName,
+			String[] inputResources) {
+		String flagsStr = stringArrayToString(flags);
+		String inputResourcesStr = stringArrayToString(inputResources);
+
+		return new IManagedCommandLineInfo() {
+			@Override
+			public String getCommandLine() {
+				return commandLine;
+			}
+
+			@Override
+			public String getCommandLinePattern() {
+				return commandLinePattern;
+			}
+
+			@Override
+			public String getCommandName() {
+				return commandName;
+			}
+
+			@Override
+			public String getFlags() {
+				return flagsStr;
+			}
+
+			@Override
+			public String getOutputFlag() {
+				return outputFlag;
+			}
+
+			@Override
+			public String getOutputPrefix() {
+				return outputPrefix;
+			}
+
+			@Override
+			public String getOutput() {
+				return outputName;
+			}
+
+			@Override
+			public String getInputs() {
+				return inputResourcesStr;
+			}
+		};
+	}
+
+	private String stringArrayToString(String[] array) {
+		if (array == null) {
+			return ""; //$NON-NLS-1$
+		}
+		return String.join(WHITESPACE, array);
+	}
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineGenerator.java
index 6e52fc3..d447167 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineGenerator.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineGenerator.java
@@ -17,6 +17,10 @@
 import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
 import org.eclipse.cdt.managedbuilder.core.ITool;
 
+/**
+ * @deprecated Use {@link org.eclipse.cdt.managedbuilder.core.ManagedCommandLineGenerator}
+ */
+@Deprecated
 public class ManagedCommandLineGenerator implements IManagedCommandLineGenerator {
 
 	public final String AT = "@"; //$NON-NLS-1$
@@ -51,7 +55,6 @@
 	private static ManagedCommandLineGenerator cmdLineGen;
 
 	protected ManagedCommandLineGenerator() {
-		cmdLineGen = null;
 	}
 
 	public static ManagedCommandLineGenerator getCommandLineGenerator() {
@@ -60,70 +63,12 @@
 		return cmdLineGen;
 	}
 
-	private String makeVariable(String variableName) {
-		return "${" + variableName + "}"; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator#getCommandLineInfo(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String[], java.lang.String)
-	 */
 	@Override
 	public IManagedCommandLineInfo generateCommandLineInfo(ITool tool, String commandName, String[] flags,
 			String outputFlag, String outputPrefix, String outputName, String[] inputResources,
 			String commandLinePattern) {
-		if (commandLinePattern == null || commandLinePattern.length() <= 0)
-			commandLinePattern = Tool.DEFAULT_PATTERN;
-
-		// if the output name isn't a variable then quote it
-		if (outputName.length() > 0 && outputName.indexOf("$(") != 0) //$NON-NLS-1$
-			outputName = DOUBLE_QUOTE + outputName + DOUBLE_QUOTE;
-
-		String inputsStr = ""; //$NON-NLS-1$
-		if (inputResources != null) {
-			for (String inp : inputResources) {
-				if (inp != null && inp.length() > 0) {
-					// if the input resource isn't a variable then quote it
-					if (inp.indexOf("$(") != 0) { //$NON-NLS-1$
-						inp = DOUBLE_QUOTE + inp + DOUBLE_QUOTE;
-					}
-					inputsStr = inputsStr + inp + WHITESPACE;
-				}
-			}
-			inputsStr = inputsStr.trim();
-		}
-
-		String flagsStr = stringArrayToString(flags);
-
-		String command = commandLinePattern;
-
-		command = command.replace(makeVariable(CMD_LINE_PRM_NAME), commandName);
-		command = command.replace(makeVariable(FLAGS_PRM_NAME), flagsStr);
-		command = command.replace(makeVariable(OUTPUT_FLAG_PRM_NAME), outputFlag);
-		command = command.replace(makeVariable(OUTPUT_PREFIX_PRM_NAME), outputPrefix);
-		command = command.replace(makeVariable(OUTPUT_PRM_NAME), outputName);
-		command = command.replace(makeVariable(INPUTS_PRM_NAME), inputsStr);
-
-		command = command.replace(makeVariable(CMD_LINE_PRM_NAME.toLowerCase()), commandName);
-		command = command.replace(makeVariable(FLAGS_PRM_NAME.toLowerCase()), flagsStr);
-		command = command.replace(makeVariable(OUTPUT_FLAG_PRM_NAME.toLowerCase()), outputFlag);
-		command = command.replace(makeVariable(OUTPUT_PREFIX_PRM_NAME.toLowerCase()), outputPrefix);
-		command = command.replace(makeVariable(OUTPUT_PRM_NAME.toLowerCase()), outputName);
-		command = command.replace(makeVariable(INPUTS_PRM_NAME.toLowerCase()), inputsStr);
-
-		return new ManagedCommandLineInfo(command.trim(), commandLinePattern, commandName, stringArrayToString(flags),
-				outputFlag, outputPrefix, outputName, stringArrayToString(inputResources));
+		// Forward the call to the API implementation
+		return new org.eclipse.cdt.managedbuilder.core.ManagedCommandLineGenerator().generateCommandLineInfo(tool,
+				commandName, flags, outputFlag, outputPrefix, outputName, inputResources, commandLinePattern);
 	}
-
-	private String stringArrayToString(String[] array) {
-		if (array == null || array.length <= 0)
-			return ""; //$NON-NLS-1$
-		StringBuilder sb = new StringBuilder();
-		for (int i = 0; i < array.length; i++) {
-			if (i > 0) // we add whitespace after each but not first so .trim() is a no-op
-				sb.append(WHITESPACE);
-			sb.append(array[i]);
-		}
-		return sb.toString().trim();
-	}
-
 }
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineInfo.java
index c90d4e7..02f6d74 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedCommandLineInfo.java
@@ -15,6 +15,10 @@
 
 import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
 
+/**
+ * @deprecated Use {@link org.eclipse.cdt.managedbuilder.core.ManagedCommandLineGenerator}
+ */
+@Deprecated
 public class ManagedCommandLineInfo implements IManagedCommandLineInfo {
 
 	private String commandLine;
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiFileInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiFileInfo.java
index de509d8..c56e363 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiFileInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MultiFileInfo.java
@@ -18,6 +18,7 @@
 import org.eclipse.cdt.managedbuilder.core.IFileInfo;
 import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
 import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
 import org.eclipse.core.resources.IResource;
 
 /**
@@ -160,4 +161,9 @@
 		}
 	}
 
+	@Override
+	public IToolChain getBaseToolChain() {
+		return ((IFileInfo) fRis[curr]).getBaseToolChain();
+	}
+
 }
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 74ce5b7..5ee7e6c 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
@@ -918,6 +918,7 @@
 		return list.toArray(new BuildLanguageData[list.size()]);
 	}
 
+	@Override
 	public IToolChain getBaseToolChain() {
 		ITool tools[] = getToolsToInvoke();
 		ITool baseTool = null;
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
index 0fd5e10..6bb19ec 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
@@ -65,6 +65,7 @@
 import org.eclipse.cdt.managedbuilder.core.IToolChain;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
+import org.eclipse.cdt.managedbuilder.core.ManagedCommandLineGenerator;
 import org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildEntryStorage;
 import org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildLanguageData;
 import org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression;
@@ -2190,7 +2191,7 @@
 			} catch (CoreException e) {
 			}
 		}
-		return ManagedCommandLineGenerator.getCommandLineGenerator();
+		return new ManagedCommandLineGenerator();
 	}
 
 	/* (non-Javadoc)
diff --git a/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF b/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF
index 0780ea7..2630cf6 100644
--- a/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF
+++ b/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.cdt.build.crossgcc;singleton:=true
-Bundle-Version: 1.2.100.qualifier
+Bundle-Version: 1.2.200.qualifier
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.cdt.core;bundle-version="5.1.0",
- org.eclipse.cdt.managedbuilder.core;bundle-version="5.0.100",
+ org.eclipse.cdt.managedbuilder.core;bundle-version="9.2.0",
  org.eclipse.cdt.managedbuilder.gnu.ui;bundle-version="5.0.100",
  org.eclipse.core.resources;bundle-version="3.5.0",
  org.eclipse.cdt.managedbuilder.ui;bundle-version="8.1.0",
diff --git a/cross/org.eclipse.cdt.build.crossgcc/about.properties b/cross/org.eclipse.cdt.build.crossgcc/about.properties
index ddd2919..1f35a2b 100644
--- a/cross/org.eclipse.cdt.build.crossgcc/about.properties
+++ b/cross/org.eclipse.cdt.build.crossgcc/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009, 2020 Contributors to the Eclipse Foundation
+# Copyright (c) 2009, 2021 Contributors to the Eclipse Foundation
 #
 # See the NOTICE file(s) distributed with this work for additional
 # information regarding copyright ownership.
@@ -24,7 +24,7 @@
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-Copyright (c) 2009, 2020 Contributors to the Eclipse Foundation
+Copyright (c) 2009, 2021 Contributors to the Eclipse Foundation
 \n\
 See the NOTICE file(s) distributed with this work for additional\n\
 information regarding copyright ownership.\n\
diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java
index 076c83f..0e6505e 100644
--- a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java
+++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java
@@ -16,10 +16,10 @@
 import org.eclipse.cdt.managedbuilder.core.IBuildObject;
 import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
 import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
 import org.eclipse.cdt.managedbuilder.core.ITool;
 import org.eclipse.cdt.managedbuilder.core.IToolChain;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedCommandLineGenerator;
-import org.eclipse.cdt.managedbuilder.internal.core.ResourceConfiguration;
+import org.eclipse.cdt.managedbuilder.core.ManagedCommandLineGenerator;
 
 public class CrossCommandLineGenerator extends ManagedCommandLineGenerator {
 
@@ -29,10 +29,11 @@
 			String commandLinePattern) {
 		IBuildObject parent = tool.getParent();
 		IToolChain toolchain;
-		if (parent instanceof ResourceConfiguration)
-			toolchain = ((ResourceConfiguration) parent).getBaseToolChain();
-		else
+		if (parent instanceof IResourceConfiguration) {
+			toolchain = ((IResourceConfiguration) parent).getBaseToolChain();
+		} else {
 			toolchain = (IToolChain) parent;
+		}
 
 		IOption option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.prefix"); //$NON-NLS-1$
 		String prefix = (String) option.getValue();