/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation 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:
* Intel Corporation - Initial API and implementation
* Dmitry Kozlov (CodeSourcery) - Save build output preferences (bug 294106)
* Andrew Gvozdev (Quoin Inc) - Saving build output implemented in different way (bug 306222)
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICSourceEntry;
import org.eclipse.cdt.core.settings.model.MultiItemsHolder;
import org.eclipse.cdt.core.settings.model.extension.CBuildData;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IBuildObjectProperties;
import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IMultiConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
import org.eclipse.cdt.managedbuilder.core.ITool;
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.envvar.IConfigurationEnvironmentVariableSupplier;
import org.eclipse.cdt.managedbuilder.macros.IConfigurationBuildMacroSupplier;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.osgi.framework.Version;
/**
* This class represents a set of configurations
* to be edited simultaneously on property pages.
*/
public class MultiConfiguration extends MultiItemsHolder implements
IMultiConfiguration {
private static final String[] EMPTY_STR_ARRAY = new String[0];
protected IConfiguration[] fCfgs = null;
private int curr = 0;
public MultiConfiguration(IConfiguration[] cfs) {
fCfgs = cfs;
for (int i=0; i<fCfgs.length; i++)
if (((Configuration)fCfgs[i]).getConfigurationDescription().isActive()) {
curr = i;
break;
}
}
public MultiConfiguration(ICConfigurationDescription[] cfds) {
this(cfds2cfs(cfds));
}
public static IConfiguration[] cfds2cfs(ICConfigurationDescription[] cfgds) {
IConfiguration[] cfs = new IConfiguration[cfgds.length];
for (int i=0; i<cfgds.length; i++)
cfs[i] = ManagedBuildManager.getConfigurationForDescription(cfgds[i]);
return cfs;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.settings.model.MultiItemsHolder#getItems()
*/
@Override
public Object[] getItems() {
return fCfgs;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#buildsFileType(java.lang.String)
*/
public boolean buildsFileType(String srcExt) {
return curr().buildsFileType(srcExt);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#calculateTargetTool()
*/
public ITool calculateTargetTool() {
return curr().calculateTargetTool();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#changeBuilder(org.eclipse.cdt.managedbuilder.core.IBuilder, java.lang.String, java.lang.String)
*/
public void changeBuilder(IBuilder newBuilder, String id, String name) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].changeBuilder(newBuilder, id, name);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath)
*/
public IFileInfo createFileInfo(IPath path) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.createFileInfo(1)"); //$NON-NLS-1$
return curr().createFileInfo(path);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath, java.lang.String, java.lang.String)
*/
public IFileInfo createFileInfo(IPath path, String id, String name) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.createFileInfo(3)"); //$NON-NLS-1$
return curr().createFileInfo(path, id, name);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath, org.eclipse.cdt.managedbuilder.core.IFolderInfo, org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String, java.lang.String)
*/
public IFileInfo createFileInfo(IPath path, IFolderInfo base,
ITool baseTool, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFileInfo(5)"); //$NON-NLS-1$
return null; // curr().createFileInfo(path, base, baseTool, id, name);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath, org.eclipse.cdt.managedbuilder.core.IFileInfo, java.lang.String, java.lang.String)
*/
public IFileInfo createFileInfo(IPath path, IFileInfo base, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFileInfo(4)"); //$NON-NLS-1$
return null; // curr().createFileInfo(path, base, id, name);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFolderInfo(org.eclipse.core.runtime.IPath)
*/
public IFolderInfo createFolderInfo(IPath path) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFolderInfo()"); //$NON-NLS-1$
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFolderInfo(org.eclipse.core.runtime.IPath, java.lang.String, java.lang.String)
*/
public IFolderInfo createFolderInfo(IPath path, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFolderInfo(3)"); //$NON-NLS-1$
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFolderInfo(org.eclipse.core.runtime.IPath, org.eclipse.cdt.managedbuilder.core.IFolderInfo, java.lang.String, java.lang.String)
*/
public IFolderInfo createFolderInfo(IPath path, IFolderInfo base, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFolderInfo(4)"); //$NON-NLS-1$
return null; // do nothing now
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createResourceConfiguration(org.eclipse.core.resources.IFile)
*/
public IResourceConfiguration createResourceConfiguration(IFile file) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createResourceConfiguration()"); //$NON-NLS-1$
return null; // do nothing now
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createToolChain(org.eclipse.cdt.managedbuilder.core.IToolChain, java.lang.String, java.lang.String, boolean)
*/
public IToolChain createToolChain(IToolChain superClass, String Id,
String name, boolean isExtensionElement) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createToolChain()"); //$NON-NLS-1$
return null; // do nothing
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#generateToolCommandLineInfo(java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String[], org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath)
*/
public IManagedCommandLineInfo generateToolCommandLineInfo(
String sourceExtension,
String[] flags,
String outputFlag,
String outputPrefix,
String outputName,
String[] inputResources,
IPath inputLocation,
IPath outputLocation) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.generateToolCommandLineInfo()"); //$NON-NLS-1$
return curr().generateToolCommandLineInfo(
sourceExtension,
flags,
outputFlag,
outputPrefix,
outputName,
inputResources,
inputLocation,
outputLocation);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getArtifactExtension()
*/
public String getArtifactExtension() {
String s = fCfgs[0].getArtifactExtension();
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getArtifactExtension()))
return EMPTY_STR;
return s;
}
public String[] getArtifactExtensions() {
String[] s = new String[fCfgs.length];
for (int i=0; i<fCfgs.length; i++)
s[i] = fCfgs[i].getArtifactExtension();
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getArtifactName()
*/
public String getArtifactName() {
String s = fCfgs[0].getArtifactName();
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getArtifactName()))
return EMPTY_STR;
return s;
}
public String[] getArtifactNames() {
String[] s = new String[fCfgs.length];
for (int i=0; i<fCfgs.length; i++)
s[i] = fCfgs[i].getArtifactName();
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildArguments()
*/
public String getBuildArguments() {
String s = fCfgs[0].getBuildArguments();
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getBuildArguments()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildArtefactType()
*/
public IBuildPropertyValue getBuildArtefactType() {
IBuildPropertyValue b = fCfgs[0].getBuildArtefactType();
if (b == null)
return null;
for (int i=1; i<fCfgs.length; i++)
if (! b.equals(fCfgs[i].getBuildArtefactType()))
return null;
return b;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildCommand()
*/
public String getBuildCommand() {
String s = fCfgs[0].getBuildCommand();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getBuildCommand()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildData()
*/
public CBuildData getBuildData() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getBuildData()"); //$NON-NLS-1$
return curr().getBuildData();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildMacroSupplier()
*/
public IConfigurationBuildMacroSupplier getBuildMacroSupplier() {
IConfigurationBuildMacroSupplier ms = fCfgs[0].getBuildMacroSupplier();
if (ms == null)
return null;
for (int i=1; i<fCfgs.length; i++)
if (! ms.equals(fCfgs[i].getBuildMacroSupplier()))
return null;
return ms;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuilder()
*/
public IBuilder getBuilder() {
IBuilder b = fCfgs[0].getBuilder();
if (b == null)
return null;
for (int i=1; i<fCfgs.length; i++)
if (! b.matches(fCfgs[i].getBuilder()))
return null;
return b;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getCleanCommand()
*/
public String getCleanCommand() {
String s = fCfgs[0].getCleanCommand();
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getCleanCommand()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getConfigurationData()
*/
public CConfigurationData getConfigurationData() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getConfigurationData()"); //$NON-NLS-1$
return curr().getConfigurationData();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getDescription()
*/
public String getDescription() {
String s = fCfgs[0].getDescription();
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getDescription()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getEditableBuilder()
*/
public IBuilder getEditableBuilder() {
return curr().getEditableBuilder();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getEnvironmentVariableSupplier()
*/
public IConfigurationEnvironmentVariableSupplier getEnvironmentVariableSupplier() {
IConfigurationEnvironmentVariableSupplier vs = fCfgs[0].getEnvironmentVariableSupplier();
if (vs == null)
return null;
for (int i=1; i<fCfgs.length; i++)
if (! vs.equals(fCfgs[i].getEnvironmentVariableSupplier()))
return null;
return vs;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getErrorParserIds()
*/
public String getErrorParserIds() {
String s = fCfgs[0].getErrorParserIds();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getErrorParserIds()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getErrorParserList()
*/
public String[] getErrorParserList() {
String[] s = fCfgs[0].getErrorParserList();
if (s == null || s.length == 0)
return EMPTY_STR_ARRAY;
for (int i=1; i<fCfgs.length; i++)
if (! Arrays.equals(s, fCfgs[i].getErrorParserList()))
return EMPTY_STR_ARRAY;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getFilteredTools()
*/
public ITool[] getFilteredTools() {
ITool[] ts = curr().getFilteredTools();
return ts;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getLibs(java.lang.String)
*/
public String[] getLibs(String extension) {
String[] s = fCfgs[0].getLibs(extension);
if (s == null || s.length == 0)
return EMPTY_STR_ARRAY;
for (int i=1; i<fCfgs.length; i++)
if (! Arrays.equals(s, fCfgs[i].getLibs(extension)))
return EMPTY_STR_ARRAY;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getManagedProject()
*/
public IManagedProject getManagedProject() {
IManagedProject s = fCfgs[0].getManagedProject();
if (s == null)
return null;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getManagedProject()))
return null;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOutputExtension(java.lang.String)
*/
public String getOutputExtension(String resourceExtension) {
String s = fCfgs[0].getOutputExtension(resourceExtension);
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getOutputExtension(resourceExtension)))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOutputFlag(java.lang.String)
*/
public String getOutputFlag(String outputExt) {
String s = fCfgs[0].getOutputFlag(outputExt);
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getOutputFlag(outputExt)))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOutputPrefix(java.lang.String)
*/
public String getOutputPrefix(String outputExtension) {
String s = fCfgs[0].getOutputPrefix(outputExtension);
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getOutputPrefix(outputExtension)))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOwner()
*/
public IResource getOwner() {
IResource s = fCfgs[0].getOwner();
if (s == null)
return null;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getOwner()))
return null;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getParent()
*/
public IConfiguration getParent() {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getParent()"); //$NON-NLS-1$
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPostannouncebuildStep()
*/
public String getPostannouncebuildStep() {
String s = fCfgs[0].getPostannouncebuildStep();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getPostannouncebuildStep()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPostbuildStep()
*/
public String getPostbuildStep() {
String s = fCfgs[0].getPostbuildStep();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getPostbuildStep()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPreannouncebuildStep()
*/
public String getPreannouncebuildStep() {
String s = fCfgs[0].getPreannouncebuildStep();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getPreannouncebuildStep()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPrebuildStep()
*/
public String getPrebuildStep() {
String s = fCfgs[0].getPrebuildStep();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getPrebuildStep()))
return EMPTY_STR;
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getProjectType()
*/
public IProjectType getProjectType() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getProjectType()"); //$NON-NLS-1$
return curr().getProjectType();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceConfiguration(java.lang.String)
*/
public IResourceConfiguration getResourceConfiguration(String path) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getResourceConfiguration()"); //$NON-NLS-1$
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceConfigurations()
*/
public IResourceConfiguration[] getResourceConfigurations() {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getResourceConfigurations()"); //$NON-NLS-1$
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceInfo(org.eclipse.core.runtime.IPath, boolean)
*/
public IResourceInfo getResourceInfo(IPath path, boolean exactPath) {
IResourceInfo ris[] = new IResourceInfo[fCfgs.length];
boolean isFolder = true;
for (int i=0; i<fCfgs.length; i++) {
ris[i] = fCfgs[i].getResourceInfo(path, exactPath);
if (! (ris[i] instanceof IFolderInfo))
isFolder = false;
}
if (isFolder) {
IFolderInfo fis[] = new IFolderInfo[ris.length];
System.arraycopy(ris, 0, fis, 0, ris.length);
return new MultiFolderInfo(fis, this);
}
return new MultiFileInfo(ris, this);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceInfoById(java.lang.String)
*/
public IResourceInfo getResourceInfoById(String id) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getResourceInfoById()"); //$NON-NLS-1$
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceInfos()
*/
public IResourceInfo[] getResourceInfos() {
ArrayList<IResourceInfo> ri = new ArrayList<IResourceInfo>();
for (int i=0; i<fCfgs.length; i++) {
IResourceInfo[] ris = fCfgs[i].getResourceInfos();
ri.addAll(Arrays.asList(ris));
}
return ri.toArray(new IResourceInfo[ri.size()]);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getRootFolderInfo()
*/
public IFolderInfo getRootFolderInfo() {
IFolderInfo ris[] = new IFolderInfo[fCfgs.length];
for (int i=0; i<fCfgs.length; i++)
ris[i] = fCfgs[i].getRootFolderInfo();
return new MultiFolderInfo(ris, this);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getSourceEntries()
*/
public ICSourceEntry[] getSourceEntries() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getSourceEntries()"); //$NON-NLS-1$
return curr().getSourceEntries();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTargetTool()
*/
public ITool getTargetTool() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getTargetTool()"); //$NON-NLS-1$
return curr().getTargetTool();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTool(java.lang.String)
*/
public ITool getTool(String id) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getTool()"); //$NON-NLS-1$
return curr().getTool(id);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolChain()
*/
public IToolChain getToolChain() {
return curr().getToolChain();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolCommand(org.eclipse.cdt.managedbuilder.core.ITool)
*/
public String getToolCommand(ITool tool) {
return curr().getToolCommand(tool);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolFromInputExtension(java.lang.String)
*/
public ITool getToolFromInputExtension(String sourceExtension) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getToolFromInputExtension()"); //$NON-NLS-1$
return curr().getToolFromInputExtension(sourceExtension);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolFromOutputExtension(java.lang.String)
*/
public ITool getToolFromOutputExtension(String extension) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getToolFromOutputExtension()"); //$NON-NLS-1$
return curr().getToolFromOutputExtension(extension);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTools()
*/
public ITool[] getTools() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getTools()"); //$NON-NLS-1$
return curr().getTools();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolsBySuperClassId(java.lang.String)
*/
public ITool[] getToolsBySuperClassId(String id) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getToolsBySuperClassId()"); //$NON-NLS-1$
return curr().getToolsBySuperClassId(id);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getUserObjects(java.lang.String)
*/
public String[] getUserObjects(String extension) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getUserObjects()"); //$NON-NLS-1$
return curr().getUserObjects(extension);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#hasOverriddenBuildCommand()
*/
public boolean hasOverriddenBuildCommand() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].hasOverriddenBuildCommand())
return true;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isBuilderCompatible(org.eclipse.cdt.managedbuilder.core.IBuilder)
*/
public boolean isBuilderCompatible(IBuilder builder) {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isBuilderCompatible(builder))
return false;
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isDirty()
*/
public boolean isDirty() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].isDirty())
return true;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isExtensionElement()
*/
public boolean isExtensionElement() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.isExtensionElement()"); //$NON-NLS-1$
return curr().isExtensionElement();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isHeaderFile(java.lang.String)
*/
public boolean isHeaderFile(String ext) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.isHeaderFile()"); //$NON-NLS-1$
return curr().isHeaderFile(ext);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isManagedBuildOn()
*/
public boolean isManagedBuildOn() {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isManagedBuildOn())
return false;
return true;
}
public boolean[] isManagedBuildOnMulti() {
boolean[] b = new boolean[fCfgs.length];
for (int i=0; i<fCfgs.length; i++)
b[i] = fCfgs[i].isManagedBuildOn();
return b;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isSupported()
*/
public boolean isSupported() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].isSupported())
return true;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isSystemObject()
*/
public boolean isSystemObject() {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isSystemObject())
return false;
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isTemporary()
*/
public boolean isTemporary() {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isTemporary())
return false;
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#needsFullRebuild()
*/
public boolean needsFullRebuild() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].needsFullRebuild())
return true;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#needsRebuild()
*/
public boolean needsRebuild() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].needsRebuild())
return true;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#removeResourceConfiguration(org.eclipse.cdt.managedbuilder.core.IResourceInfo)
*/
public void removeResourceConfiguration(IResourceInfo resConfig) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].removeResourceConfiguration(resConfig);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#removeResourceInfo(org.eclipse.core.runtime.IPath)
*/
public void removeResourceInfo(IPath path) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].removeResourceInfo(path);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setArtifactExtension(java.lang.String)
*/
public void setArtifactExtension(String extension) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setArtifactExtension(extension);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setArtifactName(java.lang.String)
*/
public void setArtifactName(String name) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setArtifactName(name);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildArguments(java.lang.String)
*/
public void setBuildArguments(String makeArgs) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setBuildArguments(makeArgs);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildArtefactType(java.lang.String)
*/
public void setBuildArtefactType(String id) throws BuildException {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setBuildArtefactType(id);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildCommand(java.lang.String)
*/
public void setBuildCommand(String command) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setBuildCommand(command);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setCleanCommand(java.lang.String)
*/
public void setCleanCommand(String command) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setCleanCommand(command);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setDescription(java.lang.String)
*/
public void setDescription(String description) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setDescription(description);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setDirty(boolean)
*/
public void setDirty(boolean isDirty) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setDirty(isDirty);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setErrorParserIds(java.lang.String)
*/
public void setErrorParserIds(String ids) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setErrorParserIds(ids);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setErrorParserList(java.lang.String[])
*/
public void setErrorParserList(String[] ids) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setErrorParserList(ids);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setManagedBuildOn(boolean)
*/
public void setManagedBuildOn(boolean on) throws BuildException {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setManagedBuildOn(on);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setName(java.lang.String)
*/
public void setName(String name) {} // do nothing
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setOption(org.eclipse.cdt.managedbuilder.core.IHoldsOptions, org.eclipse.cdt.managedbuilder.core.IOption, boolean)
*/
public IOption setOption(IHoldsOptions parent, IOption option, boolean value)
throws BuildException {
IOption op = null;
for (int i=0; i<fCfgs.length; i++)
op = fCfgs[i].setOption(parent, option, value);
return op;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setOption(org.eclipse.cdt.managedbuilder.core.IHoldsOptions, org.eclipse.cdt.managedbuilder.core.IOption, java.lang.String)
*/
public IOption setOption(IHoldsOptions parent, IOption option, String value)
throws BuildException {
IOption op = null;
for (int i=0; i<fCfgs.length; i++)
op = fCfgs[i].setOption(parent, option, value);
return op;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setOption(org.eclipse.cdt.managedbuilder.core.IHoldsOptions, org.eclipse.cdt.managedbuilder.core.IOption, java.lang.String[])
*/
public IOption setOption(IHoldsOptions parent, IOption option,
String[] value) throws BuildException {
IOption op = null;
for (int i=0; i<fCfgs.length; i++)
op = fCfgs[i].setOption(parent, option, value);
return op;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPostannouncebuildStep(java.lang.String)
*/
public void setPostannouncebuildStep(String announceStep) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPostannouncebuildStep(announceStep);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPostbuildStep(java.lang.String)
*/
public void setPostbuildStep(String step) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPostbuildStep(step);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPreannouncebuildStep(java.lang.String)
*/
public void setPreannouncebuildStep(String announceStep) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPreannouncebuildStep(announceStep);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPrebuildStep(java.lang.String)
*/
public void setPrebuildStep(String step) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPrebuildStep(step);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setRebuildState(boolean)
*/
public void setRebuildState(boolean rebuild) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setRebuildState(rebuild);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setSourceEntries(org.eclipse.cdt.core.settings.model.ICSourceEntry[])
*/
public void setSourceEntries(ICSourceEntry[] entries) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setSourceEntries(entries);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setToolCommand(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String)
*/
public void setToolCommand(ITool tool, String command) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setToolCommand(tool, command);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#supportsBuild(boolean)
*/
public boolean supportsBuild(boolean managed) {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].supportsBuild(managed))
return false;
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getBaseId()
*/
public String getBaseId() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getBaseId()"); //$NON-NLS-1$
return curr().getBaseId();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getId()
*/
public String getId() {
return curr().getId() + "_etc"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getManagedBuildRevision()
*/
public String getManagedBuildRevision() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getMngBuildRevision()"); //$NON-NLS-1$
return curr().getManagedBuildRevision();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getName()
*/
public String getName() {
return "Multiple configurations"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getVersion()
*/
public Version getVersion() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getVersion()"); //$NON-NLS-1$
return curr().getVersion();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#setVersion(org.eclipse.core.runtime.PluginVersionIdentifier)
*/
public void setVersion(Version version) {} // do nothing
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObjectPropertiesContainer#getBuildProperties()
*/
public IBuildObjectProperties getBuildProperties() {
return curr().getBuildProperties();
}
public boolean getParallelDef() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
if (!((Configuration)fCfgs[i]).getParallelDef())
return false;
} else
return false;
return true; // all cfgs report true
}
public void setParallelDef(boolean def) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration)
((Configuration)fCfgs[i]).setParallelDef(def);
}
public int getParallelNumber() {
int res = -1;
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
int x = ((Configuration)fCfgs[i]).getParallelNumber();
if (res == -1)
res = x;
else if (res != x)
return 0; // values are different !
} else
return 0;
return (res == -1 ? 0: res); // all cfgs report true
}
public void setParallelNumber(int num) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration)
((Configuration)fCfgs[i]).setParallelNumber(num);
}
public boolean getInternalBuilderParallel() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
if (!((Configuration)fCfgs[i]).getInternalBuilderParallel())
return false;
} else
return false;
return true; // all cfgs report true
}
public boolean isInternalBuilderEnabled() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
if (!((Configuration)fCfgs[i]).isInternalBuilderEnabled())
return false;
} else
return false;
return true; // all cfgs report true
}
public boolean canEnableInternalBuilder(boolean v) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
if (!((Configuration)fCfgs[i]).canEnableInternalBuilder(v))
return false;
} else
return false;
return true; // all cfgs report true
}
public void enableInternalBuilder(boolean v) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration)
((Configuration)fCfgs[i]).enableInternalBuilder(v);
}
/**
* Returns "default" configuration.
*/
private IConfiguration curr() {
return fCfgs[curr];
}
public String getToolOutputPrefix() {
String s = fCfgs[0].calculateTargetTool().getOutputPrefix();
if (s == null || s.length() == 0)
return EMPTY_STR;
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].calculateTargetTool().getOutputPrefix()))
return EMPTY_STR;
return s;
}
public void setOutputPrefixForPrimaryOutput(String pref) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].calculateTargetTool().setOutputPrefixForPrimaryOutput(pref);
}
public IBuildProperty getBuildProperty(String id) {
IBuildProperty b = fCfgs[0].getBuildProperties().getProperty(id);
if (b == null )
return null;
for (int i=1; i<fCfgs.length; i++)
if (! b.getValue().getId().equals(
fCfgs[i].getBuildProperties().getProperty(id).getValue().getId())
)
return null;
return b;
}
// Performing conjunction of supported values for each cfg
public IBuildPropertyValue[] getSupportedValues(String id) {
IBuildPropertyValue[] a = fCfgs[0].getBuildProperties().getSupportedValues(id);
if (a == null || a.length == 0)
return new IBuildPropertyValue[0];
int cnt = a.length;
for (int i=1; i<fCfgs.length; i++) {
IBuildPropertyValue[] b = fCfgs[i].getBuildProperties().getSupportedValues(id);
for (int x=0; x<a.length; x++) {
if (a[x] == null)
continue;
boolean found = false;
for (int y=0; y<b.length; y++) {
if (a[x].equals(b[y])) {
found = true;
break;
}
}
if (!found) {
a[x] = null;
cnt--;
}
}
}
if (cnt > 0) {
IBuildPropertyValue[] b = new IBuildPropertyValue[cnt];
int pos = 0;
for (int x=0; x<a.length && pos < cnt; x++) {
if (a[x] != null)
b[pos++] = a[x];
}
return b;
} else {
return new IBuildPropertyValue[0];
}
}
public void setBuildProperty(String id, String val) {
try {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].getBuildProperties().setProperty(id, val);
} catch (CoreException e) {
ManagedBuilderCorePlugin.log(e);
}
}
public String getBuildAttribute(String name, String defValue) {
String res = defValue;
IBuilder b = fCfgs[0].getBuilder();
if (b != null)
res = b.getBuildAttribute(name, defValue);
for (int i=1; i<fCfgs.length; i++) {
b = fCfgs[i].getBuilder();
if (b != null)
if (! res.equals(b.getBuildAttribute(name, defValue)))
return defValue;
}
return res;
}
}