diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/language/settings/providers/AbstractBuildCommandParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/language/settings/providers/AbstractBuildCommandParser.java index 820788f67f4..d99cbab9069 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/language/settings/providers/AbstractBuildCommandParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/language/settings/providers/AbstractBuildCommandParser.java @@ -16,14 +16,13 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.IErrorParser2; import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.errorparsers.RegexErrorParser; import org.eclipse.cdt.core.errorparsers.RegexErrorPattern; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; -import org.eclipse.cdt.internal.core.ConsoleOutputSniffer; +import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; @@ -36,9 +35,6 @@ import org.eclipse.core.runtime.jobs.Job; * Abstract class for providers parsing compiler option from build command when it * is present in build output. * - * Note: IErrorParser interface is used here to work around {@link ConsoleOutputSniffer} having - * no access from CDT core to build packages. TODO - elaborate? - * * @since 7.2 */ public abstract class AbstractBuildCommandParser extends AbstractLanguageSettingsOutputScanner { @@ -169,7 +165,7 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting if (settingsFolder.isAccessible()) rule = currentProject.getFile(".settings/language.settings.xml"); } catch (CoreException e) { - CCorePlugin.log(e); + MakeCorePlugin.log(e); } } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetector.java index 9112db4b1c7..69250030db5 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetector.java @@ -50,8 +50,10 @@ public class GCCBuiltinSpecsDetector extends ToolchainBuiltinSpecsDetector imple return optionParsers; } - private List makeList(final String line) { - return new ArrayList() {{ add(line); }}; + private List makeList(String line) { + List list = new ArrayList(); + list.add(line); + return list; } @Override diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetectorCygwin.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetectorCygwin.java index 53ec30d1d43..5081ab12476 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetectorCygwin.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/language/settings/providers/GCCBuiltinSpecsDetectorCygwin.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2011 Andrew Gvozdev and others. + * Copyright (c) 2009, 2012 Andrew Gvozdev 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 @@ -18,7 +18,7 @@ import org.eclipse.core.resources.IResource; /** * Class to detect built-in compiler settings. - * The paths are converted to cygwin "filesystem" representation. Then + * The paths are converted to cygwin "filesystem" representation. * */ public class GCCBuiltinSpecsDetectorCygwin extends GCCBuiltinSpecsDetector { @@ -34,9 +34,9 @@ public class GCCBuiltinSpecsDetectorCygwin extends GCCBuiltinSpecsDetector { @Override protected URI getMappedRootURI(IResource sourceFile, String parsedResourceName) { - if (mappedRootURI==null) { + if (mappedRootURI == null) { mappedRootURI = super.getMappedRootURI(sourceFile, parsedResourceName); - if (mappedRootURI==null) { + if (mappedRootURI == null) { mappedRootURI = CYGWIN_ROOT; } } @@ -45,9 +45,9 @@ public class GCCBuiltinSpecsDetectorCygwin extends GCCBuiltinSpecsDetector { @Override protected URI getBuildDirURI(URI mappedRootURI) { - if (buildDirURI==null) { + if (buildDirURI == null) { buildDirURI = super.getBuildDirURI(mappedRootURI); - if (buildDirURI==null) { + if (buildDirURI == null) { buildDirURI = CYGWIN_ROOT; } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ToolchainBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ToolchainBuiltinSpecsDetector.java index 55184ab8bd4..579793b3f81 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ToolchainBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ToolchainBuiltinSpecsDetector.java @@ -30,11 +30,19 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; */ public abstract class ToolchainBuiltinSpecsDetector extends AbstractBuiltinSpecsDetector { private Map toolMap = new HashMap(); + /** - * TODO + * Concrete compiler specs detectors need to supply Toolchain ID. + * + * Tool-chain id must be supplied for global providers where we don't + * have configuration description to figure that out programmatically. */ protected abstract String getToolchainId(); + /** + * Finds a tool handling given language in the tool-chain. + * This returns the first tool found. + */ private ITool getTool(String languageId) { ITool langTool = toolMap.get(languageId); if (langTool != null) { @@ -42,33 +50,40 @@ public abstract class ToolchainBuiltinSpecsDetector extends AbstractBuiltinSpecs } String toolchainId = getToolchainId(); - IToolChain toolchain = ManagedBuildManager.getExtensionToolChain(toolchainId); - if (toolchain != null) { - ITool[] tools = toolchain.getTools(); - for (ITool tool : tools) { - IInputType[] inputTypes = tool.getInputTypes(); - for (IInputType inType : inputTypes) { - String lang = inType.getLanguageId(tool); - if (languageId.equals(lang)) { - toolMap.put(languageId, tool); - return tool; - } - } + for (IToolChain toolchain = ManagedBuildManager.getExtensionToolChain(toolchainId);toolchain != null;toolchain = toolchain.getSuperClass()) { + ITool tool = getTool(languageId, toolchain); + if (tool != null) { + return tool; } } ManagedBuilderCorePlugin.error("Unable to find tool in toolchain="+toolchainId+" for language="+languageId); return null; } + private ITool getTool(String languageId, IToolChain toolchain) { + ITool[] tools = toolchain.getTools(); + for (ITool tool : tools) { + IInputType[] inputTypes = tool.getInputTypes(); + for (IInputType inType : inputTypes) { + String lang = inType.getLanguageId(tool); + if (languageId.equals(lang)) { + toolMap.put(languageId, tool); + return tool; + } + } + } + return null; + } + @Override protected String getCompilerCommand(String languageId) { ITool tool = getTool(languageId); - String compiler = tool.getToolCommand(); - if (compiler.length() == 0) { + String compilerCommand = tool.getToolCommand(); + if (compilerCommand.isEmpty()) { String msg = "Unable to find compiler command in toolchain="+getToolchainId(); ManagedBuilderCorePlugin.error(msg); } - return compiler; + return compilerCommand; } @Override @@ -79,7 +94,7 @@ public abstract class ToolchainBuiltinSpecsDetector extends AbstractBuiltinSpecs if (srcFileExtensions != null && srcFileExtensions.length > 0) { ext = srcFileExtensions[0]; } - if (ext == null || ext.length() == 0) { + if (ext == null || ext.isEmpty()) { ManagedBuilderCorePlugin.error("Unable to find file extension for language "+languageId); } return ext; diff --git a/xlc/org.eclipse.cdt.managedbuilder.xlc.core/src/org/eclipse/cdt/managedbuilder/xlc/core/XlcBuiltinSpecsDetector.java b/xlc/org.eclipse.cdt.managedbuilder.xlc.core/src/org/eclipse/cdt/managedbuilder/xlc/core/XlcBuiltinSpecsDetector.java index 5a0560ba265..bea9e94d56f 100644 --- a/xlc/org.eclipse.cdt.managedbuilder.xlc.core/src/org/eclipse/cdt/managedbuilder/xlc/core/XlcBuiltinSpecsDetector.java +++ b/xlc/org.eclipse.cdt.managedbuilder.xlc.core/src/org/eclipse/cdt/managedbuilder/xlc/core/XlcBuiltinSpecsDetector.java @@ -24,14 +24,11 @@ import org.eclipse.cdt.managedbuilder.language.settings.providers.ToolchainBuilt /** * Language settings provider to detect built-in compiler settings for IBM XLC compiler. - * Note that currently this class is hardwired to GCC toolchain - * {@code cdt.managedbuild.toolchain.gnu.base}. + * Note that currently this class is hardwired to GCC toolchain {@code cdt.managedbuild.toolchain.gnu.base}. */ public class XlcBuiltinSpecsDetector extends ToolchainBuiltinSpecsDetector implements ILanguageSettingsEditableProvider { // must match the toolchain definition in org.eclipse.cdt.managedbuilder.core.buildDefinitions extension point - // FIXME - ill defined XLC toolchain -// private static final String XLC_TOOLCHAIN_ID = "cdt.managedbuild.toolchain.xlc.exe.debug"; //$NON-NLS-1$ - private static final String GCC_TOOLCHAIN_ID = "cdt.managedbuild.toolchain.gnu.base"; //$NON-NLS-1$ + private static final String XLC_TOOLCHAIN_ID = "cdt.managedbuild.toolchain.xlc.exe.debug"; //$NON-NLS-1$ private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"']*(\\s*((\".*?\")|('.*?')|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ private static final int OPTION_GROUP = 0; @@ -58,8 +55,7 @@ public class XlcBuiltinSpecsDetector extends ToolchainBuiltinSpecsDetector imple @Override protected String getToolchainId() { -// return XLC_TOOLCHAIN_ID; - return GCC_TOOLCHAIN_ID; + return XLC_TOOLCHAIN_ID; } @Override @@ -80,7 +76,6 @@ public class XlcBuiltinSpecsDetector extends ToolchainBuiltinSpecsDetector imple return options; } - @Override public XlcBuiltinSpecsDetector cloneShallow() throws CloneNotSupportedException { return (XlcBuiltinSpecsDetector) super.cloneShallow(); @@ -91,5 +86,4 @@ public class XlcBuiltinSpecsDetector extends ToolchainBuiltinSpecsDetector imple return (XlcBuiltinSpecsDetector) super.clone(); } - }