1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-19 15:05:36 +02:00

Removal of cdt.builder packages.

This commit is contained in:
Doug Schaefer 2003-07-21 18:03:28 +00:00
parent f25e4d8bd0
commit a3c2f8e423
67 changed files with 0 additions and 11340 deletions

View file

@ -1,197 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import java.io.File;
import java.io.IOException;
import org.eclipse.cdt.core.builder.model.ICTool;
import org.eclipse.cdt.core.builder.util.Filesystem;
import org.eclipse.cdt.internal.core.ProcessClosure;
import org.eclipse.cdt.utils.spawner.ProcessFactory;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
/**
* <p>
* Abstract base class to make the life of ICTool implementers
* somewhat simpler.
* <p>
* Provides default implementations of all methods, such that
* a basic tool can be defined simply by calling the appropriate
* constructor.
* <p>
* Examples:
* <p>
* <code>
* class CGenericTool extends ACTool {
* CGenericTool() {
* super("typeid", "toolid", "toolname");
* }
* }
*
* class CExplicitTool extends ACTool {
* CGenericTool(IPath pathToTool) {
* super("typeid", "toolid", pathToTool);
* }
* }
* </code>
*/
public abstract class ACTool implements ICTool {
private String fTypeId;
private String fToolId;
private IPath fToolPath;
/**
* Constructor.
* <br>
* Create a tool with the given type ID and unqiue ID by specifying
* the absolute path to the executable.
* <br>
* @param typeId tool type ID, corresponds to a CToolType extension ID.
* @param id unqiue identifier for this tool instance.
* @param path explicit path to the tool.
*/
public ACTool(String typeId, String id, IPath path) {
fTypeId = typeId;
fToolId = id;
fToolPath = path;
}
/**
* Constructor.
* <br>
* Create a tool with the given type ID and unqiue ID by specifying
* the name of an executable. The executable is located using the
* "which" utility.
* <br>
* @param typeId tool type ID, corresponds to a CToolType extension ID.
* @param id unqiue identifier for this tool instance.
* @param name name of the tool executable.
*/
public ACTool(String typeId, String id, String exeName) {
fTypeId = typeId;
fToolId = id;
fToolPath = locateExe(exeName);
}
/**
* Locate the given executable by running "which name".
*
* @param name of executable.
* @param path to executable.
* @return path specifying the location of the executable
* with the given name. If the executable could not be
* located, returns <b>null</b>.
*/
protected IPath locateExe(String name) {
IOResults ior = execHelper("which", new String[] { name }, null);
if (ior.stdout.size() > 0) {
return new Path(
Filesystem.getNativePath(ior.stdout.toString().trim()));
}
return null;
}
/**
* Explicity set the path to this tool's executable.
*
* @param path path to executable.
*/
protected void setPath(String path) {
fToolPath = new Path(path);
}
/**
* Helper method that runs this tool using the provided parameters.
*
* @param parameters parameters to pass to tool when executing.
* @param workingDir working directory for tool execution.
* @return object IOResults object containing the stdout and stderr
* streams that resulted from running the tool.
*/
protected IOResults execHelper(String[] parameters, String workingDir) {
return execHelper(
fToolPath.toString(),
parameters,
new File(workingDir));
}
/**
* Helper method that runs a specified tool using the provided parameters.
*
* @param exeName name of executable; may be a simple name or a full path.
* @param parameters parameters to pass to tool when executing.
* @param workingDir working directory for tool execution.
* @return object IOResults object containing the stdout and stderr
* streams that resulted from running the tool.
*/
protected IOResults execHelper(
String exeName,
String[] parameters,
File dir) {
IOResults ior = new IOResults();
String[] cmds = new String[parameters.length + 1];
cmds[0] = exeName;
for (int i = 1; i < cmds.length; i++) {
cmds[i] = parameters[i - 1];
}
try {
ProcessFactory pf = ProcessFactory.getFactory();
Process pid = pf.exec(cmds, null, dir);
ProcessClosure pc = new ProcessClosure(pid, ior.stdout, ior.stderr);
pc.runBlocking();
} catch (IOException e) {
e.printStackTrace();
}
return ior;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICTool#getTypeId()
*/
public String getTypeId() {
return fTypeId;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICTool#getId()
*/
public String getId() {
return fToolId;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICTool#getPath()
*/
public IPath getPath() {
return (IPath) fToolPath.clone();
}
/**
* @see org.eclipse.cdt.core.builder.model.ICTool#exists()
*/
public boolean exists() {
return fToolPath.toFile().exists();
}
/**
* @see org.eclipse.cdt.core.builder.model.ICTool#exec(String[], String)
*/
public IOResults exec(String[] parameters, String workingDir) {
return execHelper(parameters, workingDir);
}
}

View file

@ -1,132 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.core.builder.model.ICToolchain;
import org.eclipse.cdt.core.builder.model.ICToolchainProvider;
/**
* Abstract base class to make the life of ICToolchainProvider
* implementers somewhat simpler.
* <p>
* Provides default implementations of all methods, such that
* a basic toolchain can be defined simply by implementing the
* abstract doRefresh() method.
* <p>
* Examples:
* <p>
* <code>
* class CGenericToolchain extends ACToolchainProvider {
* void doRefresh() {
* ICToolchain tc = readToolchainInfoFromFile();
* addToolchain(tc.getId(), tc);
* }
* }
* </code>
*/
public abstract class ACToolchainProvider implements ICToolchainProvider {
/**
* Internal map of toolchain ID to toolchain instances.
*/
private Map fToolchainMap;
/**
* Constructor.
* <br>
* Creates a new toolchain map, then calls the abstract
* doRefresh() method to allow derived classes to populate
* the map.
*/
public ACToolchainProvider() {
fToolchainMap = new HashMap();
doRefresh();
}
/**
* Determines if a toolchain exists in the internal map of
* toolchain instances.
*
* @param id toolchain identifier.
* @return true if there is a toolchain instances that corresponds
* to the provided id.
*/
protected boolean toolchainExists(String id) {
return fToolchainMap.containsKey(id);
}
/**
* Add a toolchain to the internal map of toolchain instances.
*
* @param id toolchain identifier.
* @param tc toolchain instance.
*/
protected void addToolchain(String id, ICToolchain tc) {
fToolchainMap.put(id, tc);
}
/**
* Helper method used to retrieve a toolchain from the internal
* map of toolchain instances.
*
* @param id toolchain identifier.
* @return toolchain instance, or null if not found.
*/
protected ICToolchain getToolchainHelper(String id) {
ICToolchain tc = null;
Object obj = fToolchainMap.get(id);
if (obj instanceof ICToolchain) {
tc = (ICToolchain) obj;
}
return tc;
}
/**
* Remove a toolchain from the internal map of toolchain instances.
*
* @param id toolchain identifier.
* @return true if toolchain is removed.
*/
protected boolean removeToolchain(String id) {
boolean exists = toolchainExists(id);
if (exists) {
Object obj = fToolchainMap.remove(id);
obj = null;
}
return exists;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchainProvider#getToolchain(String)
*/
public ICToolchain getToolchain(String id) {
return getToolchainHelper(id);
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchainProvider#getToolchains()
*/
public ICToolchain[] getToolchains() {
Collection tcc = fToolchainMap.values();
return (ICToolchain[]) tcc.toArray(new ICToolchain[tcc.size()]);
}
/**
* Implemented by derived classes. Called whenever the toolchain list needs
* to be refreshed.
*/
abstract public void doRefresh();
}

View file

@ -1,247 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.builder.internal.CBuildConfigPoint;
import org.eclipse.cdt.core.builder.internal.CBuildVariablePoint;
import org.eclipse.cdt.core.builder.internal.CToolPoint;
import org.eclipse.cdt.core.builder.internal.CToolTypePoint;
import org.eclipse.cdt.core.builder.internal.CToolchainPoint;
import org.eclipse.cdt.core.builder.model.ICToolType;
import org.eclipse.cdt.core.builder.model.internal.CBuildConfigManager;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IPluginDescriptor;
/**
* Fragments aren't first class citizens in the Eclipse world.
* This class lets me write code in the experimental builder
* fragment as if there was a real plugin class that implemented
* some of these methods.
* <p>
* Also - I'm not sure that some of these methods don't belong
* elsewhere. Suggestions are welcome.
*/
public class BuilderPlugin {
// Pretend this is a real plugin.
static private BuilderPlugin thisPlugin;
// Pretend this is a real plugin.
static {
thisPlugin = new BuilderPlugin();
thisPlugin.loadToolTypes();
thisPlugin.loadToolProviders();
thisPlugin.loadToolchainProviders();
thisPlugin.loadConfigProviders();
thisPlugin.loadBuildVarProviders();
thisPlugin.dump();
}
// Pretend this is a real plugin.
private BuilderPlugin() {
fBuildConfigManager = new CBuildConfigManager();
}
// Pretend this is a real plugin.
private void dump() {
for (Iterator iter = fToolTypes.entrySet().iterator();
iter.hasNext();
) {
ICToolType element =
(ICToolType) ((Map.Entry) iter.next()).getValue();
System.err.println(
"Tool type ("
+ element.getName()
+ ", "
+ element.getId()
+ ")");
}
for (Iterator iter = fToolProviders.entrySet().iterator();
iter.hasNext();
) {
ICToolPoint element =
(ICToolPoint) ((Map.Entry) iter.next()).getValue();
System.err.println(
"Tool ("
+ element.getName()
+ ", "
+ element.getId()
+ ", "
+ element.getProviderClassName()
+ ")");
}
for (Iterator iter = fToolchainProviders.entrySet().iterator();
iter.hasNext();
) {
ICToolchainPoint element =
(ICToolchainPoint) ((Map.Entry) iter.next()).getValue();
System.err.println(
"Toolchain ("
+ element.getId()
+ ", "
+ element.getProviderClassName()
+ ")");
}
for (Iterator iter = fBuildConfigProviders.entrySet().iterator();
iter.hasNext();
) {
ICBuildConfigPoint element =
(ICBuildConfigPoint) ((Map.Entry) iter.next()).getValue();
System.err.println(
"BuildConfig ("
+ element.getName()
+ ", "
+ element.getId()
+ ", "
+ element.getProviderClassName()
+ ")");
}
for (Iterator iter = fBuildVarProviders.entrySet().iterator();
iter.hasNext();
) {
ICBuildVariablePoint element =
(ICBuildVariablePoint) ((Map.Entry) iter.next()).getValue();
System.err.println(
"BuildVar ("
+ element.getId()
+ ", "
+ element.getProviderClassName()
+ ")");
}
}
// Pretend this is a real plugin.
static public BuilderPlugin getDefault() {
return thisPlugin;
}
// Pretend this is a real plugin.
public IPluginDescriptor getDescriptor() {
return CCorePlugin.getDefault().getDescriptor();
}
/*
* Data and methods to merge with CCorePlugin
*/
private CBuildConfigManager fBuildConfigManager;
private Map fToolTypes;
private Map fToolProviders;
private Map fToolchainProviders;
private Map fBuildConfigProviders;
private Map fBuildVarProviders;
public CBuildConfigManager getBuildConfigurationManager() {
return fBuildConfigManager;
}
public Map getToolTypes() {
return fToolTypes;
}
public Map getToolProviders() {
return fToolProviders;
}
public Map getToolchainProviders() {
return fToolchainProviders;
}
public Map getBuildConfigurationProviders() {
return fBuildConfigProviders;
}
public Map getBuildVariableProviders() {
return fBuildVarProviders;
}
private void loadToolTypes() {
IPluginDescriptor descriptor = getDefault().getDescriptor();
IExtensionPoint extensionPoint =
descriptor.getExtensionPoint("CToolType");
IExtension[] exts = extensionPoint.getExtensions();
IConfigurationElement[] infos =
extensionPoint.getConfigurationElements();
fToolTypes = new HashMap(infos.length);
for (int i = 0; i < infos.length; i++) {
IConfigurationElement configurationElement = infos[i];
CToolTypePoint provider = new CToolTypePoint(configurationElement);
fToolTypes.put(provider.getId(), provider);
}
}
private void loadToolProviders() {
IPluginDescriptor descriptor = getDefault().getDescriptor();
IExtensionPoint extensionPoint = descriptor.getExtensionPoint("CTool");
IConfigurationElement[] infos =
extensionPoint.getConfigurationElements();
fToolProviders = new HashMap(infos.length);
for (int i = 0; i < infos.length; i++) {
IConfigurationElement configurationElement = infos[i];
CToolPoint provider = new CToolPoint(configurationElement);
fToolProviders.put(provider.getId(), provider);
}
}
private void loadToolchainProviders() {
IPluginDescriptor descriptor = getDefault().getDescriptor();
IExtensionPoint extensionPoint =
descriptor.getExtensionPoint("CToolchain");
IConfigurationElement[] infos =
extensionPoint.getConfigurationElements();
fToolchainProviders = new HashMap(infos.length);
for (int i = 0; i < infos.length; i++) {
IConfigurationElement configurationElement = infos[i];
CToolchainPoint provider =
new CToolchainPoint(configurationElement);
fToolchainProviders.put(provider.getId(), provider);
}
}
private void loadConfigProviders() {
IPluginDescriptor descriptor = getDefault().getDescriptor();
IExtensionPoint extensionPoint =
descriptor.getExtensionPoint("CBuildConfig");
IConfigurationElement[] infos =
extensionPoint.getConfigurationElements();
fBuildConfigProviders = new HashMap(infos.length);
for (int i = 0; i < infos.length; i++) {
IConfigurationElement configurationElement = infos[i];
CBuildConfigPoint provider =
new CBuildConfigPoint(configurationElement);
fBuildConfigProviders.put(provider.getId(), provider);
}
}
private void loadBuildVarProviders() {
IPluginDescriptor descriptor = getDefault().getDescriptor();
IExtensionPoint extensionPoint =
descriptor.getExtensionPoint("CBuildVariable");
IConfigurationElement[] infos =
extensionPoint.getConfigurationElements();
fBuildVarProviders = new HashMap(infos.length);
for (int i = 0; i < infos.length; i++) {
IConfigurationElement configurationElement = infos[i];
CBuildVariablePoint provider =
new CBuildVariablePoint(configurationElement);
fBuildVarProviders.put(provider.getId(), provider);
}
}
}

View file

@ -1,59 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import org.eclipse.cdt.core.builder.model.ICBuildConfigProvider;
import org.eclipse.core.runtime.CoreException;
/**
* Interface representing an instance of
* a CBuildConfig extension point.
*/
public interface ICBuildConfigPoint {
/**
* Returns the unique id for the provider.
*
* @return unique id.
*/
public String getId();
/**
* Returns the name of the provider.
*
* @return provider name.
*/
public String getName();
/**
* Returns the natures supported by the provider.
*
* @return natures supported by the provider.
*/
public String[] getNatures();
/**
* Returns the name of the provider's
* implementing class.
*
* @return name of the provider's implementing class.
*/
public String getProviderClassName();
/**
* Returns an instance of the provider's
* implementing class.
*
* @return instance of ICBuildConfigProvider.
*/
public ICBuildConfigProvider getProvider() throws CoreException;
}

View file

@ -1,51 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import org.eclipse.cdt.core.builder.model.ICBuildVariableProvider;
import org.eclipse.core.runtime.CoreException;
/**
* Interface representing an instance of
* a CBuildVariable extension point.
*/
public interface ICBuildVariablePoint {
/**
* Returns the unique id for the provider.
*
* @return unique id.
*/
public String getId();
/**
* Returns the the natures supported by the provider.
*
* @return the natures supported by the provider.
*/
public String[] getNatures();
/**
* Returns the name of the provider's
* implementing class.
*
* @return name of the provider's implementing class.
*/
public String getProviderClassName();
/**
* Returns an instance of the provider's
* implementing class.
*
* @return instance of ICBuildVariableProvider.
*/
public ICBuildVariableProvider getProvider() throws CoreException;
}

View file

@ -1,59 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import org.eclipse.cdt.core.builder.model.ICTool;
import org.eclipse.core.runtime.CoreException;
/**
* Interface representing an instance of
* a CTool extension point.
*/
public interface ICToolPoint {
/**
* Returns the unique id for the provider.
*
* @return unique id.
*/
public String getId();
/**
* Returns the name of the provider.
*
* @return provider name.
*/
public String getName();
/**
* Returns the string identifying the type of tool.
*
* @return type string.
*/
public String getType();
/**
* Returns the name of the provider's
* implementing class.
*
* @return name of the provider's implementing class.
*/
public String getProviderClassName();
/**
* Returns an instance of the provider's
* implementing class.
*
* @return instance of ICToolProvider.
*/
public ICTool getProvider() throws CoreException;
}

View file

@ -1,24 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import org.eclipse.cdt.core.builder.model.ICToolType;
/**
* Interface representing an instance of
* a CToolType extension point.
* <p>
* This interface exists solely to parallel the
* other extension point interfaces (ICToolPoint, etc.)
*/
public interface ICToolTypePoint extends ICToolType {
}

View file

@ -1,51 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder;
import org.eclipse.cdt.core.builder.model.ICToolchainProvider;
import org.eclipse.core.runtime.CoreException;
/**
* Interface representing an instance of
* a CToolchain extension point.
*/
public interface ICToolchainPoint {
/**
* Returns the unique id for the provider.
*
* @return unique id.
*/
public String getId();
/**
* Returns the natures supported by the provider.
*
* @return natures supported by the provider.
*/
public String[] getNatures();
/**
* Returns the name of the provider's
* implementing class.
*
* @return name of the provider's implementing class.
*/
public String getProviderClassName();
/**
* Returns an instance of the provider's
* implementing class.
*
* @return instance of ICToolchainProvider.
*/
public ICToolchainProvider getProvider() throws CoreException;
}

View file

@ -1,124 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.internal;
import java.util.StringTokenizer;
import java.util.Vector;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Abstract base class that represents information
* associated with a declared extension point.
* <p>
* Derived classes are expected to implement their
* own getter functions to return data from the
* associated IConfigurationElement in a reasonable
* format.
*/
public abstract class ACExtensionPoint {
public final static String FIELD_ID = "id"; //$NON-NLS-1$
public final static String FIELD_NAME = "name"; //$NON-NLS-1$
public final static String FIELD_TYPE = "name"; //$NON-NLS-1$
public final static String FIELD_NATURES = "natures"; //$NON-NLS-1$
public final static String FIELD_CLASS = "class"; //$NON-NLS-1$
/**
* Configuration element associated with this class.
* CONSIDER: is it expensive to hold on to this?
*/
private IConfigurationElement fElement;
/**
* Constructor.
*
* @param element configuration element for the build configuration provider.
*/
public ACExtensionPoint(IConfigurationElement element) {
fElement = element;
}
/**
* Returns the configuration element for the build configuration provider.
*
* @return configuration element
*/
protected IConfigurationElement getConfigurationElement() {
return fElement;
}
/**
* Breaks up a token-delimited string into individual tokens.
*
* @param data string to tokenize.
* @param sep delimiter character(s).
* @return array of tokens extracted from the string.
*/
protected String[] parseField(String data, String sep) {
Vector res = new Vector();
StringTokenizer st = new StringTokenizer(data, sep);
while (st.hasMoreElements()) {
res.add(st.nextElement());
}
return (String[]) res.toArray(new String[res.size()]);
}
/**
* Returns the value of the named field from the configuration element.
* If the named field is not present or has no value, returns an empty
* string.
*
* @param fieldName name of field.
* @return value of named field, or "".
*/
protected String getField(String fieldName) {
return getField(fieldName, ""); //$NON-NLS-1$
}
/**
* Returns the value of the named field from the configuration element.
* If the named field is not present or has no value, returns the
* specified default value.
*
* @param fieldName name of field.
* @param defaultValue default value if field not present.
* @return value of named field, or default.
*/
protected String getField(String fieldName, String defaultValue) {
String val = getConfigurationElement().getAttribute(fieldName);
return val != null ? val : defaultValue;
}
/**
* Returns an instance of of an implementing class. This
* method uses the value of the FIELD_CLASS attribute in
* the configuration element to create the class.
*
* @return instance of provider class.
*/
protected Object getClassInstance() throws CoreException {
return getClassInstance(FIELD_CLASS);
}
/**
* Returns an instance of of an implementing class.
*
* @param fieldName name of field.
* @return instance of provider class.
*/
protected Object getClassInstance(String fieldName) throws CoreException {
return getConfigurationElement().createExecutableExtension(fieldName);
}
}

View file

@ -1,70 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.internal;
import org.eclipse.cdt.core.builder.ICBuildConfigPoint;
import org.eclipse.cdt.core.builder.model.ICBuildConfigProvider;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Simple wrapper for the data associated with an instance of
* a CBuildConfig extension point.
*/
public class CBuildConfigPoint
extends ACExtensionPoint
implements ICBuildConfigPoint {
/**
* Constructor.
*
* @param element configuration element for the build configuration provider.
*/
public CBuildConfigPoint(IConfigurationElement element) {
super(element);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildConfigPoint#getId()
*/
public String getId() {
return getField(FIELD_ID);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildConfigPoint#getName()
*/
public String getName() {
return getField(FIELD_NAME);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildConfigPoint#getNatures()
*/
public String[] getNatures() {
return parseField(getField(FIELD_NATURES, "*"), ";"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildConfigPoint#getProviderClassName()
*/
public String getProviderClassName() {
return getField(FIELD_CLASS);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildConfigPoint#getProvider()
*/
public ICBuildConfigProvider getProvider() throws CoreException {
return (ICBuildConfigProvider) getClassInstance(FIELD_CLASS);
}
}

View file

@ -1,64 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.internal;
import org.eclipse.cdt.core.builder.ICBuildVariablePoint;
import org.eclipse.cdt.core.builder.model.ICBuildVariableProvider;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Simple wrapper for the data associated with an instance of
* a CBuildVariable extension point.
*/
public class CBuildVariablePoint
extends ACExtensionPoint
implements ICBuildVariablePoint {
/**
* Constructor.
*
* @param element configuration element for the build variable provider.
*/
public CBuildVariablePoint(IConfigurationElement element) {
super(element);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildVariablePoint#getId()
*/
public String getId() {
return getField(FIELD_ID);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildVariablePoint#getNatures()
*/
public String[] getNatures() {
return parseField(getField(FIELD_NATURES, "*"), ";"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildVariablePoint#getProviderClassName()
*/
public String getProviderClassName() {
return getField(FIELD_CLASS);
}
/**
* @see org.eclipse.cdt.core.builder.ICBuildVariablePoint#getProvider()
*/
public ICBuildVariableProvider getProvider() throws CoreException {
return (ICBuildVariableProvider) getClassInstance(FIELD_CLASS);
}
}

View file

@ -1,69 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.internal;
import org.eclipse.cdt.core.builder.ICToolPoint;
import org.eclipse.cdt.core.builder.model.ICTool;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Simple wrapper for the data associated with an instance of
* a CTool extension point.
*/
public class CToolPoint extends ACExtensionPoint implements ICToolPoint {
/**
* Constructor.
*
* @param element configuration element for the tool type.
*/
public CToolPoint(IConfigurationElement element) {
super(element);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolPoint#getId()
*/
public String getId() {
return getField(FIELD_ID);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolPoint#getName()
*/
public String getName() {
return getField(FIELD_NAME);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolPoint#getType()
*/
public String getType() {
return getField(FIELD_TYPE);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolPoint#getProviderClassName()
*/
public String getProviderClassName() {
return getField(FIELD_CLASS);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolPoint#getProvider()
*/
public ICTool getProvider() throws CoreException {
return (ICTool) getClassInstance(FIELD_CLASS);
}
}

View file

@ -1,48 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.internal;
import org.eclipse.cdt.core.builder.ICToolTypePoint;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Simple wrapper for the data associated with an instance of
* a CToolType extension point.
*/
public class CToolTypePoint
extends ACExtensionPoint
implements ICToolTypePoint {
/**
* Constructor.
*
* @param element configuration element for the tool type.
*/
public CToolTypePoint(IConfigurationElement element) {
super(element);
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolType#getId()
*/
public String getId() {
return getField(FIELD_ID);
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolType#getName()
*/
public String getName() {
return getField(FIELD_NAME);
}
}

View file

@ -1,64 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.internal;
import org.eclipse.cdt.core.builder.ICToolchainPoint;
import org.eclipse.cdt.core.builder.model.ICToolchainProvider;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Simple wrapper for the data associated with an instance of
* a CToolchain extension point.
*/
public class CToolchainPoint
extends ACExtensionPoint
implements ICToolchainPoint {
/**
* Constructor.
*
* @param element configuration element for the toolchain provider.
*/
public CToolchainPoint(IConfigurationElement element) {
super(element);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolchainPoint#getId()
*/
public String getId() {
return getField(FIELD_ID);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolchainPoint#getNatures()
*/
public String[] getNatures() {
return parseField(getField(FIELD_NATURES, "*"), ";"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* @see org.eclipse.cdt.core.builder.ICToolchainPoint#getProviderClassName()
*/
public String getProviderClassName() {
return getField(FIELD_CLASS);
}
/**
* @see org.eclipse.cdt.core.builder.ICToolchainPoint#getProvider()
*/
public ICToolchainProvider getProvider() throws CoreException {
return (ICToolchainProvider) getClassInstance(FIELD_CLASS);
}
}

View file

@ -1,138 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Default implementation of the ICBuildVariable interface.
* <p>
* This implementation is capable of handling both static
* resolution (where the variable part is fixed at generation
* time) and dynamic resolution (where the variable part
* may change over time, depending on context.)
* <p>
* @see ICBuildVariable
* @see ICBuildVariableProvider
* @see ICBuildVariableResolver
*/
public class CBuildVariable implements ICBuildVariable {
private String fFixed;
private String fVariable;
private ICBuildVariableResolver fResolver;
/**
* Default implementation of ICBuildVariableResolver that
* simply returns a previously provided string as the
* resolved value for the build variable.
*/
static private class StringResolver implements ICBuildVariableResolver {
private String fValue;
public StringResolver(String value) {
fValue = value;
}
public String resolveValue(ICBuildVariable var) {
return fValue + var.getFixed();
}
};
/**
* Create a new build variable with the given variable
* and fixed elements, and a static resolver that always
* returns the same value for the variable portion of
* the variable.
*
* @param name variable portion of build variable.
* @param fixed fixed portion of build variable.
* @param resolved resolved variable value.
*/
public CBuildVariable(String name, String fixed, String resolved) {
this(name, fixed, new StringResolver(resolved));
}
/**
* Create a new build variable with the given fixed
* and variable values, and a dynamic resolver for
* the variable portion of the variable.
*
* @param name variable portion of build variable.
* @param fixed fixed portion of build variable.
* @param resolved resolved variable value.
*/
public CBuildVariable(String name, String fixed, ICBuildVariableResolver resolver) {
fVariable = name;
fFixed = fixed;
fResolver = resolver;
}
/**
* Create a new build variable with the given fixed
* and variable values, and a dynamic resolver for
* the variable portion of the variable.
*
* @param name variable portion of build variable.
* @param fixed fixed portion of build variable.
* @param resolved resolved variable value.
*/
public CBuildVariable(String name, ICBuildVariable base) {
fVariable = name;
fFixed = base.getFixed();
fResolver = base.getResolver();
}
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildVariable#getVariable()
*/
public String getVariable() {
return fVariable;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildVariable#getFixed()
*/
public String getFixed() {
return fFixed;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildVariable#getResolver()
*/
public ICBuildVariableResolver getResolver() {
return fResolver;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildVariable#getValue()
*/
public String getValue() {
return fResolver.resolveValue(this);
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
int result = 17;
result = (result * 37) + fVariable.hashCode();
result = (result * 37) + fFixed.hashCode();
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
return "[" + fVariable + "]" + fFixed;
}
}

View file

@ -1,50 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
import org.eclipse.core.resources.IFile;
/**
* A build command is generated by a tool or toolchain, and
* represents a command that must be executed in order to
* build a file.
*/
public interface ICBuildCmd {
/**
* Tool used to process the file.
*
* @return tool used to build this file.
*/
ICTool getTool();
/**
* File this build command applies to.
*
* @return file this build command applies to.
*/
IFile getFile();
/**
* Parameters that are to be passed to the tool
* when building the file.
*
* @return parameters used to build the file.
*/
String[] getParameters();
/**
* This is a convenience method that should
* simply call getTool().exec(getParameters(), workingDir);
*/
boolean exec(String workingDir);
}

View file

@ -1,37 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Consumer of build commands.
* <br>
* "Processing" a build command might mean different
* things for different types of processors (ex,
* an incremental build processor and a makefile
* generator.)
* <br>
* @see ICBuildCmd
*/
public interface ICBuildCmdProcessor {
/**
* Process the provided build commands. This
* might me executing the associated tool, recording
* the build command in a file, handing the command
* off to a remote processor for execution on another
* machine, etc.
*
* @param cmds build commands to process.
*/
void processCommands(ICBuildCmd[] cmds);
}

View file

@ -1,306 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Based on org.eclipse.debug.core.ILaunchConfiguration
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* A build configuration describes how to build a project. It
* is a collection of the various tool- and toolchain-specific
* settings used to process the files in a project and produce
* some end result.
* <p>
* A build configuration may be shared in a repository via
* standard VCM mechanisms.
* <p>
* A build configuration is a handle to its underlying storage.
* <p>
* A build configuration is modified by obtaining a working copy
* of a build configuration, modifying the working copy, and then
* saving the working copy.
* <p>
* This interface is not intended to be implemented by clients.
* <p>
* @see ICBuildConfigWorkingCopy
*/
public interface ICBuildConfig extends IAdaptable {
/*
* TBD: add convenience methods for accessing standard elements?
*
* String[] getIncludePaths();
* String[] getLibPaths();
* String[] getLibs();
* String[] getOptimizationFlags();
* String[] getDebugFlags();
* String[] getWarningFlags();
*/
/**
* The file extension for build configuration files
* (value <code>"config"</code>).
* <p>
* CONSIDER: perhaps better to have a ".cdtconfig" file containing
* all build configuratons for the project in one spot?
*/
public static final String BUILD_CONFIGURATION_FILE_EXTENSION = "build"; //$NON-NLS-1$
/**
* Configuration version. Text string.
*/
public final static String CONFIG_VERSION = "config.version";
/**
* Configuration name. Text string.
*/
public final static String CONFIG_NAME = "config.name";
/**
* Builds this configuration.
*
* @param monitor progress monitor, or <code>null</code>
*/
public void build(IProgressMonitor monitor) throws CoreException;
/**
* Returns the name of this build configuration.
*
* @return the name of this build configuration
*/
public String getName();
/**
* Returns the location of this build configuration as a
* path.
*
* @return the location of this build configuration as a
* path
*/
public IPath getLocation();
/**
* Returns whether this build configuration's underlying
* storage exists.
*
* @return whether this build configuration's underlying
* storage exists
*/
public boolean exists();
/**
* Returns the integer-valued attribute with the given name.
* Returns the given default value if the attribute is undefined.
*
* @param attributeName the name of the attribute
* @param defaultValue the value to use if no value is found
* @return the value or the default value if no value was found.
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while retrieving the attribute from
* underlying storage.</li>
* <li>An attribute with the given name exists, but does not
* have an integer value</li>
* </ul>
*/
public int getAttribute(String attributeName, int defaultValue)
throws CoreException;
/**
* Returns the string-valued attribute with the given name.
* Returns the given default value if the attribute is undefined.
*
* @param attributeName the name of the attribute
* @param defaultValue the value to use if no value is found
* @return the value or the default value if no value was found.
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while retrieving the attribute from
* underlying storage.</li>
* <li>An attribute with the given name exists, but does not
* have a String value</li>
* </ul>
*/
public String getAttribute(String attributeName, String defaultValue)
throws CoreException;
/**
* Returns the boolean-valued attribute with the given name.
* Returns the given default value if the attribute is undefined.
*
* @param attributeName the name of the attribute
* @param defaultValue the value to use if no value is found
* @return the value or the default value if no value was found.
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while retrieving the attribute from
* underlying storage.</li>
* <li>An attribute with the given name exists, but does not
* have a boolean value</li>
* </ul>
*/
public boolean getAttribute(String attributeName, boolean defaultValue)
throws CoreException;
/**
* Returns the <code>java.util.List</code>-valued attribute with the given name.
* Returns the given default value if the attribute is undefined.
*
* @param attributeName the name of the attribute
* @param defaultValue the value to use if no value is found
* @return the value or the default value if no value was found.
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while retrieving the attribute from
* underlying storage.</li>
* <li>An attribute with the given name exists, but does not
* have a List value</li>
* </ul>
*/
public List getAttribute(String attributeName, List defaultValue)
throws CoreException;
/**
* Returns the <code>java.util.Map</code>-valued attribute with the given name.
* Returns the given default value if the attribute is undefined.
*
* @param attributeName the name of the attribute
* @param defaultValue the value to use if no value is found
* @return the value or the default value if no value was found.
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while retrieving the attribute from
* underlying storage.</li>
* <li>An attribute with the given name exists, but does not
* have a Map value</li>
* </ul>
*/
public Map getAttribute(String attributeName, Map defaultValue)
throws CoreException;
/**
* Returns the file this build configuration is stored
* in, or <code>null</code> if this configuration is stored
* locally with the workspace.
*
* @return the file this build configuration is stored
* in, or <code>null</code> if this configuration is stored
* locally with the workspace
*/
public IFile getFile();
/**
* Returns the project this build configuration is stored
* in.
*
* @return the file this build configuration is stored in.
*/
public IProject getProject();
/**
* Returns whether this build configuration is stored
* locally with the workspace.
*
* @return whether this build configuration is stored
* locally with the workspace
*/
public boolean isLocal();
/**
* Returns a working copy of this build configuration.
* Changes to the working copy will be applied to this
* build configuration when saved. The working copy will
* refer to this build configuration as its original
* build configuration.
*
* @return a working copy of this build configuration
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while initializing the contents of the
* working copy from this configuration's underlying storage.</li>
* </ul>
* @see ICBuildConfigWorkingCopy#getOriginal()
*/
public ICBuildConfigWorkingCopy getWorkingCopy() throws CoreException;
/**
* Returns a copy of this build configuration, as a
* working copy, with the specified name. The new
* working copy does not refer back to this configuration
* as its original build configuration (the working copy
* will return <code>null</code> for <code>getOriginal()</code>).
* When the working copy is saved it will not effect this
* build configuration.
*
* @param name the name of the copy
* @return a copy of this build configuration
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while initializing the contents of the
* working copy from this configuration's underlying storage.</li>
* </ul>
* @see ICBuildConfigWorkingCopy#getOriginal()
*/
public ICBuildConfigWorkingCopy copy(String name) throws CoreException;
/**
* Returns whether this build configuration is a working
* copy.
*
* @return whether this build configuration is a working
* copy
*/
public boolean isWorkingCopy();
/**
* Deletes this build configuration. This configuration's underlying
* storage is deleted. Has no effect if this configuration
* does not exist.
*
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li>An exception occurs while deleting this configuration's
* underlying storage.</li>
* </ul>
*/
public void delete() throws CoreException;
/**
* Returns a memento for this build configuration, or <code>null</code>
* if unable to generate a memento for this configuration. A memento
* can be used to re-create a build configuration, via the
* build manager.
*
* @return a memento for this configuration
* @see ICBuildConfigManager#getConfiguration(IProject, String)
* @exception CoreException if an exception occurs generating this
* build configuration's memento
*/
public String getMemento() throws CoreException;
/**
* Returns whether the contents of this build configuration are
* equal to the contents of the given build configuration.
*
* @return whether the contents of this build configuration are equal to the contents
* of the specified build configuration.
*/
public boolean contentsEqual(ICBuildConfig configuration);
}

View file

@ -1,47 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Based on org.eclipse.debug.core.ILaunchConfigurationListener
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* A build configuration listener is notified of build
* configurations as they are added and removed from the
* build configuration manager.
* <p>
* Clients may implement this interface.
*/
public interface ICBuildConfigListener {
/**
* Notifies this listener that the specified
* configuration has been removed.
*
* @param configuration the removed configuration
*/
public void configurationRemoved(ICBuildConfig configuration);
/**
* Notifies this listener that the specified configuration
* has been added.
*
* @param configuration the newly added configuration
*/
public void configurationAdded(ICBuildConfig configuration);
/**
* Notifies this listener that the specified configuration
* has changed.
*
* @param configuration the changed configuration
*/
public void configurationChanged(ICBuildConfig configuration);
}

View file

@ -1,125 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Based on org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
/**
* The build configuration manager manages the set of registered build
* configurations. Clients interested in build configuration change
* notification may register with the build configuration manager.
* <p>
* Clients are not intended to implement this interface.
* </p>
* @see ICBuildConfigListener
*/
public interface ICBuildConfigManager {
/**
* Adds the given listener to the collection of registered
* configuration listeners. Has no effect if an identical
* listener is already registerd.
*
* @param listener the listener to register
*/
public void addListener(ICBuildConfigListener listener);
/**
* Removes the given listener from the collection of registered
* configuration listeners. Has no effect if an identical listener
* is not already registerd.
*
* @param listener the listener to deregister
*/
public void removeListener(ICBuildConfigListener listener);
/**
* Adds the specified configuration and notifies listeners. Has no
* effect if an identical configuration is already registered.
*
* @param configuration the configuration to add
*/
public void addConfiguration(ICBuildConfig configuration);
/**
* Removes the specified configuration and notifies listeners.
* Has no effect if an identical configuration is not already
* registered.
*
* @param configuration the configuration to remove
* @since 2.0
*/
public void removeConfiguration(ICBuildConfig configuration);
/**
* Returns all build configurations associated with a project.
* Returns an zero-length array if no configurations are associated
* with the project.
*
* @param project project to retrieve build configurations for.
* @return all build configurations of the specified type for the project.
* @exception CoreException if an error occurs while retreiving a build configuration
*/
public ICBuildConfig[] getConfigurations(IProject project) throws CoreException;
/**
* Returns a handle to the configuration contained in the specified
* file. The file is not verified to exist or contain a proper
* configuration.
*
* @param file configuration file
* @return a handle to the configuration contained in the specified file
*/
public ICBuildConfig getConfiguration(IFile file);
/**
* Returns a handle to the configuration specified by the given
* memento. The configuration may not exist.
*
* @return a handle to the configuration specified by the given memento
* @exception CoreException if the given memento is invalid or
* an exception occurs parsing the memento
*/
public ICBuildConfig getConfiguration(String memento) throws CoreException;
/**
* Returns a handle to a newly created build configuration.
*
* @param name Name of new configuration.
* @return a handle to a new configuration instance.
*/
public ICBuildConfigWorkingCopy getConfiguration(IProject project, String name);
/**
* Return <code>true</code> if there is a configuration with the specified name,
* <code>false</code> otherwise.
*
* @param name the name of the configuration whose existence is being checked
* @exception CoreException if unable to retrieve existing configuration names
*/
public boolean isExistingConfigurationName(IProject project, String name) throws CoreException;
/**
* Return a String that can be used as the name of a configuration. The name
* is guaranteed to be unique (no existing configurations will have this name).
* The name that is returned uses the <code>namePrefix</code> as a starting point.
* If there is no existing configuration with this name, then <code>namePrefix</code>
* is returned. Otherwise, the value returned consists of the specified prefix plus
* some suffix that guarantees uniqueness.
*
* @param namePrefix the String that the returned name must begin with
*/
public String generateUniqueConfigurationNameFrom(IProject project, String namePrefix);
}

View file

@ -1,34 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* ICBuildConfigProvider represents an instance of a class
* that initializes an empty build configuration with
* reasonable default values.
* <p>
* The intent is to decouple build configuration creation
* and initialization.
* <p>
* See also the <a href="../../../../../../CBuildConfig.html">CBuildConfig</a>
* extension point documentation.
*/
public interface ICBuildConfigProvider {
/**
* Set initial values in the provided build configuration
* working copy.
*
* @param config build configuration to initialize.
*/
public void setDefaults(ICBuildConfigWorkingCopy config);
}

View file

@ -1,142 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
/**
* An editable copy of a build configuration. Attributes of a
* build configuration are modified by modifying the attributes
* of a working copy, and then saving the working copy.
* <p>
* This interface is not intended to be implemented by clients.
* <p>
* @see ICBuildConfig
*/
public interface ICBuildConfigWorkingCopy extends ICBuildConfig, IAdaptable {
/**
* Returns whether this configuration has been modified
* since it was last saved or created.
*
* @return whether this configuration has been modified
* since it was last saved or created
*/
public boolean isDirty();
/**
* Saves this working copy to its underlying file and returns
* a handle to the resulting launch configuration.
* Has no effect if this configuration does not need saving.
* Creates the underlying file if not yet created.
*
* @exception CoreException if an exception occurs while
* writing this configuration to its underlying file.
*/
public ICBuildConfig doSave() throws CoreException;
/**
* Sets the integer-valued attribute with the given name.
*
* @param attributeName the name of the attribute
* @param value the value
*/
public void setAttribute(String attributeName, int value);
/**
* Sets the String-valued attribute with the given name.
* If the value is <code>null</code>, the attribute is removed from
* this launch configuration.
*
* @param attributeName the name of the attribute
* @param value the value, or <code>null</code> if the attribute is to be undefined
*/
public void setAttribute(String attributeName, String value);
/**
* Sets the <code>java.util.List</code>-valued attribute with the given name.
* The specified List <em>must</em> contain only String-valued entries.
* If the value is <code>null</code>, the attribute is removed from
* this launch configuration.
*
* @param attributeName the name of the attribute
* @param value the value, or <code>null</code> if the attribute is to be undefined
*/
public void setAttribute(String attributeName, List value);
/**
* Sets the <code>java.util.Map</code>-valued attribute with the given name.
* The specified Map <em>must</em> contain only String keys and String values.
* If the value is <code>null</code>, the attribute is removed from
* this launch configuration.
*
* @param attributeName the name of the attribute
* @param value the value, or <code>null</code> if the attribute is to be undefined
*/
public void setAttribute(String attributeName, Map value);
/**
* Sets the boolean-valued attribute with the given name.
*
* @param attributeName the name of the attribute
* @param value the value
*/
public void setAttribute(String attributeName, boolean value);
/**
* Returns the original launch configuration this working copy
* was created from, or <code>null</code> if this is a new
* working copy created from a launch configuration type.
*
* @return the original launch configuration, or <code>null</code>
*/
public ICBuildConfig getOriginal();
/**
* Renames this build configuration to the specified name.
* The new name cannot be <code>null</code>. Has no effect if the name
* is the same as the current name. If this working copy is based
* on an existing build configuration, this will cause
* the underlying build configuration file to be renamed when
* this working copy is saved.
*
* @param name the new name for this configuration
*/
public void rename(String name);
/**
* Sets the container this build configuration will be stored
* in when saved. When set to <code>null</code>, this configuration
* will be stored locally with the workspace. The specified
* container must exist, if specified.
* <p>
* If this configuration is changed from local to non-local,
* a file will be created in the specified container when
* saved. The local file associated with this configuration
* will be deleted.
* <p>
* If this configuration is changed from non-local to local,
* a file will be created locally when saved.
* The original file associated with this configuration in
* the workspace will be deleted.
* <p>
* @param container the container in which to store this
* build configuration, or <code>null</code> if this
* configuration is to be stored locally
*/
public void setContainer(IContainer container);
}

View file

@ -1,73 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Represents a named value that is used as a variable
* within the build process. Build variables represent
* a variable prefix coupled with an optional static suffix.
* Using Makefile syntax as an example, the following is
* an examples of build variables:
* <p>
* <code>
* $(CROSS_TOOLS)/include
* </code>
* <p>
* For this particular build variable:
* <ul>
* <li>Calling <code>getVariable()</code> would return "CROSS_TOOLS"</li>
* <li>Calling <code>getFixed()</code> would return "/include"</li>
* <li>Calling <code>getValue()</code> would return the current value
* of the variable.</li>
* </ul>
* <p>
* The intent is to introduce a mechanism similar to that
* used by the Eclipse IDE to handle ClassPath variables.
* <p>
* @see ICBuildVariableProvider
* @see ICBuildVariableResolver
* @see CBuildVariable
*/
public interface ICBuildVariable {
/**
* Get the text that makes up the variable portion
* of this build variable.
*
* @return variable portion of this build variable.
*/
String getVariable();
/**
* Get the text that makes up the fixed portion
* of this build variable.
*
* @return fixed portion of this build variable.
*/
String getFixed();
/**
* Get the current value of this build variable,
* replacing the variable portion with whatever
* value is appropriate for teh current circumstances.
*
* @return Value of this build variable.
*/
String getValue();
/**
* Get the resolver for this build variable,
*
* @return Resolver for this build variable.
*/
ICBuildVariableResolver getResolver();
}

View file

@ -1,54 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Class that makes build variables available to the
* build process.
* <p>
* Intended for use in situations where generic build
* variables (ex, system root, etc.) can be provided
* for particular project types, or generically.
* <p>
* If possible the build variable provider should create
* a build variable that does not need to refer back to
* the provider for resolution. The default CBuildVariable
* implementation provides support for this type of
* build variable.
* </p>
* If the build variable will need information from the
* provider in order to resolve it's value, then the
* build variables will need to keep a reference to it's
* provider (or some other class that can resolve the
* variable protion of the build variable.) The default
* CBuildVariable implementation supports this type
* of build variable as well, through use of the
* ICBuildVariableResolver interface.
* <p>
* See also the <a href="../../../../../../CBuildConfig.html">CBuildConfig</a>
* extension point documentation.
* <p>
* @see ICBuildVariable
* @see ICBuildVariableResolver
* @see CBuildVariable
*/
public interface ICBuildVariableProvider {
/**
* Get the list of build variables made available
* through this provider.
*
* @return build variables.
*/
ICBuildVariable[] getVariables();
}

View file

@ -1,37 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Interface representing a class that is capable of
* resolving the variable portion of build variables
* at run time.
* <p>
* See also the <a href="../../../../../../CBuildConfig.html">CBuildConfig</a>
* extension point documentation.
* <p>
* @see ICBuildVariable
* @see ICBuildVariableProvider
* @see CBuildVariable
*/
public interface ICBuildVariableResolver {
/**
* Given a build variable, determine what it's
* resolved value should be.
*
* @return resolved value, or <code>null</code>.
*/
public String resolveValue(ICBuildVariable var);
}

View file

@ -1,48 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Standard build configuration constants.
*/
public interface ICPosixBuildConstants {
public final static String CPP_INCLUDES = "posix.cpp.includes"; //$NON-NLS-1$
public final static String CPP_DEFINITIONS = "posix.cpp.definitions"; //$NON-NLS-1$
public final static String CC_ENABLE_PROFILE = "posix.cc.profile"; //$NON-NLS-1$
public final static String CC_ENABLE_DEBUG = "posix.cc.debug"; //$NON-NLS-1$
public final static String CC_ENABLE_OPTIMIZE = "posix.cc.optimize"; //$NON-NLS-1$
public final static String CC_OPTIMZE_LEVEL = "posix.cc.optimize.level"; //$NON-NLS-1$
public final static String CC_USER_ARGS = "posix.cc.user"; //$NON-NLS-1$
public final static String CC_OPTIMIZE_NONE = "none"; //$NON-NLS-1$
public final static String CC_OPTIMIZE_SOME = "some"; //$NON-NLS-1$
public final static String CC_OPTIMIZE_FULL = "full"; //$NON-NLS-1$
public final static String CC_WARN_ALL = "posix.cc.warn.all"; //$NON-NLS-1$
public final static String CC_WARN_ASERROR = "posix.cc.warn.aserror"; //$NON-NLS-1$
public final static String CC_WARN_FORMAT = "posix.cc.warn.format"; //$NON-NLS-1$
public final static String CC_WARN_POINTERAR = "posix.cc.warn.pointerar"; //$NON-NLS-1$
public final static String CC_WARN_SWITCH = "posix.cc.warn.switch"; //$NON-NLS-1$
public final static String CC_WARN_UNREACH = "posix.cc.warn.unreach"; //$NON-NLS-1$
public final static String CC_WARN_UNUSED = "posix.cc.warn.unused"; //$NON-NLS-1$
public final static String LD_OUTPUT = "posix.ld.output"; //$NON-NLS-1$
public final static String LD_USER_ARGS = "posix.ld.user"; //$NON-NLS-1$
public final static String LD_LINK_STATIC = "posix.ld.link.static"; //$NON-NLS-1$
public final static String LD_LINK_AS_PROGRAM = "posix.ld.link.as.program"; //$NON-NLS-1$
public final static String LD_LINK_AS_SHARED = "posix.ld.link.as.shared"; //$NON-NLS-1$
public final static String LD_LINK_AS_ARCHIVE = "posix.ld.link.as.archive"; //$NON-NLS-1$
public final static String LD_STRIP = "posix.ld.strip"; //$NON-NLS-1$
public final static String LD_LIBS = "posix.ld.libs"; //$NON-NLS-1$
public final static String LD_LIBPATHS = "posix.ld.libpaths"; //$NON-NLS-1$
}

View file

@ -1,96 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
import java.io.ByteArrayOutputStream;
import org.eclipse.cdt.core.IErrorParser;
import org.eclipse.core.runtime.IPath;
/**
* ICTool represents an instance of a tool.
* <p>
* Tools represent a particular executable (ex, "gcc", etc.)
* that can be run in order to produce some output. The
* exec() method provides a shorthand that allows a caller
* to execute the tool and gather the resultant output
* streams.
* <p>
* Toolchain providers use this interface to represent
* individual tools within a toolchain.
* <p>
* Stand-alone tool providers (flex, yacc, rpcgen, etc.) make
* use of this to define generic build tools that can be "mixed
* in" to any toolchain.
* <p>
* See also the <a href="../../../../../../CTool.html">CTool</a>
* extension point documentation.
*/
public interface ICTool {
/**
* Convenince class that just contains a reference to
* two byte array output streams named sterr and stdout.
*/
class IOResults {
public ByteArrayOutputStream stderr = new ByteArrayOutputStream();
public ByteArrayOutputStream stdout = new ByteArrayOutputStream();
}
/**
* Returns the type ID for this tool. This type ID corresponds
* to a CToolType extension ID
*
* @return the type ID for this tool.
*/
String getTypeId();
/**
* Returns a unique identifuer for this tool instance.
*
* @return the type ID for this tool.
*/
String getId();
/**
* Returns the explicit path to the executable associated
* with this tool instance..
*
* @return path to executable.
*/
IPath getPath();
/**
* Indicates whether or not the executable referenced by this
* tool instance actually exists.
*
* @return true if the associated tool executable exists.
*/
boolean exists();
/**
* Run the executable referenced by this tool, using the
* supplied parameters.
*
* @param parameters parameters to pass to tool when executing.
* @param workingDir working directory for tool execution.
*/
IOResults exec(String[] parameters, String workingDir);
/**
* Get an instance of an error parser that is capable
* of dealing with the tool's output.
*
* @return error parser for the tool.
*/
IErrorParser getErrorParser();
}

View file

@ -1,35 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Interface representing a particular tool classification
* (ex, GNU c compiler, etc.)
* <p>
* See also the <a href="../../../../../../CToolType.html">CToolType</a>
* extension point documentation.
*/
public interface ICToolType {
/**
* Returns the unique id for the tool type.
*
* @return unique id.
*/
public String getId();
/**
* Returns the name of the tool type.
*
* @return provider name.
*/
public String getName();
}

View file

@ -1,75 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
import org.eclipse.core.resources.IFile;
/**
* The ICToolchain interface represents a collection of
* associated tools. A typical toolchain might consist
* of a compiler, an assembler, a linker, etc.
* <p>
* Many ICToolchain operations happen in the context of
* a build configuration, and so take an ICBuildConfig
* parameter. The build configuration provides the
* toolchain with information about the parameters to
* use when generating build commands.
*/
public interface ICToolchain {
/**
* Get the build commands needed to build a file.
*
* @param file file that needs to be built.
* @param cfg build configuration context.
* @return build command(s) needed to build this file,
* or <b>null</b> the specified file cannot (or should
* not) be processed by this toolchain.
*/
ICBuildCmd[] getBuildCommands(IFile file, ICBuildConfig cfg);
/**
* Get the dependencies for a file.
*
* @param file file to compute dependencies for.
* @param cfg build configuration context.
* @return file(s) that the given file depends on,
* or <b>null</b> the specified file does not have
* any dependencies.
*/
IFile[] getDependencies(IFile file, ICBuildConfig cfg);
/**
* Get the output files generated by building a file.
*
* @param file file to compute outputs for.
* @param cfg build configuration context.
* @return file(s) that will be generated in the process
* of building the specified file.
*/
IFile[] getOutputs(IFile file, ICBuildConfig cfg);
/**
* Get the tools associated with this toolchain.
*
* @return tools associated with this toolchain
*/
ICTool[] getTools();
/**
* Indicate whether or not this toolchain is capable of and
* interested in handling the specified file.
* @param file file to examine.
* @return true if the toolchain can process the file.
*/
boolean canProcess(IFile file);
}

View file

@ -1,48 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model;
/**
* Interface representing a class that makes one or more
* toolchains (collections of related tools) available to
* the IDE.
* <br>
* Using a toolchain provider allows clients to implement
* toolchain location logic in whatever manner suits them
* best. For example, a toolchain provider may locate a
* toolchain by examining the local filesystem, reading
* a configuration file, providing UI elements to allow
* a user to specify particular executable to use as part
* of a specialize toolchain, etc.
* <p>
* See also the <a href="../../../../../../CToolchain.html">CToolchain</a>
* extension point documentation.
*/
public interface ICToolchainProvider {
/**
* Return the ICToolchain instances managed by this provider.
*
* @return toolchain instances managed by this provider.
*/
ICToolchain[] getToolchains();
/**
* Return an ICToolchain instance managed by this provider.
*
* @param id toolchain ID.
* @return toolchain instance, or <b>null</b> if the
* provider does not recognize the toolchain ID.
*/
ICToolchain getToolchain(String id);
}

View file

@ -1,391 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model.internal;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.xerces.dom.DocumentImpl;
import org.eclipse.cdt.core.builder.BuilderPlugin;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.core.DebugCoreMessages;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* @author sam.robb
*/
public class CBuildConfig extends PlatformObject implements ICBuildConfig {
/**
* Location this configuration is stored in. This
* is the key for a build configuration handle.
*/
private IPath fLocation;
/**
* Constructs a build configuration in the given location.
*
* @param location path to where this build configuration's
* underlying file is located
*/
protected CBuildConfig(IPath location) {
setLocation(location);
}
/**
* Constructs a launch configuration from the given
* memento.
*
* @param memento configuration memento
* @exception CoreException if the memento is invalid or
* an exception occurrs reading the memento
*/
protected CBuildConfig(String memento) throws CoreException {
Exception ex = null;
try {
Element root = null;
DocumentBuilder parser =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
StringReader reader = new StringReader(memento);
InputSource source = new InputSource(reader);
root = parser.parse(source).getDocumentElement();
String localString = root.getAttribute("local"); //$NON-NLS-1$
String path = root.getAttribute("path"); //$NON-NLS-1$
String message = null;
if (path == null) {
message = DebugCoreMessages.getString("LaunchConfiguration.Invalid_build_configuration_memento__missing_path_attribute_3"); //$NON-NLS-1$
} else if (localString == null) {
message = DebugCoreMessages.getString("LaunchConfiguration.Invalid_build_configuration_memento__missing_local_attribute_4"); //$NON-NLS-1$
}
if (message != null) {
IStatus s = newStatus(message, DebugException.INTERNAL_ERROR, null);
throw new CoreException(s);
}
IPath location = ResourcesPlugin.getWorkspace().getRoot().getLocation().append(path);
setLocation(location);
return;
} catch (ParserConfigurationException e) {
ex = e;
} catch (SAXException e) {
ex = e;
} catch (IOException e) {
ex = e;
}
IStatus s = newStatus(DebugCoreMessages.getString("LaunchConfiguration.Exception_occurred_parsing_memento_5"), DebugException.INTERNAL_ERROR, ex); //$NON-NLS-1$
throw new CoreException(s);
}
/**
* Creates and returns a new error status based on
* the given mesasge, code, and exception.
*
* @param message error message
* @param code error code
* @param e exception or <code>null</code>
* @return status
*/
protected IStatus newStatus(String message, int code, Throwable e) {
return new Status(IStatus.ERROR, DebugPlugin.getUniqueIdentifier(), code, message, e);
}
/**
* @see ICBuildConfig#build(IProgressMonitor)
*/
public void build(IProgressMonitor monitor) throws CoreException {
}
/**
* A configuration's name is that of the last segment
* in it's location (subtract the ".build" extension).
*
* @see ICBuildConfig#getName()
*/
public String getName() {
return getLastLocationSegment();
}
private String getLastLocationSegment() {
String name = getLocation().lastSegment();
name = name.substring(0, name.length() - (BUILD_CONFIGURATION_FILE_EXTENSION.length() + 1));
return name;
}
/**
* @see ICBuildConfig#getLocation()
*/
public IPath getLocation() {
return fLocation;
}
/**
* Sets the location of this configuration's underlying
* file.
*
* @param location the location of this configuration's underlying
* file
*/
private void setLocation(IPath location) {
fLocation = location;
}
/**
* @see ICBuildConfig#exists()
*/
public boolean exists() {
IFile file = getFile();
if (file == null) {
return getLocation().toFile().exists();
} else {
return file.exists();
}
}
/**
* @see ICBuildConfig#getAttribute(String, int)
*/
public int getAttribute(String attributeName, int defaultValue) throws CoreException {
return getInfo().getIntAttribute(attributeName, defaultValue);
}
/**
* @see ICBuildConfig#getAttribute(String, String)
*/
public String getAttribute(String attributeName, String defaultValue) throws CoreException {
return getInfo().getStringAttribute(attributeName, defaultValue);
}
/**
* @see ICBuildConfig#getAttribute(String, boolean)
*/
public boolean getAttribute(String attributeName, boolean defaultValue) throws CoreException {
return getInfo().getBooleanAttribute(attributeName, defaultValue);
}
/**
* @see ICBuildConfig#getAttribute(String, List)
*/
public List getAttribute(String attributeName, List defaultValue) throws CoreException {
return getInfo().getListAttribute(attributeName, defaultValue);
}
/**
* @see ICBuildConfig#getAttribute(String, Map)
*/
public Map getAttribute(String attributeName, Map defaultValue) throws CoreException {
return getInfo().getMapAttribute(attributeName, defaultValue);
}
/**
* @see ICBuildConfig#isLocal()
*/
public boolean isLocal() {
return getFile() == null;
}
/**
* @see ICBuildConfig#getWorkingCopy()
*/
public ICBuildConfigWorkingCopy getWorkingCopy() throws CoreException {
return new CBuildConfigWorkingCopy(this);
}
/**
* @see ICBuildConfig#copy(String name)
*/
public ICBuildConfigWorkingCopy copy(String name) throws CoreException {
ICBuildConfigWorkingCopy copy = new CBuildConfigWorkingCopy(this, name);
return copy;
}
/**
* @see ICBuildConfig#isWorkingCopy()
*/
public boolean isWorkingCopy() {
return false;
}
/**
* @see ICBuildConfig#delete()
*/
public void delete() throws CoreException {
if (exists()) {
if (isLocal()) {
if (!(getLocation().toFile().delete())) {
throw new DebugException(
new Status(Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfiguration.Failed_to_delete_build_configuration._1"), null) //$NON-NLS-1$
);
}
// manually update the build manager cache since there
// will be no resource delta
getBuildConfigurationManager().configurationDeleted(this);
} else {
// delete the resource using IFile API such that
// resource deltas are fired.
IResource file = getFile();
if (file != null) {
file.delete(true, null);
} else {
// Error - the exists test passed, but could not locate file
}
}
}
}
/**
* Returns the info object containing the attributes
* of this configuration
*
* @return info for this handle
* @exception CoreException if unable to retrieve the
* info object
*/
protected CBuildConfigInfo getInfo() throws CoreException {
return getBuildConfigurationManager().getInfo(this);
}
/**
* Returns the build manager
*
* @return build manager
*/
protected CBuildConfigManager getBuildConfigurationManager() {
return BuilderPlugin.getDefault().getBuildConfigurationManager();
}
/**
* @see ICBuildConfig#getMemento()
*/
public String getMemento() throws CoreException {
IPath relativePath = getFile().getFullPath();
relativePath = relativePath.setDevice(null);
Document doc = new DocumentImpl();
Element node = doc.createElement("buildConfiguration"); //$NON-NLS-1$
doc.appendChild(node);
node.setAttribute("local", (new Boolean(isLocal())).toString()); //$NON-NLS-1$
node.setAttribute("path", relativePath.toString()); //$NON-NLS-1$
try {
return CBuildConfigManager.serializeDocument(doc);
} catch (IOException e) {
IStatus status = newStatus(DebugCoreMessages.getString("LaunchConfiguration.Exception_occurred_creating_build_configuration_memento_9"), DebugException.INTERNAL_ERROR, e); //$NON-NLS-1$
throw new CoreException(status);
}
}
/**
* @see ICBuildConfig#getFile()
*/
public IFile getFile() {
return ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(getLocation());
}
/**
* @see ICBuildConfig#getProject()
*/
public IProject getProject() {
return getFile().getProject();
}
/**
* @see ICBuildConfig#contentsEqual(ICBuildConfig)
*/
public boolean contentsEqual(ICBuildConfig object) {
try {
if (object instanceof CBuildConfig) {
CBuildConfig otherConfig = (CBuildConfig) object;
return getName().equals(otherConfig.getName())
&& getLocation().equals(otherConfig.getLocation())
&& getInfo().equals(otherConfig.getInfo());
}
return false;
} catch (CoreException ce) {
return false;
}
}
/**
* Returns whether this configuration is equal to the
* given configuration. Two configurations are equal if
* they are stored in the same location (and neither one
* is a working copy).
*
* @return whether this configuration is equal to the
* given configuration
* @see Object#equals(Object)
*/
public boolean equals(Object object) {
if (object instanceof ICBuildConfig) {
if (isWorkingCopy()) {
return this == object;
}
ICBuildConfig config = (ICBuildConfig) object;
if (!config.isWorkingCopy()) {
return config.getLocation().equals(getLocation());
}
}
return false;
}
/**
* @see Object#hashCode()
*/
public int hashCode() {
return getLocation().hashCode();
}
/**
* Returns the container this build configuration is
* stored in, or <code>null</code> if this build configuration
* is stored locally.
*
* @return the container this build configuration is
* stored in, or <code>null</code> if this build configuration
* is stored locally
*/
protected IContainer getContainer() {
IFile file = getFile();
if (file != null) {
return file.getParent();
}
return null;
}
}

View file

@ -1,474 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model.internal;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.xerces.dom.DocumentImpl;
import org.eclipse.cdt.core.builder.BuilderPlugin;
import org.eclipse.cdt.core.builder.model.ICBuildConfigManager;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.core.DebugCoreMessages;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* @author sam.robb
*
* The information associated with a build configuration
* handle.
*/
public class CBuildConfigInfo {
/**
* This configurations attribute table.
* Keys are <code>String</code>s and values
* are one of <code>String</code>, <code>Integer</code>,
* or <code>Boolean</code>.
*/
private HashMap fAttributes;
/**
* Constructs a new empty info
*/
protected CBuildConfigInfo() {
setAttributeTable(new HashMap(10));
}
/**
* Returns this configuration's attribute table.
*
* @return attribute table
*/
private HashMap getAttributeTable() {
return fAttributes;
}
/**
* Sets this configuration's attribute table.
*
* @param table attribute table
*/
private void setAttributeTable(HashMap table) {
fAttributes = table;
}
/**
* Returns the <code>String</code> attribute with the
* given key or the given default value if undefined.
*
* @return attribute specified by given key or the defaultValue
* if undefined
* @exception if the attribute with the given key exists
* but is not a <code>String</code>
*/
protected String getStringAttribute(String key, String defaultValue) throws CoreException {
Object attr = getAttributeTable().get(key);
if (attr != null) {
if (attr instanceof String) {
return (String)attr;
} else {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.lang.String._1"), new String[] {key}), null //$NON-NLS-1$
)
);
}
}
return defaultValue;
}
/**
* Returns the <code>int</code> attribute with the
* given key or the given default value if undefined.
*
* @return attribute specified by given key or the defaultValue
* if undefined
* @exception if the attribute with the given key exists
* but is not an <code>int</code>
*/
protected int getIntAttribute(String key, int defaultValue) throws CoreException {
Object attr = getAttributeTable().get(key);
if (attr != null) {
if (attr instanceof Integer) {
return ((Integer)attr).intValue();
} else {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_int._2"), new String[] {key}), null //$NON-NLS-1$
)
);
}
}
return defaultValue;
}
/**
* Returns the <code>boolean</code> attribute with the
* given key or the given default value if undefined.
*
* @return attribute specified by given key or the defaultValue
* if undefined
* @exception if the attribute with the given key exists
* but is not a <code>boolean</code>
*/
protected boolean getBooleanAttribute(String key, boolean defaultValue) throws CoreException {
Object attr = getAttributeTable().get(key);
if (attr != null) {
if (attr instanceof Boolean) {
return ((Boolean)attr).booleanValue();
} else {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_boolean._3"), new String[] {key}), null //$NON-NLS-1$
)
);
}
}
return defaultValue;
}
/**
* Returns the <code>java.util.List</code> attribute with the
* given key or the given default value if undefined.
*
* @return attribute specified by given key or the defaultValue
* if undefined
* @exception if the attribute with the given key exists
* but is not a <code>java.util.List</code>
*/
protected List getListAttribute(String key, List defaultValue) throws CoreException {
Object attr = getAttributeTable().get(key);
if (attr != null) {
if (attr instanceof List) {
return (List)attr;
} else {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.List._1"), new String[] {key}), null //$NON-NLS-1$
)
);
}
}
return defaultValue;
}
/**
* Returns the <code>java.util.Map</code> attribute with the
* given key or the given default value if undefined.
*
* @return attribute specified by given key or the defaultValue
* if undefined
* @exception if the attribute with the given key exists
* but is not a <code>java.util.Map</code>
*/
protected Map getMapAttribute(String key, Map defaultValue) throws CoreException {
Object attr = getAttributeTable().get(key);
if (attr != null) {
if (attr instanceof Map) {
return (Map)attr;
} else {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("LaunchConfigurationInfo.Attribute_{0}_is_not_of_type_java.util.Map._1"), new String[] {key}), null //$NON-NLS-1$
)
);
}
}
return defaultValue;
}
/**
* Returns a copy of this info object
*
* @return copy of this info
*/
protected CBuildConfigInfo getCopy() {
CBuildConfigInfo copy = new CBuildConfigInfo();
copy.setAttributeTable((HashMap)getAttributeTable().clone());
return copy;
}
/**
* Sets the given attribute to the given value. Only
* working copy's should use this API.
*
* @param key attribute key
* @param value attribuet value
*/
protected void setAttribute(String key, Object value) {
if (value == null) {
getAttributeTable().remove(key);
} else {
getAttributeTable().put(key, value);
}
}
/**
* Returns the content of this info as XML
*
* @return the content of this info as XML
* @exception IOException if an exception occurs creating the XML
*/
protected String getAsXML() throws IOException {
Document doc = new DocumentImpl();
Element configRootElement = doc.createElement("buildConfiguration"); //$NON-NLS-1$
doc.appendChild(configRootElement);
Iterator keys = getAttributeTable().keySet().iterator();
while (keys.hasNext()) {
String key = (String)keys.next();
Object value = getAttributeTable().get(key);
if (value == null) {
continue;
}
Element element = null;
String valueString = null;
if (value instanceof String) {
valueString = (String)value;
element = createKeyValueElement(doc, "stringAttribute", key, valueString); //$NON-NLS-1$
} else if (value instanceof Integer) {
valueString = ((Integer)value).toString();
element = createKeyValueElement(doc, "intAttribute", key, valueString); //$NON-NLS-1$
} else if (value instanceof Boolean) {
valueString = ((Boolean)value).toString();
element = createKeyValueElement(doc, "booleanAttribute", key, valueString); //$NON-NLS-1$
} else if (value instanceof List) {
element = createListElement(doc, "listAttribute", key, (List)value); //$NON-NLS-1$
} else if (value instanceof Map) {
element = createMapElement(doc, "mapAttribute", key, (Map)value); //$NON-NLS-1$
}
configRootElement.appendChild(element);
}
return CBuildConfigManager.serializeDocument(doc);
}
/**
* Helper method that creates a 'key value' element of the specified type with the
* specified attribute values.
*/
protected Element createKeyValueElement(Document doc, String elementType, String key, String value) {
Element element = doc.createElement(elementType);
element.setAttribute("key", key); //$NON-NLS-1$
element.setAttribute("value", value); //$NON-NLS-1$
return element;
}
protected Element createListElement(Document doc, String elementType, String listKey, List list) {
Element listElement = doc.createElement(elementType);
listElement.setAttribute("key", listKey); //$NON-NLS-1$
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String value = (String) iterator.next();
Element element = doc.createElement("listEntry"); //$NON-NLS-1$
element.setAttribute("value", value); //$NON-NLS-1$
listElement.appendChild(element);
}
return listElement;
}
protected Element createMapElement(Document doc, String elementType, String mapKey, Map map) {
Element mapElement = doc.createElement(elementType);
mapElement.setAttribute("key", mapKey); //$NON-NLS-1$
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String value = (String) map.get(key);
Element element = doc.createElement("mapEntry"); //$NON-NLS-1$
element.setAttribute("key", key); //$NON-NLS-1$
element.setAttribute("value", value); //$NON-NLS-1$
mapElement.appendChild(element);
}
return mapElement;
}
protected void initializeFromXML(Element root) throws CoreException {
if (!root.getNodeName().equalsIgnoreCase("buildConfiguration")) { //$NON-NLS-1$
throw getInvalidFormatDebugException();
}
NodeList list = root.getChildNodes();
int length = list.getLength();
for (int i = 0; i < length; ++i) {
Node node = list.item(i);
short type = node.getNodeType();
if (type == Node.ELEMENT_NODE) {
Element element = (Element) node;
String nodeName = element.getNodeName();
if (nodeName.equalsIgnoreCase("stringAttribute")) { //$NON-NLS-1$
setStringAttribute(element);
} else if (nodeName.equalsIgnoreCase("intAttribute")) { //$NON-NLS-1$
setIntegerAttribute(element);
} else if (nodeName.equalsIgnoreCase("booleanAttribute")) { //$NON-NLS-1$
setBooleanAttribute(element);
} else if (nodeName.equalsIgnoreCase("listAttribute")) { //$NON-NLS-1$
setListAttribute(element);
} else if (nodeName.equalsIgnoreCase("mapAttribute")) { //$NON-NLS-1$
setMapAttribute(element);
}
}
}
}
protected void setStringAttribute(Element element) throws CoreException {
String key = getKeyAttribute(element);
String value = getValueAttribute(element);
setAttribute(key, value);
}
protected void setIntegerAttribute(Element element) throws CoreException {
String key = getKeyAttribute(element);
String value = getValueAttribute(element);
setAttribute(key, new Integer(value));
}
protected void setBooleanAttribute(Element element) throws CoreException {
String key = getKeyAttribute(element);
String value = getValueAttribute(element);
setAttribute(key, new Boolean(value));
}
protected void setListAttribute(Element element) throws CoreException {
String listKey = element.getAttribute("key"); //$NON-NLS-1$
NodeList nodeList = element.getChildNodes();
int entryCount = nodeList.getLength();
List list = new ArrayList(entryCount);
for (int i = 0; i < entryCount; i++) {
Node node = nodeList.item(i);
short type = node.getNodeType();
if (type == Node.ELEMENT_NODE) {
Element subElement = (Element) node;
String nodeName = subElement.getNodeName();
if (!nodeName.equalsIgnoreCase("listEntry")) { //$NON-NLS-1$
throw getInvalidFormatDebugException();
}
String value = getValueAttribute(subElement);
list.add(value);
}
}
setAttribute(listKey, list);
}
protected void setMapAttribute(Element element) throws CoreException {
String mapKey = element.getAttribute("key"); //$NON-NLS-1$
NodeList nodeList = element.getChildNodes();
int entryCount = nodeList.getLength();
Map map = new HashMap(entryCount);
for (int i = 0; i < entryCount; i++) {
Node node = nodeList.item(i);
short type = node.getNodeType();
if (type == Node.ELEMENT_NODE) {
Element subElement = (Element) node;
String nodeName = subElement.getNodeName();
if (!nodeName.equalsIgnoreCase("mapEntry")) { //$NON-NLS-1$
throw getInvalidFormatDebugException();
}
String key = getKeyAttribute(subElement);
String value = getValueAttribute(subElement);
map.put(key, value);
}
}
setAttribute(mapKey, map);
}
protected String getKeyAttribute(Element element) throws CoreException {
String key = element.getAttribute("key"); //$NON-NLS-1$
if (key == null) {
throw getInvalidFormatDebugException();
}
return key;
}
protected String getValueAttribute(Element element) throws CoreException {
String value = element.getAttribute("value"); //$NON-NLS-1$
if (value == null) {
throw getInvalidFormatDebugException();
}
return value;
}
protected DebugException getInvalidFormatDebugException() {
return
new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, DebugCoreMessages.getString("LaunchConfigurationInfo.Invalid_launch_configuration_XML._10"), null //$NON-NLS-1$
)
);
}
/**
* Two <code>CBuildConfigInfo</code> objects are equal if and only if
* they have the same set of attributes with the same values.
*
* @see Object#equals(Object)
*/
public boolean equals(Object obj) {
// Make sure it's a LaunchConfigurationInfo object
if (!(obj instanceof CBuildConfigInfo)) {
return false;
}
CBuildConfigInfo other = (CBuildConfigInfo) obj;
// Make sure the attributes are the same
return compareAttributes(fAttributes, other.getAttributeTable());
}
/**
* Returns whether the two attribute maps are equal, consulting
* registered comparator extensions.
*
* @param map1 attribute map
* @param map2 attribute map
* @return whether the two attribute maps are equal
*/
protected boolean compareAttributes(HashMap map1, HashMap map2) {
ICBuildConfigManager manager = BuilderPlugin.getDefault().getBuildConfigurationManager();
if (map1.size() == map2.size()) {
Iterator attributes = map1.keySet().iterator();
while (attributes.hasNext()) {
String key = (String)attributes.next();
Object attr1 = map1.get(key);
Object attr2 = map2.get(key);
if (attr2 == null) {
return false;
}
if (!attr1.equals(attr2)) {
return false;
}
}
return true;
}
return false;
}
}

View file

@ -1,415 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model.internal;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.xml.serialize.Method;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.SerializerFactory;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigListener;
import org.eclipse.cdt.core.builder.model.ICBuildConfigManager;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.core.DebugCoreMessages;
import org.eclipse.debug.internal.core.ListenerList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* Manages build configurations.
*
* @see ICBuildConfigManager
*/
public class CBuildConfigManager implements ICBuildConfigManager {
/**
* Collection of listeners
*/
private ListenerList fListeners = new ListenerList(5);
/**
* Types of notifications
*/
public static final int ADDED = 0;
public static final int REMOVED = 1;
public static final int CHANGED = 2;
/**
* Serializes a XML document into a string - encoded in UTF8 format,
* with platform line separators.
*
* @param doc document to serialize
* @return the document as a string
*/
public static String serializeDocument(Document doc) throws IOException {
ByteArrayOutputStream s= new ByteArrayOutputStream();
OutputFormat format = new OutputFormat();
format.setIndenting(true);
format.setLineSeparator(System.getProperty("line.separator")); //$NON-NLS-1$
Serializer serializer =
SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(
new OutputStreamWriter(s, "UTF8"), //$NON-NLS-1$
format);
serializer.asDOMSerializer().serialize(doc);
return s.toString("UTF8"); //$NON-NLS-1$
}
/**
* @see ICBuildConfigManager#addListener(ICBuildConfigListener)
*/
public void addListener(ICBuildConfigListener listener) {
fListeners.add(listener);
}
/**
* @see ICBuildConfigManager#removeListener(ICBuildConfigListener)
*/
public void removeListener(ICBuildConfigListener listener) {
fListeners.remove(listener);
}
/**
* @see ICBuildConfigManager#addConfiguration(ICBuildConfig)
*/
public void addConfiguration(ICBuildConfig configuration) {
fireUpdate(configuration, ADDED);
}
/**
* @see ICBuildConfigManager#removeConfiguration(ICBuildConfig)
*/
public void removeConfiguration(ICBuildConfig configuration) {
fireUpdate(configuration, REMOVED);
}
/**
* @see ICBuildConfigManager#generateUniqueConfigurationNameFrom(IProject, String)
*/
public String generateUniqueConfigurationNameFrom(IProject project, String baseName) {
int index = 1;
int length= baseName.length();
int copyIndex = baseName.lastIndexOf(" ("); //$NON-NLS-1$
if (copyIndex > -1 && length > copyIndex + 2 && baseName.charAt(length - 1) == ')') {
String trailer = baseName.substring(copyIndex + 2, length -1);
if (isNumber(trailer)) {
try {
index = Integer.parseInt(trailer);
baseName = baseName.substring(0, copyIndex);
} catch (NumberFormatException nfe) {
}
}
}
String newName = baseName;
try {
StringBuffer buffer= null;
while (isExistingConfigurationName(project, newName)) {
buffer = new StringBuffer(baseName);
buffer.append(" ("); //$NON-NLS-1$
buffer.append(String.valueOf(index));
index++;
buffer.append(')');
newName = buffer.toString();
}
} catch (CoreException e) {
DebugPlugin.log(e);
}
return newName;
}
/**
* @see ICBuildConfigManager#getConfiguration(IFile)
*/
public ICBuildConfig getConfiguration(IFile file) {
return new CBuildConfig(file.getLocation());
}
/**
* @see ICBuildConfigManager#getConfiguration(String)
*/
public ICBuildConfig getConfiguration(String memento) throws CoreException {
return new CBuildConfig(memento);
}
public ICBuildConfigWorkingCopy getConfiguration(IProject project, String name) {
if ((name == null) || (name.length() < 1)) {
name = "New Configuration";
}
name = generateUniqueConfigurationNameFrom(project, name);
return new CBuildConfigWorkingCopy(project, name);
}
/**
* @see ICBuildConfigManager#getConfigurations(IProject)
*/
public ICBuildConfig[] getConfigurations(IProject project) throws CoreException {
List configs = findConfigurations(project, ICBuildConfig.BUILD_CONFIGURATION_FILE_EXTENSION);
return (ICBuildConfig[]) configs.toArray(new ICBuildConfig[configs.size()]);
}
/**
* @see ICBuildConfigManager#isExistingConfigurationName(IProject, String)
*/
public boolean isExistingConfigurationName(IProject project, String name) throws CoreException {
List configFiles;
int count = 0;
configFiles = findConfigurations(project, ICBuildConfig.BUILD_CONFIGURATION_FILE_EXTENSION);
count = configFiles.size();
if (count > 0) {
for (Iterator iter = configFiles.iterator(); iter.hasNext();) {
ICBuildConfig element = (ICBuildConfig) iter.next();
if (name.equals(element.getName())) {
return true;
}
}
}
return false;
}
/**
* Fires notification to the listeners that a configuration
* has been added, removed, updated, or deleted.
*/
protected void fireUpdate(ICBuildConfig configuration, int update) {
Object[] copiedListeners = fListeners.getListeners();
for (int i= 0; i < copiedListeners.length; i++) {
ICBuildConfigListener listener = (ICBuildConfigListener) copiedListeners[i];
switch (update) {
case ADDED:
listener.configurationAdded(configuration);
break;
case REMOVED:
listener.configurationRemoved(configuration);
break;
case CHANGED:
listener.configurationChanged(configuration);
break;
}
}
}
/**
* Notifies the manager that a configuration has been deleted.
*
* @param project the project containing the configuration
* @param config the configuration that was deleted
*/
protected void configurationDeleted(ICBuildConfig configuration) throws CoreException {
fireUpdate(configuration, REMOVED);
}
/**
* Notifies the manager that a configuration has been added.
*
* @param project the project containing the configuration
* @param config the configuration that was added
*/
protected void configurationAdded(ICBuildConfig configuration) throws CoreException {
if (isValid(configuration)) {
fireUpdate(configuration, ADDED);
} else {
fireUpdate(configuration, ADDED);
}
}
/**
* Notifies the manager that a configuration has been added.
*
* @param project the project containing the configuration
* @param config the launch configuration that was changed
*/
protected void configurationChanged(ICBuildConfig configuration) {
if (isValid(configuration)) {
fireUpdate(configuration, CHANGED);
} else {
fireUpdate(configuration, REMOVED);
}
}
/**
* Returns the info object for the specified launch configuration.
* If the configuration exists, but is not yet in the cache,
* an info object is built and added to the cache.
*
* @exception CoreException if an exception occurs building
* the info object
* @exception DebugException if the config does not exist
*/
protected CBuildConfigInfo getInfo(ICBuildConfig config) throws CoreException {
CBuildConfigInfo info = null;
if (config.exists()) {
InputStream stream = null;
try {
IFile file = ((CBuildConfig) config).getFile();
stream = file.getContents();
info = createInfoFromXML(stream);
} catch (FileNotFoundException e) {
throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.{0}_occurred_while_reading_launch_configuration_file._1"), new String[]{e.toString()}), e); //$NON-NLS-1$
} catch (SAXException e) {
throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.{0}_occurred_while_reading_launch_configuration_file._1"), new String[]{e.toString()}), e); //$NON-NLS-1$
} catch (ParserConfigurationException e) {
throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.{0}_occurred_while_reading_launch_configuration_file._1"), new String[]{e.toString()}), e); //$NON-NLS-1$
} catch (IOException e) {
throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.{0}_occurred_while_reading_launch_configuration_file._1"), new String[]{e.toString()}), e); //$NON-NLS-1$
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
throw createDebugException(MessageFormat.format(DebugCoreMessages.getString("LaunchManager.{0}_occurred_while_reading_launch_configuration_file._1"), new String[]{e.toString()}), e); //$NON-NLS-1$
}
}
}
} else {
throw createDebugException(DebugCoreMessages.getString("LaunchManager.Launch_configuration_does_not_exist._6"), null); //$NON-NLS-1$
}
return info;
}
/**
* Return a LaunchConfigurationInfo object initialized from XML contained in
* the specified stream. Simply pass out any exceptions encountered so that
* caller can deal with them. This is important since caller may need access to the
* actual exception.
*/
protected CBuildConfigInfo createInfoFromXML(InputStream stream)
throws CoreException, ParserConfigurationException, IOException, SAXException {
Element root = null;
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
root = parser.parse(new InputSource(stream)).getDocumentElement();
CBuildConfigInfo info = new CBuildConfigInfo();
info.initializeFromXML(root);
return info;
}
/**
* Return an instance of DebugException containing the specified message and Throwable.
*/
protected DebugException createDebugException(String message, Throwable throwable) {
return new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, message, throwable
)
);
}
/**
* Finds and returns all configurations in the given
* container (and subcontainers)
*
* @param container the container to search
* @exception CoreException an exception occurs traversing
* the container.
* @return all configurations in the given container
*/
protected List findConfigurations(IContainer container, String extension) throws CoreException {
List list = new ArrayList(10);
if (container instanceof IProject && !((IProject)container).isOpen()) {
return list;
}
searchForFiles(container, extension, list);
Iterator iter = list.iterator();
List configs = new ArrayList(list.size());
while (iter.hasNext()) {
IFile file = (IFile)iter.next();
configs.add(getConfiguration(file));
}
return configs;
}
/**
* Recursively searches the given container for files with the given
* extension.
*
* @param container the container to search in
* @param extension the file extension being searched for
* @param list the list to add the matching files to
* @exception CoreException if an exception occurs traversing
* the container
*/
protected void searchForFiles(IContainer container, String extension, List list) throws CoreException {
IResource[] members = container.members();
for (int i = 0; i < members.length; i++) {
if (members[i] instanceof IContainer) {
if (members[i] instanceof IProject && !((IProject)members[i]) .isOpen()) {
continue;
}
searchForFiles((IContainer)members[i], extension, list);
} else if (members[i] instanceof IFile) {
IFile file = (IFile)members[i];
if (extension.equalsIgnoreCase(file.getFileExtension())) {
list.add(file);
}
}
}
}
/**
* Returns whether the given String is composed solely of digits
*/
private boolean isNumber(String string) {
int numChars= string.length();
if (numChars == 0) {
return false;
}
for (int i= 0; i < numChars; i++) {
if (!Character.isDigit(string.charAt(i))) {
return false;
}
}
return true;
}
/**
* Returns whether the given configuration passes a basic
* integritiy test.
*
* @param config the configuration to verify
* @return whether the config meets basic integrity constraints
*/
protected boolean isValid(ICBuildConfig config) {
// TODO: Tests?
return (null != config);
}
}

View file

@ -1,490 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.model.internal;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.List;
import java.util.Map;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.core.DebugCoreMessages;
/**
* @author sam.robb
*/
public class CBuildConfigWorkingCopy extends CBuildConfig implements ICBuildConfigWorkingCopy {
/**
* Handle of original launch configuration this
* working copy is based on
*/
private CBuildConfig fOriginal;
/**
* Working copy of attributes.
*/
private CBuildConfigInfo fInfo;
/**
* Whether this working copy has been modified since
* it was created
*/
private boolean fDirty = false;
/**
* The name for this configuration.
*/
private String fName;
/**
* Indicates whether this working copy has been explicitly renamed.
*/
private boolean fRenamed = false;
/**
* Suppress change notification until created
*/
private boolean fSuppressChange = true;
/**
* The container this working copy will be
* stored in when saved.
*/
private IContainer fContainer;
/**
* Constructs a working copy of the specified launch
* configuration.
*
* @param original launch configuration to make
* a working copy of
* @exception CoreException if unable to initialize this
* working copy's attributes based on the original configuration
*/
protected CBuildConfigWorkingCopy(CBuildConfig original) throws CoreException {
super(original.getLocation());
setName(original.getName());
copyFrom(original);
setOriginal(original);
fSuppressChange = false;
}
/**
* Constructs a copy of the specified launch
* configuration, with the given (new) name.
*
* @param original launch configuration to make
* a working copy of
* @param name the new name for the copy of the launch
* configuration
* @exception CoreException if unable to initialize this
* working copy's attributes based on the original configuration
*/
protected CBuildConfigWorkingCopy(CBuildConfig original, String name) throws CoreException {
super(original.getLocation());
copyFrom(original);
setName(name);
fSuppressChange = false;
}
/**
* Constructs a new working copy to be created in the specified
* location.
*
* @param container the container that the configuration will be created in
* or <code>null</code> if to be local
* @param name the name of the new launch configuration
* @param type the type of this working copy
*/
protected CBuildConfigWorkingCopy(IContainer container, String name) {
super((IPath)null);
setName(name);
setInfo(new CBuildConfigInfo());
setContainer(container);
fSuppressChange = false;
}
/**
* @see ICBuildConfigWorkingCopy#isDirty()
*/
public boolean isDirty() {
return fDirty;
}
/**
* @see ICBuildConfigWorkingCopy#doSave()
*/
public ICBuildConfig doSave() throws CoreException {
if (isDirty()) {
IWorkspaceRunnable wr = new IWorkspaceRunnable() {
public void run(IProgressMonitor pm) throws CoreException {
// write the new file
CBuildConfigWorkingCopy.this.writeNewFile();
// delete the old file if this is not a new configuration
// or the file was renamed/moved
if (!CBuildConfigWorkingCopy.this.isNew()) {
if (CBuildConfigWorkingCopy.this.isMoved()) {
CBuildConfigWorkingCopy.this.getOriginal().delete();
}
}
resetDirty();
}
};
ResourcesPlugin.getWorkspace().run(wr, null);
}
return new CBuildConfig(getLocation());
}
/**
* Writes the new configuration information to a file.
*
* @exception CoreException if writing the file fails
*/
protected void writeNewFile() throws CoreException {
String xml = null;
try {
xml = getInfo().getAsXML();
} catch (IOException e) {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("CBuildConfigWorkingCopy.{0}_occurred_generating_launch_configuration_XML._1"), new String[]{e.toString()}), null //$NON-NLS-1$
)
);
}
if (isLocal()) {
// use java.io to update configuration file
try {
boolean added = false;
File file = getLocation().toFile();
File dir = getLocation().removeLastSegments(1).toFile();
dir.mkdirs();
if (!file.exists()) {
added = true;
file.createNewFile();
}
FileOutputStream stream = new FileOutputStream(file);
stream.write(xml.getBytes("UTF8")); //$NON-NLS-1$
stream.close();
if (added) {
getBuildConfigurationManager().configurationAdded(new CBuildConfig(getLocation()));
} else {
getBuildConfigurationManager().configurationChanged(new CBuildConfig(getLocation()));
}
} catch (IOException e) {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, MessageFormat.format(DebugCoreMessages.getString("CBuildConfigWorkingCopy.{0}_occurred_generating_launch_configuration_XML._1"), new String[]{e.toString()}), null //$NON-NLS-1$
)
);
}
} else {
// use resource API to update configuration file
IFile file = getFile();
IContainer dir = file.getParent();
if (!dir.exists()) {
throw new DebugException(
new Status(
Status.ERROR, DebugPlugin.getUniqueIdentifier(),
DebugException.REQUEST_FAILED, DebugCoreMessages.getString("CBuildConfigWorkingCopy.Specified_container_for_launch_configuration_does_not_exist_2"), null //$NON-NLS-1$
)
);
}
ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes());
if (!file.exists()) {
file.create(stream, false, null);
//getLaunchManager().CBuildConfigurationAdded(new CBuildConfig(getLocation()));
} else {
file.setContents(stream, false, false, null);
//getLaunchManager().CBuildConfigurationChanged(new CBuildConfig(getLocation()));
}
}
}
/**
* @see ICBuildConfigWorkingCopy#setAttribute(String, int)
*/
public void setAttribute(String attributeName, int value) {
getInfo().setAttribute(attributeName, new Integer(value));
setDirty();
}
/**
* @see ICBuildConfigWorkingCopy#setAttribute(String, String)
*/
public void setAttribute(String attributeName, String value) {
getInfo().setAttribute(attributeName, value);
setDirty();
}
/**
* @see ICBuildConfigWorkingCopy#setAttribute(String, boolean)
*/
public void setAttribute(String attributeName, boolean value) {
getInfo().setAttribute(attributeName, new Boolean(value));
setDirty();
}
/**
* @see ICBuildConfigWorkingCopy#setAttribute(String, List)
*/
public void setAttribute(String attributeName, List value) {
getInfo().setAttribute(attributeName, value);
setDirty();
}
/**
* @see ICBuildConfigWorkingCopy#setAttribute(String, Map)
*/
public void setAttribute(String attributeName, Map value) {
getInfo().setAttribute(attributeName, value);
setDirty();
}
/**
* @see ICBuildConfigWorkingCopy#getOriginal()
*/
public ICBuildConfig getOriginal() {
return fOriginal;
}
/**
* Sets the launch configuration this working copy
* is based on. Initializes the attributes of this
* working copy to the current values of the given
* configuration.
*
* @param originl the launch configuration this working
* copy is based on.
* @exception CoreException if unable to initialize this
* working copy based on the original's current attribute
* set
*/
private void copyFrom(CBuildConfig original) throws CoreException {
CBuildConfigInfo info = original.getInfo();
setInfo(info.getCopy());
setContainer(original.getContainer());
resetDirty();
}
/**
* Sets the launch configuration this working copy
* is based on.
*
* @param originl the launch configuration this working
* copy is based on.
*/
private void setOriginal(CBuildConfig original) {
fOriginal = original;
}
/**
* Sets the working copy info object for this working copy.
*
* @param info a copy of attributes from this working copy's
* original launch configuration
*/
protected void setInfo(CBuildConfigInfo info) {
fInfo = info;
}
/**
* @see ICBuildConfig#isWorkingCopy()
*/
public boolean isWorkingCopy() {
return true;
}
/**
* A working copy keeps a local info object that is not
* cached with the launch manager.
*
* @see CBuildConfig#getInfo()
*/
protected CBuildConfigInfo getInfo() {
return fInfo;
}
/**
* Sets this working copy's state to dirty.
* Notifies listeners that this working copy has
* changed.
*/
private void setDirty() {
fDirty = true;
if (!suppressChangeNotification()) {
getBuildConfigurationManager().configurationChanged(this);
}
}
/**
* Sets this working copy's state to not dirty.
*/
private void resetDirty() {
fDirty = false;
}
/**
* @see ICBuildConfigWorkingCopy#rename(String)
*/
public void rename(String name) {
if (!getName().equals(name)) {
setName(name);
fRenamed = isNew() || !(getOriginal().getName().equals(name));
}
}
/**
* Sets the new name for this configuration.
*
* @param name the new name for this configuration
*/
private void setName(String name) {
fName = name;
setDirty();
}
/**
* @see ICBuildConfig#getName()
*/
public String getName() {
return fName;
}
/**
* @see ICBuildConfig#isLocal()
*/
public boolean isLocal() {
return getContainer() == null;
}
/**
* Returns the location this launch configuration will reside at
* when saved.
*
* @see ICBuildConfig#getLocation()
*/
public IPath getLocation() {
if (isMoved()) {
IPath path = getContainer().getLocation();
path = path.append(getName() + "." + BUILD_CONFIGURATION_FILE_EXTENSION); //$NON-NLS-1$
return path;
} else {
return getOriginal().getLocation();
}
}
/**
* Returns whether this working copy is new, or is a
* working copy of another launch configuration.
*
* @return whether this working copy is new, or is a
* working copy of another launch configuration
*/
protected boolean isNew() {
return getOriginal() == null;
}
/**
* Returns whether this working copy is new or if its
* location has changed from that of its original.
*
* @return whether this working copy is new or if its
* location has changed from that of its original
*/
protected boolean isMoved() {
if (isNew() || fRenamed) {
return true;
}
IContainer newContainer = getContainer();
IContainer originalContainer = ((CBuildConfig)getOriginal()).getContainer();
if (newContainer == originalContainer) {
return false;
}
if (newContainer == null) {
return !originalContainer.equals(newContainer);
} else {
return !newContainer.equals(originalContainer);
}
}
/**
* A working copy cannot generate a memento.
*
* @see ICBuildConfig#getMemento()
*/
public String getMemento() {
return null;
}
/**
* Returns whether change notification should be
* suppressed
*/
protected boolean suppressChangeNotification() {
return fSuppressChange;
}
/**
* @see ICBuildConfigWorkingCopy#setContainer(IContainer)
*/
public void setContainer(IContainer container) {
if (container == fContainer) {
return;
}
if (container != null) {
if (container.equals(fContainer)) {
return;
}
} else {
if (fContainer.equals(container)) {
return;
}
}
fContainer = container;
setDirty();
}
/**
* Returns the container this working copy will be
* stored in when saved, or <code>null</code> if
* this working copy is local.
*
* @return the container this working copy will be
* stored in when saved, or <code>null</code> if
* this working copy is local
*/
protected IContainer getContainer() {
return fContainer;
}
}

View file

@ -1,125 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import org.eclipse.cdt.internal.core.ProcessClosure;
import org.eclipse.cdt.utils.spawner.ProcessFactory;
/**
* Performs file path translation on a Windows + Cygwin system.
* <p>
* This allows for translation between "native" Windows path
* names and Cygwin style path names.
*/
public class CCygwinFilesystem implements IFilesystem {
private static String CONVERT_CMD = "cygpath"; //$NON-NLS-1$
private static String CONVERT_TO_UNIX = "-u"; //$NON-NLS-1$
private static String CONVERT_TO_NATIVE = "-w"; //$NON-NLS-1$
private String fHome;
public CCygwinFilesystem() {
super();
fHome =
getNativePath(IFilesystem.FILESYSTEM_ROOT)
+ IFilesystem.FILESYSTEM_ROOT;
}
/**
* Helper function for converting native (Windows) paths to Unix paths,
* and vice versa.
*
* @param path the path to covert.
* @param cmdFlags how to convert the path. Supported values for are
* CONVERT_TO_UNIX and CONVERT_TO_NATIVE.
*/
private String convertPath(String path, String cmdFlags) {
ByteArrayOutputStream stderr = new ByteArrayOutputStream();
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
String[] cmds = { CONVERT_CMD, cmdFlags, path };
String newPath = path;
// In the event that cygpath is not found, or fails for some reason,
// this function will return a Cygwinized/Javaized version of the
// path (ex, "C:\foo\bar" will become "C:/foo/bar").
try {
ProcessFactory pf = ProcessFactory.getFactory();
Process pid = pf.exec(cmds);
ProcessClosure pc = new ProcessClosure(pid, stdout, stderr);
pc.runBlocking();
newPath = stdout.toString().trim();
} catch (IOException e) {
e.printStackTrace();
}
return newPath.replace(PATHSEP_WINDOWS, PATHSEP_CYGWIN);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getRoot()
*/
public String getRoot() {
return fHome;
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getNativePath(String)
*/
public String getNativePath(String path) {
return convertPath(path, CONVERT_TO_NATIVE);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getNativePath(File)
*/
public String getNativePath(File path) {
return getNativePath(path.toString());
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getUnixPath(String)
*/
public String getUnixPath(String path) {
path = convertPath(path, CONVERT_TO_UNIX);
// Make sure there are no spaces in the path and if there are, escape them.
String subString = new String(""); //$NON-NLS-1$
int len = 0;
int begin = 0;
while ((len = path.indexOf(" ")) >= 0) { //$NON-NLS-1$
subString += path.substring(begin, len);
subString += "\\ "; //$NON-NLS-1$
path = path.substring(len + 1);
}
subString += path;
return subString;
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getUnixPath(File)
*/
public String getUnixPath(File path) {
return getUnixPath(path.toString());
}
}

View file

@ -1,58 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.util;
import java.io.File;
/**
* Performs file path translation on a Unix system.
* <p>
* This is essentially uninteresting, as the whole purpose of the filesystem
* abstraction is to provide for some minimal support for Unix-y file paths
* under Windows + Cygwin.
*/
public class CUnixFilesystem implements IFilesystem {
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getRoot()
*/
public String getRoot() {
return IFilesystem.FILESYSTEM_ROOT;
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getNativePath(String)
*/
public String getNativePath(String path) {
return new String(path);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getNativePath(File)
*/
public String getNativePath(File path) {
return path.toString();
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getUnixPath(String)
*/
public String getUnixPath(String path) {
return new String(path);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getUnixPath(File)
*/
public String getUnixPath(File path) {
return path.toString();
}
}

View file

@ -1,50 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.util;
/**
* @author sam.robb
*
* Collection of generic utility functions.
*/
public class CUtil {
/**
* Given a name, this function will decide whether the
* name conforms to rules for naming valid C identifiers.
*/
public static boolean isValidCIdentifier(String name) {
// any sequence of letters, digits, or underscores,
// which begins with a letter or underscore
if ((name == null) || (name.length() < 1)) {
return false;
}
char c = name.charAt(0);
if ((c != '_') && !Character.isLetter(c)) {
return false;
}
for (int i = 1; i < name.length(); i++) {
c = name.charAt(i);
if ((c != '_') && !Character.isLetterOrDigit(c)) {
return false;
}
}
return true;
}
}

View file

@ -1,161 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.eclipse.core.internal.runtime.Assert;
/**
* Singleton that wraps the concept of the current OS's
* filesystem in a way that allows us to work properly
* under Cygwin.
*/
public class Filesystem {
private static IFilesystem fInstance;
/**
* Create the IFilesystem instance appropriate for the current OS.
*
* Right now, this is based off of the speratorChar reported by
* java.io.File; there is probably a better way to deal with this.
*/
static {
// init to null, update with class reference if we can
// otherwise leave null to signal that we don't have a valid file system.
if (File.separatorChar == IFilesystem.FILESYSTEM_ROOT.charAt(0)) {
fInstance = new CUnixFilesystem();
} else {
fInstance = new CCygwinFilesystem();
}
}
private static IFilesystem getInstance() {
if (fInstance == null) {
throw new FileSystemException ("Problems encountered while searching for your file system.");
}
return fInstance;
}
public static boolean isValid() {
return (fInstance != null);
}
public static class FileSystemException extends Error {
FileSystemException (String s) {
super(s);
}
}
/**
* Private constructor to prevent instatiation.
*
* All members of this class are static, and intended to be accessed
* via "Filesystem.[method_name]".
*/
private Filesystem() {
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getRoot()
*/
public static String getRoot() {
return getInstance().getRoot();
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getNativePath(String)
*/
public static String getNativePath(String path) {
return getInstance().getNativePath(path);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getNativePath(File)
*/
public static String getNativePath(File path) {
return getInstance().getNativePath(path);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getUnixPath(String)
*/
public static String getUnixPath(String path) {
return getInstance().getUnixPath(path);
}
/**
* @see org.eclipse.cdt.core.builder.util.IFilesystem#getUnixPath(File)
*/
public static String getUnixPath(File path) {
return getInstance().getUnixPath(path);
}
/**
* Copy a file from sourceFile to destFile. Performs a binary file copy,
* reading data from sourceFile as a byte stream, and writing it to destFile
* as a byte stream.
*
* @param sourceFile File to copy.
* @param destFile Where to copy the file to.
* @param replaceIfExists If true, if destFile exists, it is replaced.
* @return True if the file was copied; false otherwise.
*/
public static boolean copyFile(File sourceFile, File destFile, boolean replaceIfExists) {
Assert.isNotNull(sourceFile);
Assert.isNotNull(destFile);
if (!sourceFile.exists()) {
return false;
}
if (sourceFile.equals(destFile)) {
return false;
}
if (replaceIfExists && destFile.exists()) {
destFile.delete();
}
if (destFile.exists()) {
return false;
}
FileInputStream fis = null;
FileOutputStream fos = null;
byte[] buf = new byte[1024];
int i = 0;
try {
fis = new FileInputStream(sourceFile);
fos = new FileOutputStream(destFile);
while(-1 != (i = fis.read(buf))) {
fos.write(buf, 0, i);
}
fos.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
if (destFile.exists()) {
destFile.delete();
}
return false;
}
return true;
}
}

View file

@ -1,66 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.core.builder.util;
import java.io.File;
/**
* Abstracts information about a filesystem in order to allow
* translation between native/unix pathnames.
*/
public interface IFilesystem {
public static String FILESYSTEM_ROOT = "/"; //$NON-NLS-1$
public static char PATHSEP_WINDOWS = '\\'; //$NON-NLS-1$
public static char PATHSEP_CYGWIN = '\\'; //$NON-NLS-1$
/**
* Get the root directory for the filesystem.
*
* The root directory is returned in native filesystem format
* (ex, "C:/cygwin/" on Windows, "/" on Unix.) The returned
* string is guaranteed to have a trailing path seperator.
*/
public String getRoot();
/**
* Convert the provided path into a native path.
*
* @param path path to convert.
* @return native representation of path.
*/
public String getNativePath(String path);
/**
* Convert the provided path into a native path.
*
* @param path path to convert.
* @return native representation of path.
*/
public String getNativePath(File path);
/**
* Convert the provided path into a unix path.
*
* @param path path to convert.
* @return unix representation of path.
*/
public String getUnixPath(String path);
/**
* Convert the provided path into a unix path.
*
* @param path path to convert.
* @return unix representation of path.
*/
public String getUnixPath(File path);
}

View file

@ -1,37 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import org.eclipse.cdt.core.builder.model.ICBuildConfigProvider;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.builder.model.ICPosixBuildConstants;
/**
* Default implementation of a "Debug" build configuration
* provider for GNU toolchains.
*/
public class CConfigProviderDebug implements ICBuildConfigProvider {
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildConfigProvider#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy config) {
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_DEBUG, true);
config.setAttribute(ICPosixBuildConstants.CC_WARN_ALL, true);
config.setAttribute(ICPosixBuildConstants.LD_STRIP, false);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_PROFILE, false);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_OPTIMIZE, false);
config.setAttribute(ICPosixBuildConstants.CC_OPTIMZE_LEVEL,
ICPosixBuildConstants.CC_OPTIMIZE_NONE);
}
}

View file

@ -1,40 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import org.eclipse.cdt.core.builder.model.ICBuildConfigProvider;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.builder.model.ICPosixBuildConstants;
/**
* Default implementation of a "Profile" build configuration
* provider for GNU toolchains.
*/
public class CConfigProviderProfile implements ICBuildConfigProvider {
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildConfigProvider#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy config) {
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_DEBUG, false);
config.setAttribute(ICPosixBuildConstants.CC_WARN_ALL, true);
config.setAttribute(ICPosixBuildConstants.LD_STRIP, true);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_PROFILE, true);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_OPTIMIZE, true);
config.setAttribute(ICPosixBuildConstants.CC_OPTIMZE_LEVEL,
ICPosixBuildConstants.CC_OPTIMIZE_FULL);
}
}

View file

@ -1,39 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import org.eclipse.cdt.core.builder.model.ICBuildConfigProvider;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.builder.model.ICPosixBuildConstants;
/**
* Default implementation of a "Release" build configuration
* provider for GNU toolchains.
*/
public class CConfigProviderRelease implements ICBuildConfigProvider {
/**
* @see org.eclipse.cdt.core.builder.model.ICBuildConfigProvider#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy config) {
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_DEBUG, false);
config.setAttribute(ICPosixBuildConstants.CC_WARN_ALL, true);
config.setAttribute(ICPosixBuildConstants.LD_STRIP, true);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_PROFILE, false);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_OPTIMIZE, true);
config.setAttribute(ICPosixBuildConstants.CC_OPTIMZE_LEVEL,
ICPosixBuildConstants.CC_OPTIMIZE_FULL);
}
}

View file

@ -1,37 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import org.eclipse.cdt.core.IErrorParser;
import org.eclipse.cdt.core.builder.ACTool;
/**
* Represents a generic GNU tool.
*/
public class CGnuTool extends ACTool {
private final static String TOOL_TYPE_PREFIX = "org.eclipse.cdt.core.builder.";
private final static String TOOL_ID_PREFIX = "org.eclipse.cdt.gnu.tools.";
CGnuTool(String id, String exeName) {
super(TOOL_TYPE_PREFIX + id, TOOL_ID_PREFIX + id, exeName);
};
/**
* @see org.eclipse.cdt.core.builder.model.ICTool#getErrorParser()
*/
public IErrorParser getErrorParser() {
// TODO: implementation
return null;
}
}

View file

@ -1,142 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.core.builder.model.ICBuildCmd;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICTool;
import org.eclipse.cdt.core.builder.model.ICToolchain;
import org.eclipse.core.resources.IFile;
/**
* Standard GNU toolchain.
*/
public class CGnuToolchain implements ICToolchain {
private Map fToolMap;
public CGnuToolchain() {
fToolMap = new HashMap();
doRefresh();
}
protected void doRefresh() {
addTool(new CGnuTool("CC", "gcc"));
addTool(new CGnuTool("CXX", "c++"));
addTool(new CGnuTool("CPP", "gcc"));
addTool(new CGnuTool("AS", "as"));
addTool(new CGnuTool("LD", "ld"));
addTool(new CGnuTool("AR", "ar"));
addTool(new CGnuTool("DEBUGGER", "gdb"));
addTool(new CGnuTool("PROFILER", "gprof"));
addTool(new CGnuTool("STRIP", "strip"));
}
/**
* Determines if a tools exists in the internal map of
* tool instances.
*
* @param id tool identifier.
* @return true if there is a tool instances that corresponds
* to the provided id.
*/
protected boolean toolExists(String id) {
return fToolMap.containsKey(id);
}
/**
* Add a tool to the internal map of tool instances.
*
* @param id tool identifier.
* @param tc tool instance.
*/
protected void addTool(ICTool tool) {
fToolMap.put(tool.getId(), tool);
}
/**
* Helper method used to retrieve a tool from the internal
* map of tool instances.
*
* @param id tool identifier.
* @return tool instance, or null if not found.
*/
protected ICTool getToolHelper(String id) {
ICTool tool = null;
Object obj = fToolMap.get(id);
if (obj instanceof ICTool) {
tool = (ICTool) obj;
}
return tool;
}
/**
* Remove a toolchain from the internal map of toolchain instances.
*
* @param id toolchain identifier.
* @return true if toolchain is removed.
*/
protected boolean removeTool(String id) {
boolean exists = toolExists(id);
if (exists) {
Object obj = fToolMap.remove(id);
obj = null;
}
return exists;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchain#canProcess(IFile)
*/
public boolean canProcess(IFile file) {
// TODO: add logic
return true;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchain#getBuildCommands(IFile, ICBuildConfig)
*/
public ICBuildCmd[] getBuildCommands(IFile file, ICBuildConfig cfg) {
// TODO: add logic
return null;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchain#getDependencies(IFile, ICBuildConfig)
*/
public IFile[] getDependencies(IFile file, ICBuildConfig cfg) {
// TODO: add logic
// Either depend on gcc -MM, or CDOM
return null;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchain#getOutputs(IFile, ICBuildConfig)
*/
public IFile[] getOutputs(IFile file, ICBuildConfig cfg) {
// TODO: add logic
// Either depend on gcc -MM, or CDOM
return null;
}
/**
* @see org.eclipse.cdt.core.builder.model.ICToolchain#getTools()
*/
public ICTool[] getTools() {
Collection tcc = fToolMap.values();
return (ICTool[]) fToolMap.values().toArray(new ICTool[fToolMap.size()]);
}
}

View file

@ -1,38 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import org.eclipse.cdt.core.builder.ACToolchainProvider;
/**
* Standard GNU toolchain provider.
*/
public class CGnuToolchainProvider extends ACToolchainProvider {
/**
* Prefix used to construct toolchain identifiers for this
* provider.
*/
public final static String PROVIDER_ID = "org.eclipse.cdt.gnu.tools";
/**
* This toolchain provider.
*/
public final static String NATIVE_ID = PROVIDER_ID + ".native";
/**
* @see org.eclipse.cdt.core.builder.ACToolchainProvider#doRefresh()
*/
public void doRefresh() {
addToolchain(NATIVE_ID, new CGnuToolchain());
}
}

View file

@ -1,77 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPluginDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* The main plugin class to be used in the desktop.
*/
public class ToolsPlugin extends AbstractUIPlugin {
//The shared instance.
private static ToolsPlugin plugin;
//Resource bundle.
private ResourceBundle resourceBundle;
/**
* The constructor.
*/
public ToolsPlugin(IPluginDescriptor descriptor) {
super(descriptor);
plugin = this;
try {
resourceBundle= ResourceBundle.getBundle("org.eclipse.cdt.gnu.tools.ToolsPluginResources");
} catch (MissingResourceException x) {
resourceBundle = null;
}
}
/**
* Returns the shared instance.
*/
public static ToolsPlugin getDefault() {
return plugin;
}
/**
* Returns the workspace instance.
*/
public static IWorkspace getWorkspace() {
return ResourcesPlugin.getWorkspace();
}
/**
* Returns the string from the plugin's resource bundle,
* or 'key' if not found.
*/
public static String getResourceString(String key) {
ResourceBundle bundle= ToolsPlugin.getDefault().getResourceBundle();
try {
return bundle.getString(key);
} catch (MissingResourceException e) {
return key;
}
}
/**
* Returns the plugin's resource bundle,
*/
public ResourceBundle getResourceBundle() {
return resourceBundle;
}
}

View file

@ -1,34 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabgroup;
import org.eclipse.cdt.gnu.tools.tabs.CTabCompiler;
import org.eclipse.cdt.ui.builder.ACToolTabGroup;
import org.eclipse.cdt.ui.builder.ICBuildConfigDialog;
import org.eclipse.cdt.ui.builder.ICToolTab;
/**
* Tab group for gcc.
*/
public class CTabGroupCC extends ACToolTabGroup {
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#createTabs(ICBuildConfigDialog)
*/
public void createTabs(ICBuildConfigDialog dialog) {
ICToolTab[] tabs = new ICToolTab[] {
new CTabCompiler()
};
setTabs(tabs);
}
}

View file

@ -1,34 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabgroup;
import org.eclipse.cdt.gnu.tools.tabs.CTabPreprocessor;
import org.eclipse.cdt.ui.builder.ACToolTabGroup;
import org.eclipse.cdt.ui.builder.ICBuildConfigDialog;
import org.eclipse.cdt.ui.builder.ICToolTab;
/**
* Tab group for cpp.
*/
public class CTabGroupCPP extends ACToolTabGroup {
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#createTabs(ICBuildConfigDialog)
*/
public void createTabs(ICBuildConfigDialog dialog) {
ICToolTab[] tabs = new ICToolTab[] {
new CTabPreprocessor()
};
setTabs(tabs);
}
}

View file

@ -1,34 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabgroup;
import org.eclipse.cdt.gnu.tools.tabs.CTabCompiler;
import org.eclipse.cdt.ui.builder.ACToolTabGroup;
import org.eclipse.cdt.ui.builder.ICBuildConfigDialog;
import org.eclipse.cdt.ui.builder.ICToolTab;
/**
* Tab group for g++.
*/
public class CTabGroupCXX extends ACToolTabGroup {
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#createTabs(ICBuildConfigDialog)
*/
public void createTabs(ICBuildConfigDialog dialog) {
ICToolTab[] tabs = new ICToolTab[] {
new CTabCompiler()
};
setTabs(tabs);
}
}

View file

@ -1,34 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabgroup;
import org.eclipse.cdt.gnu.tools.tabs.CTabLinker;
import org.eclipse.cdt.ui.builder.ACToolTabGroup;
import org.eclipse.cdt.ui.builder.ICBuildConfigDialog;
import org.eclipse.cdt.ui.builder.ICToolTab;
/**
* Tab group for ld.
*/
public class CTabGroupLD extends ACToolTabGroup {
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#createTabs(ICBuildConfigDialog)
*/
public void createTabs(ICBuildConfigDialog dialog) {
ICToolTab[] tabs = new ICToolTab[] {
new CTabLinker()
};
setTabs(tabs);
}
}

View file

@ -1,275 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabs;
import java.util.HashMap;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.builder.model.ICPosixBuildConstants;
import org.eclipse.cdt.ui.builder.ACToolTab;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
/**
* The control for editing and viewing compiler options.
*/
public class CTabCompiler extends ACToolTab {
private Combo fOptimizationLevel;
private Button btnDebugging;
private Button btnProfiling;
private Text fUserOptions;
private Table fWarningsTable;
private TableItem fWarnAll;
private TableItem fWarnAsErrors;
private TableItem fWarnFormatStrings;
private TableItem fWarnPointerArith;
private TableItem fWarnSwitch;
private TableItem fWarnUnreachable;
private TableItem fWarnUnused;
private HashMap optLevelMap = new HashMap();
private final String[] OPT_LEVELS = {"None", "Medium", "High" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private final String[] OPT_ARGS = {"-O0", "-O1", "-O2" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
/**
* Constructs the object
*/
public CTabCompiler() {
// populate hash map
for (int nIndex = 0; nIndex < OPT_LEVELS.length; nIndex++)
{
optLevelMap.put(OPT_ARGS[nIndex], OPT_LEVELS[nIndex]);
}
}
/**
* Helper to add an item to the table of compiler settings
*
* @param parent the owning control
* @param txtLabel text for the table item
*/
private TableItem createTableItem(Table parent, String txtLabel)
{
TableItem retval = new TableItem(parent, SWT.NONE);
if (retval != null) {
retval.setText(txtLabel);
}
return retval;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#createControl(Composite)
*/
public void createControl(Composite parent) {
Composite ths = new Composite(parent, SWT.NONE);
// Panel
ths.setLayout(new GridLayout(2, true));
ths.setLayoutData(new GridData(GridData.FILL_BOTH));
// --------------------------------------------------
// Left column
// --------------------------------------------------
Composite cmpLeft = new Composite(ths, SWT.NONE);
cmpLeft.setLayout(new GridLayout());
cmpLeft.setLayoutData(new GridData(GridData.FILL_BOTH));
// row 1
new Label(cmpLeft, SWT.LEFT).setText(("Optimization_Level_7")); //$NON-NLS-1$
// row 2
fOptimizationLevel = new Combo(cmpLeft, SWT.RIGHT | SWT.TOP | SWT.READ_ONLY);
fOptimizationLevel.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
// row 3
btnDebugging = new Button(cmpLeft, SWT.CHECK | SWT.LEFT);
btnDebugging.setText(("Enable_Debugging_9")); //$NON-NLS-1$
// row 4
btnProfiling = new Button(cmpLeft, SWT.CHECK | SWT.LEFT);
btnProfiling.setText(("Enable_Profiling_10")); //$NON-NLS-1$
// row 5
new Label(cmpLeft, SWT.LEFT).setText(("Additional_Options_11")); //$NON-NLS-1$
// row 6
fUserOptions = new Text(cmpLeft, SWT.BORDER | SWT.LEFT);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_VERTICAL);
gridData.verticalAlignment = GridData.BEGINNING;
fUserOptions.setLayoutData(gridData);
// --------------------------------------------------
// Right column
// --------------------------------------------------
Composite cmpRight = new Composite(ths, SWT.NONE);
cmpRight.setLayout(new GridLayout());
cmpRight.setLayoutData(new GridData(GridData.FILL_BOTH));
// row 1
new Label(cmpRight, SWT.LEFT).setText(("Warnings__8")); //$NON-NLS-1$
// row 2
fWarningsTable = new Table(cmpRight, SWT.BORDER | SWT.MULTI | SWT.CHECK | SWT.HIDE_SELECTION);
fWarnAll = createTableItem(fWarningsTable, "All Warnings");
fWarnAsErrors = createTableItem(fWarningsTable, "Warnings as errors");
fWarnFormatStrings = createTableItem(fWarningsTable, "Bad format strings");
fWarnPointerArith = createTableItem(fWarningsTable, "pointer aritemetic");
fWarnSwitch = createTableItem(fWarningsTable, "No default switch statement");
fWarnUnreachable = createTableItem(fWarningsTable, "Unreachable code");
fWarnUnused = createTableItem(fWarningsTable, "Unused parameter");
GridData grdWarnings = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
GC gc = new GC(fWarningsTable);
gc.setFont(fWarningsTable.getFont());
grdWarnings.widthHint = org.eclipse.jface.dialogs.Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 35);
gc.dispose();
fWarningsTable.setLayoutData(grdWarnings);
// set the size of this control
ths.setSize(ths.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#initializeFrom(ICBuildConfig)
*/
public void initializeFrom(ICBuildConfig config) {
boolean debug = false;
boolean profile = false;
boolean optimize = true;
boolean[] warn = new boolean[7];
int optLevel = 0;
String userArgs = "";
// can't populate with null data pointer
if (config == null) {
return;
}
try {
profile = config.getAttribute(ICPosixBuildConstants.CC_ENABLE_PROFILE, false);
debug = config.getAttribute(ICPosixBuildConstants.CC_ENABLE_DEBUG, false);
optimize = config.getAttribute(ICPosixBuildConstants.CC_ENABLE_OPTIMIZE, false);
optLevel = config.getAttribute(ICPosixBuildConstants.CC_OPTIMZE_LEVEL, 0);
userArgs = config.getAttribute(ICPosixBuildConstants.CC_USER_ARGS, "");
warn[0] = config.getAttribute(ICPosixBuildConstants.CC_WARN_ALL, false);
warn[1] = config.getAttribute(ICPosixBuildConstants.CC_WARN_ASERROR, false);
warn[2] = config.getAttribute(ICPosixBuildConstants.CC_WARN_FORMAT, false);
warn[3] = config.getAttribute(ICPosixBuildConstants.CC_WARN_POINTERAR, false);
warn[4] = config.getAttribute(ICPosixBuildConstants.CC_WARN_SWITCH, false);
warn[5] = config.getAttribute(ICPosixBuildConstants.CC_WARN_UNREACH, false);
warn[6] = config.getAttribute(ICPosixBuildConstants.CC_WARN_UNUSED, false);
} catch (CoreException e) {
}
btnProfiling.setSelection(profile);
btnDebugging.setSelection(debug);
if (optimize) {
fOptimizationLevel.select(optLevel);
}
fUserOptions.setText(userArgs);
// check for all of the warnings (could have been better...)
fWarnAll.setChecked(warn[0]);
fWarnAsErrors.setChecked(warn[1]);
fWarnFormatStrings.setChecked(warn[2]);
fWarnPointerArith.setChecked(warn[3]);
fWarnSwitch.setChecked(warn[4]);
fWarnUnreachable.setChecked(warn[5]);
fWarnUnused.setChecked(warn[6]);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#performApply(ICBuildConfigWorkingCopy)
*/
public void performApply(ICBuildConfigWorkingCopy config) {
boolean debug = false;
boolean profile = false;
boolean optimize = true;
boolean[] warn = new boolean[7];
int optLevel = 0;
String userArgs = "";
// can't populate with null data pointer
if (config == null) {
return;
}
profile = btnProfiling.getSelection();
debug = btnDebugging.getSelection();
// optimize = ???;
optLevel = fOptimizationLevel.getSelectionIndex();
userArgs = fUserOptions.getText();
// check for all of the warnings (could have been better...)
warn[0] = fWarnAll.getChecked();
warn[1] = fWarnAsErrors.getChecked();
warn[2] = fWarnFormatStrings.getChecked();
warn[3] = fWarnPointerArith.getChecked();
warn[4] = fWarnSwitch.getChecked();
warn[5] = fWarnUnreachable.getChecked();
warn[6] = fWarnUnused.getChecked();
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_PROFILE, profile);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_DEBUG, debug);
config.setAttribute(ICPosixBuildConstants.CC_ENABLE_OPTIMIZE, optimize);
config.setAttribute(ICPosixBuildConstants.CC_OPTIMZE_LEVEL, optLevel);
config.setAttribute(ICPosixBuildConstants.CC_USER_ARGS, userArgs);
config.setAttribute(ICPosixBuildConstants.CC_WARN_ALL, warn[0]);
config.setAttribute(ICPosixBuildConstants.CC_WARN_ASERROR, warn[1]);
config.setAttribute(ICPosixBuildConstants.CC_WARN_FORMAT, warn[2]);
config.setAttribute(ICPosixBuildConstants.CC_WARN_POINTERAR, warn[3]);
config.setAttribute(ICPosixBuildConstants.CC_WARN_SWITCH, warn[4]);
config.setAttribute(ICPosixBuildConstants.CC_WARN_UNREACH, warn[5]);
config.setAttribute(ICPosixBuildConstants.CC_WARN_UNUSED, warn[6]);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy config) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#isValid(ICBuildConfigWorkingCopy)
*/
public boolean isValid(ICBuildConfigWorkingCopy config) {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#getName()
*/
public String getName() {
return "Compiler";
}
}

View file

@ -1,583 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabs;
import java.util.Iterator;
import java.util.Vector;
import org.eclipse.cdt.core.builder.model.CBuildVariable;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.builder.model.ICBuildVariable;
import org.eclipse.cdt.core.builder.model.ICPosixBuildConstants;
import org.eclipse.cdt.core.builder.model.ICToolchain;
import org.eclipse.cdt.ui.builder.ACToolTab;
import org.eclipse.cdt.ui.builder.internal.CBuildVariableDialog;
import org.eclipse.cdt.ui.builder.internal.CLibFileDialog;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.util.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;
/**
* The control for editing and viewing linker options.
*/
public class CTabLinker extends ACToolTab {
private Text fOutputFileName;
private Text fCmdLine;
private Button btnStatic;
private Button btnSharedObject;
private Button btnStripSybmols;
private List fLibPaths;
private List fLibs;
private List fLibFileList; // Used for validation.
private Button btnAddLib; // this set of buttons controls the lib of libraries
private Button btnRemoveLib;
private Button btnMoveUp;
private Button btnMoveDown;
private Button btnRemove; // set of buttons for the library paths
class addLibraryPath extends SelectionAdapter
{
public void widgetSelected(SelectionEvent sel)
{
CBuildVariableDialog selectFolder = new CBuildVariableDialog(getShell(), ("Select_Library_Path_1")); //$NON-NLS-1$
if (selectFolder.open() == selectFolder.OK) {
ICBuildVariable result = selectFolder.getSelection();
fLibPaths.add(result.toString());
}
}
};
class addLibraryFile extends SelectionAdapter
{
public void widgetSelected(SelectionEvent sel)
{
// create list of item to send to the library picker
ICBuildVariable[] libPaths = new CBuildVariable[fLibPaths.getItemCount()];
for (int nIndex = 0; nIndex < fLibPaths.getItemCount(); nIndex++) {
String item = fLibPaths.getItem(nIndex);
int nCloseBracePos = item.indexOf("]");//$NON-NLS-1$
String name = item.substring(1, nCloseBracePos);
String val = item.substring(nCloseBracePos + 2);
libPaths[nIndex] = new CBuildVariable(name, val, "");// fLibPaths.getItem(nIndex));
}
fLibFileList = fLibs;
CLibFileDialog selectFile = new CLibFileDialog(getShell(),
(ICToolchain) null /* getToolchain() */,
libPaths,
fLibFileList);
if (selectFile.open() == selectFile.OK) {
fLibs.add(selectFile.getSelection().getName());
}
// Update the move down button.
if (fLibs.getItemCount() > 1) {
btnMoveDown.setEnabled(true);
}
}
};
class delLibraryPath extends SelectionAdapter
{
public void widgetSelected(SelectionEvent sel)
{
int[] nSelItems = fLibPaths.getSelectionIndices();
if (nSelItems != null) {
fLibPaths.remove(nSelItems);
}
}
};
class delLibraryFile extends SelectionAdapter
{
public void widgetSelected(SelectionEvent sel)
{
int[] nSelItems = fLibs.getSelectionIndices();
if (nSelItems != null) {
fLibs.remove(nSelItems);
}
// Added to make sure that if nothing is selected the move up/down buttons are appropriately enabled or
// disabled.
nSelItems = fLibs.getSelectionIndices();
if ((nSelItems != null) && (nSelItems.length == 0)) {
btnMoveUp.setEnabled(false);
btnMoveDown.setEnabled(false);
}
}
};
class moveLibs extends SelectionAdapter
{
int m_nDelta;
public moveLibs(int delta) {
Assert.isTrue(delta == -1 || delta == 1, ("Delta_must_be_1_or_-1_2")); //$NON-NLS-1$
m_nDelta = delta;
}
private boolean CanMove(int selections, int delta ) {
boolean canMove = true;
// First of all check if we can even move the selected lib names up or down.
if ((selections == 0) && (delta == -1)) {
btnMoveUp.setEnabled(false);
if (fLibs.getItemCount() > 1) {
btnMoveDown.setEnabled(true);
}
canMove = false;
}
if ((selections == (fLibs.getItemCount() - 1)) && (delta == 1)) {
btnMoveDown.setEnabled(false);
if (fLibs.getItemCount() > 1) {
btnMoveUp.setEnabled(true);
}
canMove = false;
}
return canMove;
}
public void widgetSelected(SelectionEvent sel) {
int[] selections = fLibs.getSelectionIndices();
if ((selections != null) && (m_nDelta != 0)) {
int nStart = (m_nDelta < 0) ? 0 : selections.length - 1;
int nEnd = (m_nDelta < 0) ? selections.length : -1;
String strTemp;
boolean bCanMove = CanMove(selections[nStart], m_nDelta);
// this loop moves group of items based on the delta and moves them
for (int nIndex = nStart ; nIndex != nEnd && bCanMove; nIndex += (m_nDelta * -1)) {
// remove and re-add the list box
strTemp = fLibs.getItem(selections[nIndex]);
fLibs.remove(selections[nIndex]);
fLibs.add(strTemp, selections[nIndex] + m_nDelta);
// adjust the index in the selection list so we can re-highlight the block
selections[nIndex] = selections[nIndex] + m_nDelta;
bCanMove = CanMove(selections[nIndex], m_nDelta);
}
fLibs.select(selections);
}
}
};
// decl these after defining the vars
addLibraryPath m_addLibraryPath = new addLibraryPath();
delLibraryPath m_delLibraryPath = new delLibraryPath();
addLibraryFile m_addLibraryFile = new addLibraryFile();
delLibraryFile m_delLibraryFile = new delLibraryFile();
public CTabLinker() {
super();
}
class TextWidth {
private int width_ = 0;
public TextWidth(Composite composite, String[] labels) {
GC gc = new GC(composite);
gc.setFont(composite.getFont());
for (int i = 0; i < labels.length; i++) {
int newWidth = gc.textExtent(labels[i]).x + 10; //$NON-NLS-1$
if (newWidth > width_) {
width_ = newWidth;
}
}
}
public int getWidth() {
return width_;
}
}
/**
* Helper function for creating a grid layout to spec.
*
* @param columns Number of columns in layout.
* @param equalWidth True if columns are of equal width.
* @param marginHeight Margin height for layout.
* @param marginWidth Margin width for layout.
*
* @return Newly created GridLayout with the specified properties.
*/
private GridLayout createGridLayout(int columns, boolean equalWidth, int marginHeight, int marginWidth) {
GridLayout layout = new GridLayout(columns, equalWidth);
layout.marginHeight = marginHeight;
layout.marginWidth = marginWidth;
return layout;
}
/**
* helper routine for putting the values in the list box
*
* @param lstTarget the control to fill with values
* @param data linker properties data
* @param data parameter name to fetch from data
*
*/
private void setList(org.eclipse.swt.widgets.List target, java.util.List list)
{
target.removeAll();
if (null != list) {
for (Iterator iter = list.iterator(); iter.hasNext();) {
target.add((String) iter.next());
}
}
}
/**
* helper routine for getting data from a list control
* @param control contol to get data from
*/
private java.util.List getList(List control)
{
String[] items = fLibs.getItems();
Vector vec = new Vector();
for (int i = 0; i < items.length; i++) {
vec.add(items[i]);
}
return vec;
}
/**
* helper routine for getting data from a text control
* @param control contol to get data from
*/
private String readText(Text control)
{
String str = control.getText();
if (str != null) {
str.trim();
} else {
str = "";
}
return str;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#createControl(Composite)
*/
public void createControl(Composite parent) {
final String[] BUTTON_LABELS = {
("Add..._5"), //$NON-NLS-1$
("Remove_7"), //$NON-NLS-1$
("Add_12"), //$NON-NLS-1$
("Remove_13"), //$NON-NLS-1$
("Move_Up_14"), //$NON-NLS-1$
("Move_Down_15") //$NON-NLS-1$
};
Composite ths = new Composite(parent, SWT.NONE);
int BUTTON_WIDTH = new TextWidth(ths, BUTTON_LABELS).getWidth();
// Panel
ths.setLayout(new GridLayout(2, true));
ths.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_BOTH));
fLibFileList = new List(parent, SWT.NONE);
// --------------------------------------------------
// Left column
// --------------------------------------------------
Composite cmpLeft = new Composite(ths, SWT.NONE);
cmpLeft.setLayout(createGridLayout(1, true, 2, 2));
cmpLeft.setLayoutData(new GridData(GridData.FILL_BOTH));
// row 1
new Label(cmpLeft, SWT.NULL).setText(("Output_File_Name_3")); //$NON-NLS-1$
// row 2
fOutputFileName = new Text(cmpLeft, SWT.LEFT | SWT.BORDER);
fOutputFileName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
// row 3
btnStatic = new Button(cmpLeft, SWT.CHECK | SWT.LEFT);
btnStatic.setText(("Perform_Static_Linking_6")); //$NON-NLS-1$
btnStatic.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
// row 4
btnSharedObject = new Button(cmpLeft, SWT.CHECK | SWT.LEFT);
btnSharedObject.setText(("Create_Shared_Object_8")); //$NON-NLS-1$
btnSharedObject.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
// row 5
btnStripSybmols = new Button(cmpLeft, SWT.CHECK | SWT.LEFT);
btnStripSybmols.setText(("Strip_Symbols_9")); //$NON-NLS-1$
btnStripSybmols.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
// row 6
new Label(cmpLeft, SWT.NULL).setText(("Additional_Options_11")); //$NON-NLS-1$
// row 7
fCmdLine = new Text(cmpLeft, SWT.LEFT | SWT.BORDER);
fCmdLine.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
// --------------------------------------------------
// Right column
// --------------------------------------------------
Composite cmpRight = new Composite(ths, SWT.NONE);
cmpRight.setLayout(createGridLayout(1, true, 2, 2));
cmpRight.setLayoutData(new GridData(GridData.FILL_BOTH));
// Lib paths
Group grpLibPaths = new Group(cmpRight, SWT.SHADOW_NONE);
grpLibPaths.setLayout(createGridLayout(1, true, 2, 2));
grpLibPaths.setLayoutData(new GridData(GridData.FILL_BOTH));
grpLibPaths.setText(("Library_Paths__4")); //$NON-NLS-1$
Composite cmpLibPaths = new Composite(grpLibPaths, SWT.NONE);
cmpLibPaths.setLayout(createGridLayout(1, true, 2, 2));
cmpLibPaths.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite cmpPathCtrls = new Composite(cmpLibPaths, SWT.NONE);
cmpPathCtrls.setLayout(createGridLayout(2, false, 2, 2));
cmpPathCtrls.setLayoutData(new GridData(GridData.FILL_BOTH));
fLibPaths = new List(cmpPathCtrls, SWT.LEFT | SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
fLibPaths.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite cmpPathButtons = new Composite(cmpPathCtrls, SWT.NONE);
cmpPathButtons.setLayout(createGridLayout(1, true, 2, 2));
GridData gdPathBtns = new GridData();
gdPathBtns.widthHint = BUTTON_WIDTH;
cmpPathButtons.setLayoutData(gdPathBtns);
Button btnNew = new Button(cmpPathButtons, SWT.NULL);
btnNew.setText(("Add..._5")); //$NON-NLS-1$
btnNew.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
btnRemove = new Button(cmpPathButtons, SWT.NULL);
btnRemove.setText(("Remove_7")); //$NON-NLS-1$
btnRemove.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Libs
Group grpLibs = new Group(cmpRight, SWT.SHADOW_NONE);
grpLibs.setLayout(createGridLayout(1, true, 2, 2));
grpLibs.setLayoutData(new GridData(GridData.FILL_BOTH));
grpLibs.setText(("Libraries_10")); //$NON-NLS-1$
Composite cmpLibs = new Composite(grpLibs, SWT.NONE);
cmpLibs.setLayout(createGridLayout(1, true, 2, 2));
cmpLibs.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite cmpLibCtrls = new Composite(cmpLibs, SWT.NONE);
cmpLibCtrls.setLayout(createGridLayout(2, false, 2, 2));
cmpLibCtrls.setLayoutData(new GridData(GridData.FILL_BOTH));
fLibs = new List(cmpLibCtrls, SWT.LEFT | SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
fLibs.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite cmpLibButtons = new Composite(cmpLibCtrls, SWT.NONE);
cmpLibButtons.setLayout(createGridLayout(1, true, 2, 2));
GridData gdLibBtns = new GridData();
gdLibBtns.widthHint = BUTTON_WIDTH;
cmpLibButtons.setLayoutData(gdLibBtns);
btnAddLib = new Button(cmpLibButtons, SWT.NULL);
btnAddLib.setText(("Add_12")); //$NON-NLS-1$
btnAddLib.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
btnRemoveLib = new Button(cmpLibButtons, SWT.NULL);
btnRemoveLib.setText(("Remove_13")); //$NON-NLS-1$
btnRemoveLib.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
btnMoveUp = new Button(cmpLibButtons, SWT.NULL);
btnMoveUp.setText(("Move_Up_14")); //$NON-NLS-1$
btnMoveUp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
btnMoveDown = new Button(cmpLibButtons, SWT.NULL);
btnMoveDown.setText(("Move_Down_15")); //$NON-NLS-1$
btnMoveDown.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
/*
* create the listener events the controls
*
*/
btnNew.addSelectionListener(m_addLibraryPath);
btnRemove.addSelectionListener(m_delLibraryPath);
fLibPaths.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e) {
int[] selection = fLibPaths.getSelectionIndices();
btnRemove.setEnabled(selection.length > 0);
}
}
);
// fLibPaths.addKeyListener(new KeyAdapter()
// {
// public void keyPressed(KeyEvent key) {}
// public void keyReleased(KeyEvent key) {}
// public void keyTyped(KeyEvent key)
// {
// if (key.keyCode == SWT.DEL) {
// m_delLibraryPath.widgetSelected(null);
// }
// else if (key.keyCode == SWT.INSERT) {
// m_addLibraryPath.widgetSelected(null);
// }
// }
//
// }
// );
btnAddLib.addSelectionListener(m_addLibraryFile);
btnRemoveLib.addSelectionListener(m_delLibraryFile);
fLibs.addFocusListener(new FocusAdapter()
{
public void focusLost(FocusEvent e) {
// btnMoveDown.setEnabled(false);
// btnMoveUp.setEnabled(false);
super.focusLost(e);
}
}
);
fLibs.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e) {
int[] selections = fLibs.getSelectionIndices();
if (selections.length > 0) {
// see if we should enable the up button
btnMoveUp.setEnabled(selections[0] > 0);
btnMoveDown.setEnabled(selections[selections.length - 1] < fLibs.getItemCount() - 1);
btnRemoveLib.setEnabled(true);
}
else {
// don't enable the buttons if the user hasn't made any selections
btnMoveUp.setEnabled(false);
btnMoveDown.setEnabled(false);
btnRemoveLib.setEnabled(false);
}
super.widgetSelected(e);
}
}
);
btnMoveDown.addSelectionListener(new moveLibs(1));
btnMoveUp.addSelectionListener(new moveLibs(-1));
// the user hasn't made selections yet, so turn these buttons off
btnMoveDown.setEnabled(false);
btnMoveUp.setEnabled(false);
btnRemoveLib.setEnabled(false);
btnRemove.setEnabled(false);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#initializeFrom(ICBuildConfig)
*/
public void initializeFrom(ICBuildConfig config) {
String output = "";
String cmdLine = "";
boolean isStatic = false;
boolean isShared = false;
boolean isStrip = false;
java.util.List libs = null;
java.util.List libPaths = null;
try {
output = config.getAttribute(ICPosixBuildConstants.LD_OUTPUT, "");
cmdLine = config.getAttribute(ICPosixBuildConstants.LD_USER_ARGS, "");
isStatic = config.getAttribute(ICPosixBuildConstants.LD_LINK_STATIC, false);
isShared = config.getAttribute(ICPosixBuildConstants.LD_LINK_AS_SHARED, false);
isStrip = config.getAttribute(ICPosixBuildConstants.LD_STRIP, false);
libs = config.getAttribute(ICPosixBuildConstants.LD_LIBS, libs);
libPaths = config.getAttribute(ICPosixBuildConstants.LD_LIBPATHS, libPaths);
} catch (CoreException e) {
}
fOutputFileName.setText(output);
fCmdLine.setText(cmdLine);
btnStatic.setSelection(isStatic);
btnSharedObject.setSelection(isShared);
btnStripSybmols.setSelection(isStrip);
setList(fLibs, libs);
setList(fLibs, libPaths);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#performApply(ICBuildConfigWorkingCopy)
*/
public void performApply(ICBuildConfigWorkingCopy config) {
config.setAttribute(ICPosixBuildConstants.LD_OUTPUT, readText(fOutputFileName));
config.setAttribute(ICPosixBuildConstants.LD_USER_ARGS, readText(fCmdLine));
config.setAttribute(ICPosixBuildConstants.LD_LIBS, getList(fLibs));
config.setAttribute(ICPosixBuildConstants.LD_LIBPATHS, getList(fLibPaths));
config.setAttribute(ICPosixBuildConstants.LD_LINK_STATIC, btnStatic.getSelection());
config.setAttribute(ICPosixBuildConstants.LD_STRIP, btnStripSybmols.getSelection());
if (btnSharedObject.getSelection()) {
config.setAttribute(ICPosixBuildConstants.LD_LINK_AS_SHARED, true);
config.setAttribute(ICPosixBuildConstants.LD_LINK_AS_ARCHIVE, false);
config.setAttribute(ICPosixBuildConstants.LD_LINK_AS_PROGRAM, false);
} else {
config.setAttribute(ICPosixBuildConstants.LD_LINK_AS_SHARED, false);
config.setAttribute(ICPosixBuildConstants.LD_LINK_AS_ARCHIVE, false);
config.setAttribute(ICPosixBuildConstants.LD_LINK_AS_PROGRAM, true);
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy configuration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#isValid(ICBuildConfigWorkingCopy)
*/
public boolean isValid(ICBuildConfigWorkingCopy config) {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#getName()
*/
public String getName() {
return "Linker";
}
}

View file

@ -1,547 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.gnu.tools.tabs;
import java.util.Iterator;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.builder.model.ICPosixBuildConstants;
import org.eclipse.cdt.ui.builder.ACToolTab;
import org.eclipse.cdt.ui.builder.internal.CBuildVariableDialog;
import org.eclipse.cdt.ui.builder.internal.CNameValueDialog;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
/**
* The control for editing and viewing compiler options.
*/
public class CTabPreprocessor extends ACToolTab {
private Table fDefineTable;
private Table fIncludeTable;
private Button btnIncludeAdd;
private Button btnIncludeRemove;
private Button btnIncludeMoveUp;
private Button btnIncludeMoveDown;
private Button btnDefineAdd;
private Button btnDefineRemove;
private Button btnDefineEdit;
private List fIncludePaths;
private List fDefineMacros;
/**
* Constructs the object
*
* @param parent owning window
* @param style modal or not
*/
public CTabPreprocessor() {
super();
}
/**
* Helper function for creating a grid layout to spec.
*
* @param columns Number of columns in layout.
* @param equalWidth True if columns are of equal width.
* @param marginHeight Margin height for layout.
* @param marginWidth Margin width for layout.
*
* @return Newly created GridLayout with the specified properties.
*/
private GridLayout createGridLayout(int columns, boolean equalWidth, int marginHeight, int marginWidth) {
GridLayout layout = new GridLayout(columns, equalWidth);
layout.marginHeight = marginHeight;
layout.marginWidth = marginWidth;
return layout;
}
/**
* "Add Include" button handler.
*/
private void handleIncludeAdd(SelectionEvent e) {
TableItem[] existingItems = fIncludeTable.getItems();
fIncludePaths.removeAll();
for (int i = 0; i < fIncludeTable.getItemCount(); i++) {
fIncludePaths.add(existingItems[i].getText());
}
CBuildVariableDialog dlg = new CBuildVariableDialog(getShell(), ("Select_Include_Path_12")); //$NON-NLS-1$
if (dlg.open() == dlg.OK) {
TableItem item = new TableItem(fIncludeTable, SWT.NONE);
item.setText(dlg.getSelection().toString());
fIncludeTable.select(fIncludeTable.indexOf(item));
fIncludeTable.setFocus();
}
handleIncludeTableSelectionChanged();
}
/**
* "Remove Include" button handler.
*/
private void handleIncludeRemove(SelectionEvent e) {
handleTableRemove(fIncludeTable);
handleIncludeTableSelectionChanged();
}
/**
* "Move Up Include" button handler.
*/
private void handleIncludeMoveUp(SelectionEvent e) {
int itemIndex = fIncludeTable.getSelectionIndex();
String itemText = fIncludeTable.getItem(itemIndex).getText();
fIncludeTable.remove(itemIndex);
new TableItem(fIncludeTable, SWT.NONE, itemIndex - 1).setText(itemText);
fIncludeTable.setFocus();
fIncludeTable.select(itemIndex - 1);
handleIncludeTableSelectionChanged();
}
/**
* "Move Down Include" button handler.
*/
private void handleIncludeMoveDown(SelectionEvent e) {
int itemIndex = fIncludeTable.getSelectionIndex();
String itemText = fIncludeTable.getItem(itemIndex).getText();
fIncludeTable.remove(itemIndex);
new TableItem(fIncludeTable, SWT.NONE, itemIndex + 1).setText(itemText);
fIncludeTable.setFocus();
fIncludeTable.select(itemIndex + 1);
handleIncludeTableSelectionChanged();
}
/**
* Include table selection change handler.
*/
private void handleIncludeTableSelectionChanged() {
int itemIndex = fIncludeTable.getSelectionIndex();
int itemCount = fIncludeTable.getItemCount();
// Add always enabled
btnIncludeAdd.setEnabled(true);
// Remove enabled if > 1 item selected
btnIncludeRemove.setEnabled(-1 != itemIndex);
// Move up/down enabled if:
// > 1 item in list
// 1 item selected
// Item is not first item (up) or last item (down)
btnIncludeMoveUp.setEnabled((-1 != itemIndex) && (itemCount > 1) && (0 != itemIndex));
btnIncludeMoveDown.setEnabled((-1 != itemIndex) && (itemCount > 1) && ((itemCount - 1) != itemIndex));
}
/**
* "Add Define" button handler.
*/
private void handleDefineAdd(SelectionEvent e) {
TableItem[] existingItems = fDefineTable.getItems();
fDefineMacros.removeAll();
for (int i =0; i < fDefineTable.getItemCount(); i++) {
fDefineMacros.add(existingItems[i].getText());
}
CNameValueDialog dlg = new CNameValueDialog(getShell(), fDefineMacros);
dlg.setTitle(("New_Preprocessor_Definition_13")); //$NON-NLS-1$
if (dlg.open() == dlg.OK) {
TableItem item = new TableItem(fDefineTable, SWT.NONE);
item.setText(0, dlg.getName());
item.setText(1, dlg.getValue());
fDefineTable.select(fDefineTable.indexOf(item));
fDefineTable.setFocus();
}
handleDefineTableSelectionChanged();
}
/**
* "Remove Define" button handler.
*/
private void handleDefineRemove(SelectionEvent e) {
handleTableRemove(fDefineTable);
handleDefineTableSelectionChanged();
}
/**
* "Edit Define" button handler.
*/
private void handleDefineEdit(SelectionEvent e) {
int itemIndex = fDefineTable.getSelectionIndex();
if (-1 != itemIndex) {
TableItem item = fDefineTable.getItem(itemIndex);
CNameValueDialog dlg = new CNameValueDialog(getShell());
dlg.setTitle(("Edit_Preprocessor_Definition_14")); //$NON-NLS-1$
dlg.setName(item.getText(0));
dlg.setValue(item.getText(1));
if (dlg.open() == dlg.OK) {
item.setText(0, dlg.getName());
item.setText(1, dlg.getValue());
}
fDefineTable.select(itemIndex);
fDefineTable.setFocus();
}
handleDefineTableSelectionChanged();
}
/**
* Define table selection change handler.
*/
private void handleDefineTableSelectionChanged() {
TableItem[] items = fDefineTable.getSelection();
// Add always enabled
btnDefineAdd.setEnabled(true);
// Remove enabled if > 1 item selected
btnDefineRemove.setEnabled((null != items) && (1 >= items.length));
// Edit enabled if exactly 1 item selected
btnDefineEdit.setEnabled((null != items) && (1 == items.length));
}
/**
* Generic "remove selected entry from table" method.
*
* @param Table to remove entry from.
*/
private void handleTableRemove(Table table) {
int itemIndex = table.getSelectionIndex();
if (-1 != itemIndex) {
TableItem item = table.getItem(itemIndex);
item.dispose();
int itemCount = table.getItemCount();
table.select(0 == itemIndex ? 0 : (itemIndex >= itemCount ? itemCount - 1 : itemIndex));
table.setFocus();
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#createControl(Composite)
*/
public void createControl(Composite parent) {
Composite cmpGroup = null;
Composite cmpCtrls = null;
Composite cmpButtons = null;
Group group = null;
Table table = null;
Button button = null;
TableColumn column = null;
GridLayout gridLayout = null;
GridData gridData = null;
GC gc = null;
Composite ths = new Composite(parent, SWT.NONE);
// Panel
ths.setLayout(new GridLayout());
ths.setLayoutData(new GridData(GridData.FILL_BOTH));
// Initialize our list containing existing paths,
fIncludePaths = new List(parent, SWT.NONE);
fDefineMacros = new List(parent, SWT.NONE);
// Includes
group = new Group(ths, SWT.SHADOW_NONE);
group.setLayout(createGridLayout(1, true, 2, 2));
group.setLayoutData(new GridData(GridData.FILL_BOTH));
group.setText(("Include_Paths_1")); //$NON-NLS-1$
cmpGroup = new Composite(group, SWT.NONE);
cmpGroup.setLayout(createGridLayout(1, true, 2, 2));
cmpGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
cmpCtrls = new Composite(cmpGroup, SWT.NONE);
cmpCtrls.setLayout(createGridLayout(2, false, 2, 2));
cmpCtrls.setLayoutData(new GridData(GridData.FILL_BOTH));
table = new Table(cmpCtrls, SWT.BORDER | SWT.SINGLE | SWT.HIDE_SELECTION);
table.setLayout(new GridLayout());
table.setLayoutData(new GridData(GridData.FILL_BOTH));
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleIncludeTableSelectionChanged();
}
});
fIncludeTable = table;
cmpButtons = new Composite(cmpCtrls, SWT.NONE);
gridLayout = createGridLayout(1, true, 2, 2);
gridData = new GridData();
gc = new GC(cmpButtons);
gc.setFont(cmpButtons.getFont());
gridData.widthHint = gc.getFontMetrics().getAverageCharWidth() * 20;
gc.dispose();
cmpButtons.setLayout(gridLayout);
cmpButtons.setLayoutData(gridData);
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Add_2")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleIncludeAdd(e);
}
});
btnIncludeAdd = button;
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Remove_3")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleIncludeRemove(e);
}
});
btnIncludeRemove = button;
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Move_Up_4")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleIncludeMoveUp(e);
}
});
btnIncludeMoveUp = button;
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Move_Down_5")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleIncludeMoveDown(e);
}
});
btnIncludeMoveDown = button;
// Defines
group = new Group(ths, SWT.SHADOW_NONE);
group.setLayout(createGridLayout(1, true, 2, 2));
group.setLayoutData(new GridData(GridData.FILL_BOTH));
group.setText(("Preprocessor_Definitions_6")); //$NON-NLS-1$
cmpGroup = new Composite(group, SWT.NONE);
cmpGroup.setLayout(createGridLayout(1, true, 2, 2));
cmpGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
cmpCtrls = new Composite(cmpGroup, SWT.NONE);
cmpCtrls.setLayout(createGridLayout(2, false, 2, 2));
cmpCtrls.setLayoutData(new GridData(GridData.FILL_BOTH));
table = new Table(cmpCtrls, SWT.BORDER | SWT.SINGLE | SWT.HIDE_SELECTION);
TableLayout tblLayout = new TableLayout();
table.setLayout(tblLayout);
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
column = new TableColumn(table, SWT.NULL);
column.setText(("Name_7")); //$NON-NLS-1$
tblLayout.addColumnData(new ColumnWeightData(30));
column = new TableColumn(table, SWT.NULL);
column.setText(("Value_8")); //$NON-NLS-1$
tblLayout.addColumnData(new ColumnWeightData(30));
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleDefineTableSelectionChanged();
}
});
fDefineTable = table;
cmpButtons = new Composite(cmpCtrls, SWT.NONE);
gridLayout = createGridLayout(1, true, 2, 2);
gridData = new GridData();
gc = new GC(cmpButtons);
gc.setFont(cmpButtons.getFont());
gridData.widthHint = gc.getFontMetrics().getAverageCharWidth() * 20;
gc.dispose();
cmpButtons.setLayout(gridLayout);
cmpButtons.setLayoutData(gridData);
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Add_9")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleDefineAdd(e);
}
});
btnDefineAdd = button;
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Remove_10")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleDefineRemove(e);
}
});
btnDefineRemove = button;
button = new Button(cmpButtons, SWT.PUSH);
button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
button.setEnabled(true);
button.setText(("Edit_11")); //$NON-NLS-1$
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleDefineEdit(e);
}
});
btnDefineEdit = button;
// Since no paths or macros have been added yet, disabled the following buttons.
btnDefineEdit.setEnabled(false);
btnDefineRemove.setEnabled(false);
btnIncludeMoveDown.setEnabled(false);
btnIncludeMoveUp.setEnabled(false);
btnIncludeRemove.setEnabled(false);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#initializeFrom(ICBuildConfig)
*/
public void initializeFrom(ICBuildConfig config) {
java.util.List includes = null;
java.util.List defines = null;
try {
includes = config.getAttribute(ICPosixBuildConstants.CPP_INCLUDES, (java.util.List) null);
defines = config.getAttribute(ICPosixBuildConstants.CPP_DEFINITIONS, (java.util.List) null);
} catch (CoreException e) {
}
if (includes != null) {
for (Iterator iter = includes.iterator(); iter.hasNext();) {
TableItem item = new TableItem(fIncludeTable, SWT.NONE);
item.setText((String) iter.next());
}
}
if (defines != null) {
for (Iterator iter = defines.iterator(); iter.hasNext();) {
TableItem item = new TableItem(fDefineTable, SWT.NONE);
String define = (String) iter.next();
int index = define.indexOf('=');
if (-1 == index) {
item.setText(0, define.trim());
} else {
item.setText(0, define.substring(0, index).trim());
if (index < define.length()) {
item.setText(1, define.substring(index + 1).trim());
}
}
}
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#performApply(ICBuildConfigWorkingCopy)
*/
public void performApply(ICBuildConfigWorkingCopy config) {
TableItem[] includes = fIncludeTable.getItems();
TableItem[] defines = fDefineTable.getItems();
java.util.List includeList = new java.util.Vector();
java.util.List defineList = new java.util.Vector();
for (int i = 0; i < includes.length; i++) {
includeList.add(includes[i].getText());
}
for (int i = 0; i < defines.length; i++) {
String name = defines[i].getText(0);
String value = defines[i].getText(1);
if (value.length() > 0) {
defineList.add(name + "=" + value);
} else {
defineList.add(name);
}
}
config.setAttribute(ICPosixBuildConstants.CPP_INCLUDES, includeList);
config.setAttribute(ICPosixBuildConstants.CPP_DEFINITIONS, defineList);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy configuration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#isValid(ICBuildConfigWorkingCopy)
*/
public boolean isValid(ICBuildConfigWorkingCopy config) {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.builder.ICToolTab#getName()
*/
public String getName() {
return "Preprocessor";
}
}

View file

@ -1,195 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder;
import org.eclipse.debug.internal.ui.SWTUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
/**
* Base tool tab implementation.
*/
public abstract class ACToolTab implements ICToolTab {
/**
* The control for this page, or <code>null</code>
*/
private Control fControl;
/**
* The configuration dialog this tab is contained in.
*/
private ICBuildConfigDialog fConfigurationDialog;
/**
* Current error message, or <code>null</code>
*/
private String fErrorMessage;
/**
* Current message, or <code>null</code>
*/
private String fMessage;
/**
* Returns the dialog this tab is contained in, or
* <code>null</code> if not yet set.
*
* @return configuration dialog, or <code>null</code>
*/
protected ICBuildConfigDialog getConfigurationDialog() {
return fConfigurationDialog;
}
/**
* Updates the buttons and message in this page's configuration dialog.
*/
protected void updateConfigurationDialog() {
if (getConfigurationDialog() != null) {
getConfigurationDialog().updateButtons();
getConfigurationDialog().updateMessage();
}
}
/**
* @see ICToolTab#getControl()
*/
public Control getControl() {
return fControl;
}
/**
* Sets the control to be displayed in this tab.
*
* @param control the control for this tab
*/
protected void setControl(Control control) {
fControl = control;
}
/**
* @see ICToolTab#getErrorMessage()
*/
public String getErrorMessage() {
return fErrorMessage;
}
/**
* @see ICToolTab#getMessage()
*/
public String getMessage() {
return fMessage;
}
/**
* @see ICToolTab#setConfigurationDialog(ICBuildConfigDialog)
*/
public void setConfigurationDialog(ICBuildConfigDialog dialog) {
fConfigurationDialog = dialog;
}
/**
* Sets this page's error message, possibly <code>null</code>.
*
* @param errorMessage the error message or <code>null</code>
*/
protected void setErrorMessage(String errorMessage) {
fErrorMessage = errorMessage;
}
/**
* Sets this page's message, possibly <code>null</code>.
*
* @param message the message or <code>null</code>
*/
protected void setMessage(String message) {
fMessage = message;
}
/**
* By default, do nothing.
*
* @see ICToolTab#dispose()
*/
public void dispose() {
}
/**
* Returns the shell this tab is contained in, or <code>null</code>.
*
* @return the shell this tab is contained in, or <code>null</code>
*/
protected Shell getShell() {
Control control = getControl();
if (control != null) {
return control.getShell();
}
return null;
}
/**
* Creates and returns a new push button with the given
* label and/or image.
*
* @param parent parent control
* @param label button label or <code>null</code>
* @param image image of <code>null</code>
*
* @return a new push button
*/
protected Button createPushButton(Composite parent, String label, Image image) {
return SWTUtil.createPushButton(parent, label, image);
}
/**
* Creates and returns a new radio button with the given
* label and/or image.
*
* @param parent parent control
* @param label button label or <code>null</code>
*
* @return a new radio button
*/
protected Button createRadioButton(Composite parent, String label) {
return SWTUtil.createRadioButton(parent, label);
}
/**
* @see ICToolTab#canSave()
*/
public boolean canSave() {
return true;
}
/**
* Create some empty space.
*/
protected void createVerticalSpacer(Composite comp, int colSpan) {
Label label = new Label(comp, SWT.NONE);
GridData gd = new GridData();
gd.horizontalSpan = colSpan;
label.setLayoutData(gd);
}
/**
* @see ICToolTab#getImage()
*/
public Image getImage() {
return null;
}
}

View file

@ -1,90 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
/**
* Base tool tab group implementation.
*/
public abstract class ACToolTabGroup implements ICToolTabGroup {
/**
* The tabs in this tab group, or <code>null</code> if not yet instantiated.
*/
protected ICToolTab[] fTabs = null;
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#getTabs()
*/
public ICToolTab[] getTabs() {
return fTabs;
}
/**
* Sets the tabs in this group
*
* @param tabs the tabs in this group
*/
protected void setTabs(ICToolTab[] tabs) {
fTabs = tabs;
}
/**
* By default, dispose all the tabs in this group.
*
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#dispose()
*/
public void dispose() {
ICToolTab[] tabs = getTabs();
for (int i = 0; i < tabs.length; i++) {
tabs[i].dispose();
}
}
/**
* By default, delegate to all of the tabs in this group.
*
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#setDefaults(ICBuildConfigWorkingCopy)
*/
public void setDefaults(ICBuildConfigWorkingCopy configuration) {
ICToolTab[] tabs = getTabs();
for (int i = 0; i < tabs.length; i++) {
tabs[i].setDefaults(configuration);
}
}
/**
* By default, delegate to all of the tabs in this group.
*
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#initializeFrom(ICBuildConfig)
*/
public void initializeFrom(ICBuildConfig configuration) {
ICToolTab[] tabs = getTabs();
for (int i = 0; i < tabs.length; i++) {
tabs[i].initializeFrom(configuration);
}
}
/**
* By default, delegate to all of the tabs in this group.
*
* @see org.eclipse.cdt.ui.builder.ICToolTabGroup#performApply(ICBuildConfigWorkingCopy)
*/
public void performApply(ICBuildConfigWorkingCopy configuration) {
ICToolTab[] tabs = getTabs();
for (int i = 0; i < tabs.length; i++) {
tabs[i].performApply(configuration);
}
}
}

View file

@ -1,62 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder;
/**
* A tool settings dialog is used to edit/view parameters passed
* to a tool as part of a C/'C++ build step. It contains a build
* configuration tab group.
*
* @see ICToolTabGroup
* @see ICToolTab
*/
public interface ICBuildConfigDialog {
/**
* Adjusts the enable state of this dialog's buttons
* to reflect the state of the active tab group.
* <p>
* This may be called by to force a button state update.
*/
public void updateButtons();
/**
* Updates the message (or error message) shown in the message line
* to reflect the state of the currently active tab in the dialog.
* <p>
* This method may be called to force a message update.
*/
public void updateMessage();
/**
* Sets the contents of the name field to the given name.
*
* @param name new name value
*/
public void setName(String name);
/**
* Returns the tabs currently being displayed, or
* <code>null</code> if none.
*
* @return currently displayed tabs, or <code>null</code>
*/
public ICToolTab[] getTabs();
/**
* Returns the currently active <code>ICToolTab</code>
* being displayed, or <code>null</code> if there is none.
*
* @return currently active <code>ICToolTab</code>, or <code>null</code>.
*/
public ICToolTab getActiveTab();
}

View file

@ -1,159 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* A tool settings configuration tab group is used to edit/view
* parameters passed to a tool as part of a C/'C++ build step.
* CToolPoint settings are presented in a dialog with a tab folder.
* Each tab presents UI elements appropriate for manipulating
* a set of parameters for a tool.
* <p>
* This interface is intended to be implemented by clients.
*/
public interface ICToolTab {
/**
* Creates the top level control for this settings tab under
* the given parent composite. This method is called once on
* tab creation, after <code>setConfigurationDialog</code>
* is called.
* <p>
* Implementors are responsible for ensuring that
* the created control can be accessed via <code>getControl</code>
* </p>
*
* @param parent the parent composite
*/
public void createControl(Composite parent);
/**
* Returns the top level control for this tab.
* <p>
* May return <code>null</code> if the control
* has not been created yet.
* </p>
*
* @return the top level control or <code>null</code>
*/
public Control getControl();
/**
* Initializes the given configuration with default values
* for this tab. This method is called when a new configuration
* is created such that the configuration can be initialized with
* meaningful values. This method may be called before this
* tab's control is created.
*
* @param configuration configuration
*/
public void setDefaults(ICBuildConfigWorkingCopy configuration);
/**
* Initializes this tab's controls with values from the given
* configuration. This method is called when a configuration is
* selected to view or edit, after thistab's control has been
* created.
*
* @param configuration configuration
*/
public void initializeFrom(ICBuildConfig configuration);
/**
* Notifies this configuration tab that it has been disposed. Marks
* the end of this tab's lifecycle, allowing this tab to perform any
* cleanup required.
*/
public void dispose();
/**
* Copies values from this tab into the given configuration.
*
* @param configuration configuration
*/
public void performApply(ICBuildConfigWorkingCopy configuration);
/**
* Returns the current error message for this tab.
* May be <code>null</code> to indicate no error message.
* <p>
* An error message should describe some error state,
* as opposed to a message which may simply provide instruction
* or information to the user.
* </p>
*
* @return the error message, or <code>null</code> if none
*/
public String getErrorMessage();
/**
* Returns the current message for this tab.
* <p>
* A message provides instruction or information to the
* user, as opposed to an error message which should
* describe some error state.
* </p>
*
* @return the message, or <code>null</code> if none
*/
public String getMessage();
/**
* Returns whether this tab is in a state that allows the configuration
* whose values this tab is showing to be saved.
* <p>
* This information is typically used by the configuration dialog to
* decide when it is okay to save a configuration.
* </p>
*
* @return whether this tab is in a state that allows the current
* configuration to be saved
*/
public boolean canSave();
/**
* Sets the configuration dialog that hosts this tab. This is the
* first method called on a configuration tab, and marks the beginning
* of this tab's lifecycle.
*
* @param dialog configuration dialog
*/
public void setConfigurationDialog(ICBuildConfigDialog dialog);
/**
* Returns the name of this tab.
*
* @return the name of this tab
*/
public String getName();
/**
* Returns the image for this tab, or <code>null</code> if none
*
* @return the image for this tab, or <code>null</code> if none
*/
public Image getImage();
/**
* Returns true if the current contents of a tab are valid.
*
* @param config build configuration.
* @return boolean true if tab contents are valid, fale if not.
*/
boolean isValid(ICBuildConfigWorkingCopy config);
}

View file

@ -1,83 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
/**
* A tool settings configuration tab group is used to edit/view
* parameters passed to a tool as part of a C/'C++ build step.
* CToolPoint settings are presented in a dialog with a tab folder.
* Each tab presents UI elements appropriate for manipulating
* a set of parameters for a tool.
* <p>
* The tab group controls which tabs are displayed for a specific
* tool, and provides a mechanism for overriding configuration
* initialization performed by tabs.
* <p>
* This interface is intended to be implemented by clients.
* <p>
* (Mercilessly modeled on the Eclipse launch mechanism.)
*/
public interface ICToolTabGroup {
/**
* Creates the tabs contained in this tab group. The tabs control's
* are not created. This is the first method called in the lifecycle
* of a tab group.
*
* @param dialog the tool settings dialog this tab group is contained in
*/
public void createTabs(ICBuildConfigDialog dialog);
/**
* Returns the tabs contained in this tab group.
*
* @return the tabs contained in this tab group
*/
public ICToolTab[] getTabs();
/**
* Notifies this tab group that it has been disposed, and disposes
* of this group's tabs. Marks the end of this tab group's lifecycle,
* allowing this tab group to perform any cleanup required.
*/
public void dispose();
/**
* Initializes the given build configuration with default values
* for this tab group. This method is called when a new build
* configuration is created such that the configuration can be
* initialized with meaningful values. This method may be called
* before tab controls are created.
*
* @param configuration build configuration
*/
public void setDefaults(ICBuildConfigWorkingCopy configuration);
/**
* Initializes this group's tab controls with values from the given
* build configuration. This method is called when a configuration
* is selected to view or edit.
*
* @param configuration build configuration
*/
public void initializeFrom(ICBuildConfig configuration);
/**
* Copies values from this group's tabs into the given build configuration.
*
* @param configuration build configuration
*/
public void performApply(ICBuildConfigWorkingCopy configuration);
}

View file

@ -1,44 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder;
import org.eclipse.core.runtime.CoreException;
/**
* Interface representing an instance of
* a CToolTabGroup extension point.
*/
public interface ICToolTabGroupPoint {
/**
* Returns the unique id for the provider.
*
* @return unique id.
*/
public String getId();
/**
* Returns the name of the provider's
* implementing class.
*
* @return name of the provider's implementing class.
*/
public String getProviderClassName();
/**
* Returns an instance of the provider's
* implementing class.
*
* @return instance of ICToolTabGroup.
*/
public ICToolTabGroup getProvider() throws CoreException;
}

View file

@ -1,121 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import java.text.MessageFormat;
import java.util.Hashtable;
import org.eclipse.cdt.core.builder.model.ICToolType;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.builder.ICToolTabGroup;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IPluginDescriptor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.ui.IDebugUIConstants;
/**
* @author sam.robb
*
* Manages contributed configuration tabs
*/
public class CBuildConfigPresentationManager {
/**
* The singleton configuration presentation manager
*/
private static CBuildConfigPresentationManager fgDefault;
/**
* Collection of configuration tab group extensions
* defined in plug-in xml. Entries are keyed by
* type identifier (<code>String</code>), and entires
* are <code>CToolTabGroupPoint</code>.
*/
private Hashtable fTabGroupExtensions;
/**
* Constructs the singleton configuration presentation manager.
*/
private CBuildConfigPresentationManager() {
fgDefault = this;
initializeTabGroupExtensions();
}
/**
* Returns the configuration presentation manager
*/
public static CBuildConfigPresentationManager getDefault() {
if (fgDefault == null) {
fgDefault = new CBuildConfigPresentationManager();
}
return fgDefault;
}
/**
* Creates launch configuration tab group extensions for each extension
* defined in XML, and adds them to the table of tab group extensions.
*/
private void initializeTabGroupExtensions() {
fTabGroupExtensions = new Hashtable();
IPluginDescriptor descriptor= CUIPlugin.getDefault().getDescriptor();
IExtensionPoint extensionPoint= descriptor.getExtensionPoint(IDebugUIConstants.EXTENSION_POINT_LAUNCH_CONFIGURATION_TAB_GROUPS);
IConfigurationElement[] groups = extensionPoint.getConfigurationElements();
for (int i = 0; i < groups.length; i++) {
CToolTabGroupPoint group = new CToolTabGroupPoint(groups[i]);
String typeId = group.getId();
if (typeId == null) {
IExtension ext = groups[i].getDeclaringExtension();
IStatus status = new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.STATUS_INVALID_EXTENSION_DEFINITION,
MessageFormat.format("Configuration tab group extension {0} does not specify configuration type", (new String[] {ext.getUniqueIdentifier()})), null); //$NON-NLS-1$
DebugUIPlugin.log(status);
} else {
// verify it references a valid launch configuration type
ILaunchConfigurationType lct = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(typeId);
if (lct == null) {
IExtension ext = groups[i].getDeclaringExtension();
IStatus status = new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.STATUS_INVALID_EXTENSION_DEFINITION,
MessageFormat.format("Launch configuration tab group extension {0} refers to non-existant launch configuration_type_{1}", (new String[] {ext.getUniqueIdentifier(), typeId})), null); //$NON-NLS-1$
DebugUIPlugin.log(status);
}
}
if (typeId != null) {
fTabGroupExtensions.put(typeId, group);
}
}
}
/**
* Returns the tab group for the given type of launch configuration.
*
* @return the tab group for the given type of launch configuration
* @exception CoreException if an exception occurrs creating the group
*/
public ICToolTabGroup getTabGroup(ICToolType type) throws CoreException {
CToolTabGroupPoint ext = (CToolTabGroupPoint)fTabGroupExtensions.get(type.getId());
if (ext == null) {
IStatus status = new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.INTERNAL_ERROR,
MessageFormat.format("No tab group defined for configuration type {0}", (new String[] {type.getId()})), null); ; //$NON-NLS-1$
throw new CoreException(status);
} else {
return ext.getProvider();
}
}
}

View file

@ -1,824 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.builder.BuilderPlugin;
import org.eclipse.cdt.core.builder.model.ICBuildConfig;
import org.eclipse.cdt.core.builder.model.ICBuildConfigManager;
import org.eclipse.cdt.core.builder.model.ICBuildConfigWorkingCopy;
import org.eclipse.cdt.core.resources.MakeUtil;
import org.eclipse.core.internal.runtime.Assert;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
/**
* Shows the build configuration wizard
*/
public class CBuildConfigView extends ViewPart implements IResourceChangeListener {
private TreeViewer viewer;
/**
* Configuration life cycle actions
*/
private Action actionEditConfig;
private Action actionNewConfig;
private Action actionMakePrimary;
private Action actionDeleteConfig;
private Action doubleClickAction;
//private Action actionBuild;
/**
* Message constants
*/
private final String MSG_CANDELETE = "Remove build configuration";
private final String MSG_NODELETE = "Cannot delete primary build configuration";
private final String MSG_MAKEPRIMARY = "Make this build configuration the primary configuration";
private final String MSG_ALREADYPRIMARY = "This build configuration is the primary configuration";
private final String KEY_LASTPROJECT = "LastProject";
/**
* Menu entry for the collection of CBuildConfigurationAction
* objects
*/
class CBuildAction extends Action {
private IProject m_project;
private ICBuildConfig m_config;
public CBuildAction(IProject prj, ICBuildConfig config) {
m_project = prj;
m_config = config;
setText("Build");
setToolTipText("Performing Build");
setImageDescriptor(CBuilderImages.DESC_IMG_ACTION_BUILD_CONFIG);
setMenuCreator(new CTargetsMenuCreator(m_project, m_config));
}
}
class CTargetsMenuCreator implements IMenuCreator {
private IProject m_project;
private ICBuildConfig m_config;
public CTargetsMenuCreator(IProject prj, ICBuildConfig config) {
m_project = prj;
m_config = config;
}
private Menu createContents(Menu targets) {
// walk the list of targets in the project and add them to the target menu
String strTargets[] = MakeUtil.getPersistentTargets(m_project);
for (int nIndex = 0; nIndex < strTargets.length; nIndex++) {
MenuItem newItem = new MenuItem(targets, SWT.NONE);
newItem.setText(strTargets[nIndex]);
newItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent selEvent) {
// cheasy, but good enough for this, the name of the menu is the build target
String strConfig = ((MenuItem) selEvent.getSource()).getText();
// System.out.println("Building configuration " + strConfig + " on project " + m_project.getName() + " using configuration " + m_config.getName());
IRunnableWithProgress builder = new ConfigurationBuilder(m_project, m_config, strConfig);
try {
new ProgressMonitorDialog(getSite().getShell()).run(true, true, builder);
}
catch (InterruptedException e) {}
catch (InvocationTargetException e) {}
}
});
}
return targets;
}
/**
* @see org.eclipse.jface.action.IMenuCreator#dispose()
*/
public void dispose() {
m_project = null;
}
/**
* @see org.eclipse.jface.action.IMenuCreator#getMenu(Control)
*/
public Menu getMenu(Control parent) {
Menu theMenu = new Menu(parent);
return createContents(theMenu);
}
/**
* @see org.eclipse.jface.action.IMenuCreator#getMenu(Menu)
*/
public Menu getMenu(Menu parent) {
Menu theMenu = new Menu(parent);
return createContents(theMenu);
}
}
/**
* this class builds the selected configuration
*/
class ConfigurationBuilder implements IRunnableWithProgress {
private IProject m_prj;
private ICBuildConfig m_config;
private String m_target;
public ConfigurationBuilder(IProject prj, ICBuildConfig bldConfig, String strTarget) {
m_prj = prj;
m_config = bldConfig;
m_target = strTarget;
}
/**
* @see org.eclipse.jface.operation.IRunnableWithProgress#run(IProgressMonitor)
*/
public void run(IProgressMonitor monitor) {
Assert.isNotNull(m_prj, "Project reference cannot be null");
Assert.isNotNull(m_config, "Configuration reference cannot be null");
try {
MakeUtil.setSessionBuildDir(m_prj, m_prj.getLocation().toOSString());
MakeUtil.setSessionTarget(m_prj, m_target);
m_prj.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
}
catch (CoreException e) { }
}
}
/*
* The content provider class is responsible for
* providing objects to the view. It can wrap
* existing objects in adapters or simply return
* objects as-is. These objects may be sensitive
* to the current input of the view, or ignore
* it and always show the same content
* (like Task List, for example).
*/
abstract class TreeObject implements IAdaptable {
private String fName;
private TreeObject fParent;
private ArrayList fChildren;
public TreeObject(String name) {
this(name, null);
}
abstract public void doRefreshChildren();
public TreeObject(String name, TreeObject parent) {
setName(name);
setParent(parent);
fChildren = new ArrayList();
}
public void refreshChildren() {
fChildren.clear();
doRefreshChildren();
for (Iterator iter = fChildren.iterator(); iter.hasNext();) {
TreeObject element = ((TreeObject) iter.next());
element.refreshChildren();
}
}
public void addChild(TreeObject child) {
fChildren.add(child);
child.setParent(this);
}
public void removeChild(TreeObject child) {
fChildren.remove(child);
child.setParent(null);
}
public TreeObject[] getChildren() {
return (TreeObject[]) fChildren.toArray(new TreeObject[fChildren.size()]);
}
public boolean hasChildren() {
return (fChildren.size() > 0);
}
public void setName(String name) {
fName = ((name != null) ? name : "");
}
public void setParent(TreeObject parent) {
fParent = parent;
}
public String getName() {
return fName;
}
public TreeObject getParent() {
return fParent;
}
public Object getAdapter(Class key) {
return null;
}
public Image getImage() {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
public String toString() {
return getName();
}
}
/**
* The tree parent class contains a list of projects
*/
class TreeRoot extends TreeObject {
public TreeRoot() {
super("");
}
/**
* Return a list of all child objects (projects)
* that support the C project nature.
*/
public void doRefreshChildren() {
IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
if (wsRoot != null) {
IProject[] projects = wsRoot.getProjects();
if (projects != null) {
for (int i = 0; i < projects.length; i++) {
try {
if (projects[i].isOpen()) {
if (projects[i].hasNature(CProjectNature.C_NATURE_ID)) {
addChild(new TreeProject(projects[i], this));
}
}
}
catch (CoreException e) {
}
}
}
}
}
public Image getImage() {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
}
}
class TreeProject extends TreeObject {
private IProject fProject;
public TreeProject(IProject project, TreeRoot parent) {
super(project.getName(), parent);
setProject(project);
}
private void setProject(IProject project) {
fProject = project;
}
public IProject getProject() {
return fProject;
}
public void doRefreshChildren() {
try {
ICBuildConfig[] configs = getBuildConfigurationManager().getConfigurations(fProject);
for (int i = 0; i < configs.length; i++) {
addChild(new TreeConfiguration(configs[i]));
}
} catch (CoreException e) {
}
}
public Image getImage() {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
}
}
class TreeConfiguration extends TreeObject {
private ICBuildConfig fConfig;
public TreeConfiguration(ICBuildConfig config) {
super(config.getName());
fConfig = config;
}
public void doRefreshChildren() {
}
public ICBuildConfig getConfiguration() {
return fConfig;
}
public IProject getProject() {
return fConfig.getProject();
}
}
class ViewContentProvider implements IStructuredContentProvider,
ITreeContentProvider {
private TreeRoot invisibleRoot;
public ViewContentProvider() {
invisibleRoot = new TreeRoot();
invisibleRoot.refreshChildren();
}
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
invisibleRoot.refreshChildren();
}
public void dispose() {
}
public Object[] getElements(Object parent) {
if (parent.equals(ResourcesPlugin.getWorkspace())) {
return getChildren(invisibleRoot);
}
return getChildren(parent);
}
public Object getParent(Object child) {
if (child instanceof TreeObject) {
return ((TreeObject) child).getParent();
}
return null;
}
public Object[] getChildren(Object parent) {
if (parent instanceof TreeObject) {
return ((TreeObject) parent).getChildren();
}
return new Object[0];
}
public boolean hasChildren(Object parent) {
if (parent instanceof TreeObject) {
return ((TreeObject) parent).hasChildren();
}
return false;
}
}
class ViewLabelProvider extends LabelProvider {
public String getText(Object obj) {
return obj.toString();
}
public Image getImage(Object obj) {
Image image = null; // this is the image that will represent the obj parameter
// if this is a build configuration, get the image for the build configuration
if (obj instanceof TreeObject) {
image = ((TreeObject) obj).getImage();
} else {
// er, this is a bit odd, means we're not looking at one of our own classes
image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
return image;
}
}
/**
* The constructor.
*/
public CBuildConfigView() {
}
/**
* This is a callback that will allow us
* to create the viewer and initialize it.
*
* @param parent the owner of the control
*/
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new ViewerSorter(){});
viewer.setInput(ResourcesPlugin.getWorkspace());
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
// register the listener for changes to the tree
ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
// Set this button to disable by default since there is no valid selection at this point.
actionEditConfig.setEnabled(false);
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("_#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
CBuildConfigView.this.fillContextMenu(manager);
}
});
Menu menu = menuMgr.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, viewer);
}
private void hookDoubleClickAction() {
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
ISelection selItem = viewer.getSelection();
Object objItem = ((IStructuredSelection) selItem).getFirstElement();
if (objItem.getClass().equals(TreeObject.class)) {
actionEditConfig.run();
}
else {
// be nice and expand or contract the tree when the user double clicks on a node
for (Iterator iter = ((IStructuredSelection) selItem).iterator(); iter.hasNext(); ) {
Object objNode = iter.next();
if (viewer.getExpandedState(objNode)) {
viewer.collapseToLevel(objNode, 1);
}
else {
viewer.expandToLevel(objNode, 1);
}
}
}
}
});
}
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
private void fillLocalPullDown(IMenuManager manager) {
manager.add(actionEditConfig);
manager.add(new Separator());
//manager.add(actionBuild);
}
/**
* this method populates the right-click menu
*/
private void fillContextMenu(IMenuManager manager) {
ISelection selItem = viewer.getSelection();
Object objItem = ((IStructuredSelection)selItem).getFirstElement();
if (objItem instanceof TreeProject) {
manager.add(actionNewConfig);
// manager.add(actionBuild);
} else if (objItem instanceof TreeConfiguration) {
TreeConfiguration treeConf = (TreeConfiguration) objItem;
manager.add(actionEditConfig);
manager.add(actionNewConfig);
CBuildAction build = new CBuildAction(treeConf.getProject(), treeConf.getConfiguration());
build.setImageDescriptor(CBuilderImages.DESC_IMG_ACTION_BUILD_CONFIG);
manager.add(build);
ICBuildConfig item = treeConf.getConfiguration();
if (item != null) {
// TODO: fix this
// actionMakePrimary.setEnabled(!item.getIsPrimary());
actionMakePrimary.setDescription(actionMakePrimary.isEnabled() ? MSG_MAKEPRIMARY : MSG_ALREADYPRIMARY);
actionMakePrimary.setToolTipText(actionMakePrimary.getDescription());
// TODO: fix this
// actionDeleteConfig.setEnabled(!item.getIsPrimary());
actionDeleteConfig.setDescription(actionDeleteConfig.isEnabled() ? MSG_CANDELETE : MSG_NODELETE);
actionDeleteConfig.setToolTipText(actionDeleteConfig.getDescription());
manager.add(actionMakePrimary);
manager.add(actionDeleteConfig);
}
}
// Other plug-ins can contribute there actions here
manager.add(new Separator("Additions"));
}
private void fillLocalToolBar(IToolBarManager manager) {
manager.add(actionEditConfig);
//manager.add(actionBuild);
manager.add(new Separator());
}
private void updateActionEnabled () {
IStructuredSelection sel = (IStructuredSelection)viewer.getSelection();
TreeObject child = (TreeObject) sel.getFirstElement();
boolean enabled = ((sel.size() > 0) && (child instanceof TreeConfiguration));
actionEditConfig.setEnabled(enabled);
//actionBuild.setEnabled(true);
}
private ICBuildConfigManager getBuildConfigurationManager() {
return BuilderPlugin.getDefault().getBuildConfigurationManager();
}
private Shell getShell() {
return viewer.getControl().getShell();
}
private Object getElementFromSelection(ISelection sel) {
Object element = null;
if (sel instanceof IStructuredSelection) {
element = ((IStructuredSelection) sel).getFirstElement();
}
return element;
}
private void makeActions() {
//////////////////////////////////////////////
// Action: EDIT
//////////////////////////////////////////////
actionEditConfig = new Action() {
public void run() {
Object element = getElementFromSelection(viewer.getSelection());
if ((element != null) && (element instanceof TreeConfiguration)) {
TreeConfiguration treeConf = (TreeConfiguration) element;
CBuildConfigDialog dlg = null;
dlg = new CBuildConfigDialog(getShell(), treeConf.getConfiguration());
if (dlg.open() == dlg.OK) {
viewer.refresh();
}
}
}
};
actionEditConfig.setText("Edit...");
actionEditConfig.setToolTipText("Edit Configuration");
actionEditConfig.setImageDescriptor(CBuilderImages.DESC_IMG_ACTION_EDIT_CONFIG);
//////////////////////////////////////////////
// Action: BUILD
//////////////////////////////////////////////
// actionBuild = new Action() {
// public void run() {
// IStructuredSelection selList = (IStructuredSelection) viewer.getSelection();
// for (Iterator iter = selList.iterator(); iter.hasNext();) {
// Object selItem = (Object) iter.next();
// if (selItem instanceof TreeObject) {
// TreeObject selConfig = (TreeObject) selItem;
// IRunnableWithProgress builder = new CBuildConfig(selConfig.getAssocProject(), selConfig.getBuildConfig());
// try {
// new ProgressMonitorDialog(getSite().getShell()).run(true, true, builder);
// }
// catch (InterruptedException e) {}
// catch (InvocationTargetException e) {}
// }
// }
// }
// };
//
// actionBuild.setText("Build");
// actionBuild.setToolTipText("Performing Build");
// actionBuild.setImageDescriptor(CBuilderImages.DESC_IMG_ACTION_BUILD_CONFIG);
//
// doubleClickAction = new Action() {
// public void run() {
// ISelection selection = viewer.getSelection();
// Object obj = ((IStructuredSelection)selection).getFirstElement();
// showMessage("Try to perform a build here" + obj.toString());
// }
// };
//////////////////////////////////////////////
// Action: NEW
//////////////////////////////////////////////
actionNewConfig = new Action() {
public void run() {
Object element = getElementFromSelection(viewer.getSelection());
if ((element != null) && (element instanceof TreeProject)) {
TreeProject treeProject = (TreeProject) element;
ICBuildConfigWorkingCopy cfg = null;
CBuildConfigDialog dlg = null;
cfg = getBuildConfigurationManager().getConfiguration(treeProject.getProject(), null);
dlg = new CBuildConfigDialog(getShell(), cfg);
if (dlg.open() == dlg.OK) {
viewer.refresh();
}
}
}
};
actionNewConfig.setText("New...");
actionNewConfig.setToolTipText("Add new configuration");
actionNewConfig.setImageDescriptor(CBuilderImages.DESC_IMG_ACTION_NEW_CONFIG);
//////////////////////////////////////////////
// Action: MAKE PRIMARY
//////////////////////////////////////////////
actionMakePrimary = new Action() {
public void run() {
Object element = getElementFromSelection(viewer.getSelection());
if ((element != null) && (element instanceof TreeConfiguration)) {
TreeConfiguration treeConfig = (TreeConfiguration) element;
// TODO: Use getBuildConfigurationManager(),
// treeConfig.getBuildConfig() to set primary config
viewer.refresh();
}
}
};
actionMakePrimary.setText("Make Primary");
actionMakePrimary.setToolTipText("Make this the primary configuration");
// actionMakePrimary.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
// getImageDescriptor(ISharedImages.IMG_OBJS_TASK_TSK));
//////////////////////////////////////////////
// Action: DELETE
//////////////////////////////////////////////
actionDeleteConfig = new Action() {
public void run() {
Object element = getElementFromSelection(viewer.getSelection());
if ((element != null) && (element instanceof TreeConfiguration)) {
TreeConfiguration treeConfig = (TreeConfiguration) element;
if (MessageDialog.openConfirm(getShell(), "Removing build configuration", "Are you sure you want to remove this build configuration?")) {
viewer.refresh();
}
}
}
};
actionDeleteConfig.setText("Remove");
actionDeleteConfig.setToolTipText("Remove this configuration");
actionMakePrimary.setImageDescriptor(CBuilderImages.DESC_IMG_ACTION_DELETE_CONFIG);
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged (SelectionChangedEvent event) {
updateActionEnabled();
}
});
}
private void showMessage(String message) {
MessageDialog.openInformation(getShell(), "Build Configuration", message);
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
/**
* clean-up
*/
public void dispose()
{
// remove from the workspace our listener
//getViewSite().getPage().removePostSelectionListener(this);
ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
}
/**
* given a project, updates the view with the contents of
* the build configuration for that project
*
* @param prjTarget the new project that this view should adjust to
*/
private void updateView(IProject prjTarget)
{
Assert.isNotNull(prjTarget);
}
class CResourceDeltaVisitor implements IResourceDeltaVisitor {
private boolean bRefreshView = false;
public boolean visit(IResourceDelta delta) {
IResource resource = delta.getResource();
boolean bVisitChildren = true;
int nKind;
if (resource instanceof IProject) {
nKind = delta.getKind();
if (nKind == IResourceDelta.OPEN || nKind == IResourceDelta.ADDED || nKind == IResourceDelta.REMOVED || nKind == IResourceDelta.CHANGED) {
bRefreshView = true;
}
// don't recurse past the project level
bVisitChildren = false;
}
return bVisitChildren;
}
public boolean getRefreshView() {
return bRefreshView;
}
}
/**
* @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(IResourceChangeEvent)
*/
public void resourceChanged(IResourceChangeEvent event) {
CResourceDeltaVisitor changeVisitor = new CResourceDeltaVisitor();
try {
event.getDelta().accept(changeVisitor);
}
catch (CoreException e) {
System.err.println(e.toString());
}
// refresh the view so the user can see the changes.
if (changeVisitor.getRefreshView()) {
this.refresh();
}
}
/**
* Wrapper for users of this object to force a view refresh
*/
public void refresh() {
Display.getDefault().syncExec(new Runnable()
{
public void run() {
viewer.refresh();
}
}
);
}
}

View file

@ -1,297 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import java.io.File;
import java.io.FileFilter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.cdt.core.builder.BuilderPlugin;
import org.eclipse.cdt.core.builder.ICBuildVariablePoint;
import org.eclipse.cdt.core.builder.model.CBuildVariable;
import org.eclipse.cdt.core.builder.model.ICBuildVariable;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
/**
* @author gene.sally
*
* This class displays the selection tool for library paths or libraries
*
*/
public class CBuildVariableDialog extends Dialog {
private static final int DLG_WIDTH = 60; // for setting the height and width of the dialog
private static final int DLG_HEIGHT = 25;
private Combo fBrowseHow; // combo control
private TreeViewer fTree; // tree view control
private String fTitle; // title for dialog
private Map fBuildVariables;
private ICBuildVariable fSelection;
private class CNoFiles implements FileFilter {
public boolean accept(File file) {
return (file.isDirectory() && !file.getName().equals(".metadata"));
}
}
private class FileLabelProvider extends LabelProvider {
private final Image IMG_FOLDER= PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
private final Image IMG_FILE= PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
public Image getImage(Object element) {
if (element instanceof File) {
File curr= (File) element;
if (curr.isDirectory()) {
return IMG_FOLDER;
} else {
return IMG_FILE;
}
}
return null;
}
public String getText(Object element) {
if (element instanceof File) {
return ((File) element).getName();
}
return super.getText(element);
}
}
private class FileContentProvider implements ITreeContentProvider {
private final Object[] EMPTY= new Object[0];
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof File) {
File[] children = ((File) parentElement).listFiles(new CNoFiles());
if (children != null) {
return children;
}
}
return EMPTY;
}
public Object getParent(Object element) {
if (element instanceof File) {
return ((File) element).getParentFile();
}
return null;
}
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
public Object[] getElements(Object element) {
return getChildren(element);
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
private class CDoubleClickInTree implements IDoubleClickListener {
public void doubleClick(DoubleClickEvent event) {
ISelection selection;
selection = fTree.getSelection();
if (selection != null) {
updateSelection();
getButton(OK).notifyListeners(SWT.Selection, new Event());
}
}
}
public CBuildVariableDialog(Shell parentShell, String title) {
super(parentShell);
fTitle = title;
fBuildVariables = getBuildVariables();
}
public ICBuildVariable getSelection() {
return fSelection;
}
protected Control createContents(Composite parent) {
super.createContents(parent);
Composite composite = (Composite) getDialogArea();
GridLayout layout = new GridLayout();
layout.marginHeight = 5;
layout.marginWidth = 5;
layout.numColumns = 2;
layout.makeColumnsEqualWidth = false;
composite.setLayout(layout);
// row 1
new Label(composite, SWT.NULL).setText(("Starting_Point_1")); //$NON-NLS-1$
fBrowseHow = new Combo(composite, SWT.LEFT | SWT.BORDER | SWT.READ_ONLY);
fBrowseHow.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
for (Iterator iter = fBuildVariables.entrySet().iterator(); iter.hasNext();) {
Map.Entry element = (Map.Entry) iter.next();
String value = element.getValue().toString();
fBrowseHow.add(value);
}
fBrowseHow.setData(fBuildVariables);
fBrowseHow.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent sel) {
String strSelection = fBrowseHow.getText();
if (strSelection != null && fTree != null) {
IPath path = expandBuildVar(strSelection);
if (path != null) {
fTree.setInput(path.toFile());
CBuildVariableDialog.this.getButton(IDialogConstants.OK_ID).setEnabled(fTree.getTree().getItemCount() != 0);
}
}
}
}
);
fBrowseHow.select(0);
// row 2
fTree = new TreeViewer(composite, SWT.LEFT | SWT.BORDER | SWT.READ_ONLY);
GridData gdTree = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_BOTH);
gdTree.horizontalSpan = 2;
gdTree.widthHint= convertWidthInCharsToPixels(DLG_WIDTH);
gdTree.heightHint= convertHeightInCharsToPixels(DLG_HEIGHT);
fTree.getControl().setLayoutData(gdTree);
fTree.setLabelProvider(new FileLabelProvider());
fTree.setSorter(new ViewerSorter() {});
fTree.setContentProvider(new FileContentProvider());
fTree.setInput(expandBuildVar((String) fBuildVariables.keySet().iterator().next()));
fTree.addDoubleClickListener(new CDoubleClickInTree());
return composite;
}
/**
* Method expandBuildVar.
* @param string
*/
private IPath expandBuildVar(String name) {
ICBuildVariable bv = (ICBuildVariable) fBuildVariables.get(name);
return new Path((null != bv) ? bv.getValue() : "");
}
/**
* Method getBuildVariables.
* @return Map
*/
private Map getBuildVariables() {
Map vars = new HashMap();
try {
Map providers = BuilderPlugin.getDefault().getBuildVariableProviders();
for (Iterator iter = providers.entrySet().iterator(); iter.hasNext();) {
ICBuildVariablePoint expt = (ICBuildVariablePoint) iter.next();
ICBuildVariable[] bv = expt.getProvider().getVariables();
for (int i = 0; i < bv.length; i++) {
vars.put(bv[i].getFixed(), bv[i]);
}
}
} catch (CoreException e) {
vars.clear();
}
return vars;
}
/**
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
protected void okPressed() {
updateSelection();
super.okPressed();
}
/**
* @see org.eclipse.jface.window.Window#configureShell(Shell)
*/
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(fTitle);
}
private void updateSelection() {
ISelection selection; // the current selection
// store the result of the user selection
selection = fTree.getSelection();
if (selection != null) {
File selectedPath = (File) ((StructuredSelection) selection).getFirstElement();
if (selectedPath != null) {
String strCurrRoot = fBrowseHow.getText();
IPath selPath = new Path(selectedPath.getAbsolutePath());
ICBuildVariable bv = (ICBuildVariable) fBuildVariables.get(strCurrRoot);
IPath currPath = new Path((null != bv) ? bv.getValue() : "");
int nMatchCount = currPath.matchingFirstSegments(selPath);
IPath delta = selPath.removeFirstSegments(nMatchCount);
delta = delta.setDevice(null);
fSelection = new CBuildVariable(delta.toString(), bv);
}
}
}
}

View file

@ -1,149 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
/**
* @author gene.sally
*
* Container for C Builder images. Defines constants to the images in the project
* and creates the image descriptor objects for these files so we can have nice
* cached image management the way Eclipse intended.
*
* To add an image:
* 1) Place it in the icons/all folder in this project.
* 2) Create a IMG_* constant for it's name along.
* 3) Create a DESC_IMG_* constant for the image.
*/
public class CBuilderImages {
// NO I18N on these strings!!!
private static final String NAME_PREFIX = "org.eclipse.cdt.ui.builder."; //$NON-NLS-1$
private static final int NAME_PREFIX_LENGTH = NAME_PREFIX.length();
private static URL m_IconFolder = null;
private static ImageRegistry m_ImageRegistry = null;
/**
* the icon folder won't change and the other static
* methods/constants need this, so init as a static
*/
static
{
try {
m_IconFolder = new URL( CUIPlugin.getDefault().getDescriptor().getInstallURL(), "icons/"); //$NON-NLS-1$
} catch( MalformedURLException e ) {
/* do nothing right now, but we should be doing something */
}
}
// the following lists all of the images in the system,
// the constants will be expanded to something on the filesystem when converted into
// image descroptors that are later turned into real Image Objects when needed.
public final static String IMG_CONFIG_COMPILER = NAME_PREFIX + "config-compiler.gif"; //$NON-NLS-1$
public final static String IMG_CONFIG_LINKER = NAME_PREFIX + "config-linker.gif"; //$NON-NLS-1$
public final static String IMG_CONFIG_PREPOCESSOR = NAME_PREFIX + "config-preprocessor.gif"; //$NON-NLS-1$
public final static String IMG_CONFIG_DEBUG = NAME_PREFIX + "config-debug.gif"; //$NON-NLS-1$
public final static String IMG_CONFIG_PROFILE = NAME_PREFIX + "config-profile.gif"; //$NON-NLS-1$
public final static String IMG_CONFIG_RELEASE = NAME_PREFIX + "config-release.gif"; //$NON-NLS-1$
public final static String IMG_ACTION_NEW_CONFIG = NAME_PREFIX + "action-newconfig.gif"; //$NON-NLS-1$
public final static String IMG_ACTION_EDIT_CONFIG = NAME_PREFIX + "action-editconfig.gif"; //$NON-NLS-1$
public final static String IMG_ACTION_BUILD_CONFIG = NAME_PREFIX + "action-buildconfig.gif"; //$NON-NLS-1$
public final static String IMG_ACTION_DELETE_CONFIG = NAME_PREFIX + "action-deleteconfig.gif"; //$NON-NLS-1$
// image prefix. for our purposes, slam all fo these into the same folder
// but leave the opporiunity for us to create sub-folders if necessary
public final static String PREFIX_ALL = "full/build16"; //$NON-NLS-1$
// create the image descriptors from the above constants
public final static ImageDescriptor DESC_IMG_CONFIG_COMPILER = getImageDescriptor(PREFIX_ALL, IMG_CONFIG_COMPILER);
public final static ImageDescriptor DESC_IMG_CONFIG_LINKER = getImageDescriptor(PREFIX_ALL, IMG_CONFIG_LINKER);
public final static ImageDescriptor DESC_IMG_CONFIG_PREPOCESSOR = getImageDescriptor(PREFIX_ALL, IMG_CONFIG_PREPOCESSOR);
public final static ImageDescriptor DESC_IMG_CONFIG_DEBUG = getImageDescriptor(PREFIX_ALL, IMG_CONFIG_DEBUG);
public final static ImageDescriptor DESC_IMG_CONFIG_PROFILE = getImageDescriptor(PREFIX_ALL, IMG_CONFIG_PROFILE);
public final static ImageDescriptor DESC_IMG_CONFIG_RELEASE = getImageDescriptor(PREFIX_ALL, IMG_CONFIG_RELEASE);
public final static ImageDescriptor DESC_IMG_ACTION_NEW_CONFIG = getImageDescriptor(PREFIX_ALL, IMG_ACTION_NEW_CONFIG);
public final static ImageDescriptor DESC_IMG_ACTION_EDIT_CONFIG = getImageDescriptor(PREFIX_ALL, IMG_ACTION_EDIT_CONFIG);
public final static ImageDescriptor DESC_IMG_ACTION_BUILD_CONFIG = getImageDescriptor(PREFIX_ALL, IMG_ACTION_BUILD_CONFIG);
public final static ImageDescriptor DESC_IMG_ACTION_DELETE_CONFIG = getImageDescriptor(PREFIX_ALL, IMG_ACTION_DELETE_CONFIG);
private static ImageRegistry getImageRegistry() {
if (null == m_ImageRegistry) {
Display display = (Display.getCurrent() != null) ? Display.getCurrent() : Display.getDefault();
m_ImageRegistry = new ImageRegistry(display);
}
return m_ImageRegistry;
}
/**
* Returns the image object from the image cache matching the requested name
*
* @param strImageIdent the identifier of the inmage, see one of the static IMG_ decls in this calss
* @return the image for this item, null if the image was not found
*
*/
public static Image getImage(String strImageIdent) {
return getImageRegistry().get(strImageIdent);
}
/**
* Gets the location of an image based on it's location on the file system,
*
* @param strPrefix the folder under the icon folder where this file resides
* @param strName name of the image file
*
* @return the URL to the image requested.
*/
private static URL getFilesystemName(String strPrefix, String strName) throws MalformedURLException {
if (m_IconFolder == null) {
throw new MalformedURLException();
}
StringBuffer buffer = new StringBuffer(strPrefix);
buffer.append('/');
buffer.append(strName);
return new URL(m_IconFolder, buffer.toString());
}
/**
* Creates an image descriptor for the requrested image
*
* @param strPrefix the folder under the icon folder where this file resides
* @param strName name of the image file
*
* @return the requested image descriptor, or image not found if the image could not be located on the file system.
*/
private static ImageDescriptor getImageDescriptor(String strPrefix, String strName) {
ImageDescriptor descriptor = null;
try {
descriptor = ImageDescriptor.createFromURL(getFilesystemName(strPrefix, strName.substring(NAME_PREFIX_LENGTH)));
getImageRegistry().put(strName, descriptor);
}
catch(MalformedURLException e) {
descriptor = ImageDescriptor.getMissingImageDescriptor();
}
return descriptor;
}
}

View file

@ -1,421 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import java.io.File;
import java.io.FileFilter;
import java.util.HashMap;
import org.eclipse.cdt.core.builder.model.ICBuildVariable;
import org.eclipse.cdt.core.builder.model.ICToolchain;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
/**
* @author gene.sally
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class CLibFileDialog extends Dialog {
private static final int DLG_WIDTH = 60;
private static final int DLG_HEIGHT = 25;
private ICBuildVariable[] fLibPaths; // the list of library paths used to populate the drop down
private ICToolchain fToolchain; // selected toolchain
private TreeViewer fFileTree; // tree control that's displayed
private File fSelection; // what the user selected in the dialog
private List fLibNames;
private class CItemSelectedIsLibrary implements ISelectionChangedListener {
/**
* @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(SelectionChangedEvent)
*/
public void selectionChanged(SelectionChangedEvent event) {
// only enable the OK button when the user is resting on a file
Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
getButton(OK).setEnabled(selection instanceof File);
}
}
private class CDoubleClickInTree implements IDoubleClickListener {
public void doubleClick(DoubleClickEvent event) {
// make sure that the user has double-clicked on a file before accepting this as the
// selection
Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
if (selection instanceof File) {
getButton(OK).notifyListeners(SWT.Selection, new Event());
}
}
}
private class FileLabelProvider extends LabelProvider {
private final Image IMG_FOLDER= PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
private final Image IMG_FILE= PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
public Image getImage(Object element) {
if (element instanceof File) {
if (((File) element).isFile()) {
return IMG_FILE;
}
}
else if (element instanceof TreeLibPathObject) {
return IMG_FOLDER;
}
return null;
}
public String getText(Object element) {
if (element instanceof File) {
return ((File) element).getName();
} else if (element instanceof TreeLibPathObject) {
return ((TreeLibPathObject) element).toString();
}
return super.getText(element);
}
}
private class CNoDirectories implements FileFilter {
/**
* @see java.io.FileFilter#accept(File)
*/
public boolean accept(File pathname) {
boolean isLibFile = false;
if (pathname.isFile()) {
String name = pathname.getName();
if ((name.endsWith(".lib")) || (name.endsWith(".a")) || (name.indexOf(".so") != -1)) {
isLibFile = true;
}
}
return (isLibFile);
}
}
private class TreeLibPathObject implements IAdaptable {
private ICBuildVariable m_location; // the location this object represents
private File m_fileSystem; // the representation of this object on the file system
private TreeParent m_parent; // parent of this object
public TreeLibPathObject(ICBuildVariable location, ICToolchain toolchain) {
if (location != null) {
m_location = location;
m_fileSystem = new File(location.getValue());
}
}
public File[] getChildren() {
// get the files in the file system matching this item
File[] children = m_fileSystem.listFiles(new CNoDirectories());
return children;
}
public boolean hasChildren() {
// ug, not the best for performance, consider caching
return getChildren().length != 0;
}
public Object getAdapter(Class key) {
return null;
}
public ICBuildVariable getBuildVar() {
return m_location;
}
public String toString() {
return m_location.toString();
}
public TreeParent getParent() {
return m_parent;
}
public void setParent(TreeParent parent) {
m_parent = parent;
}
}
private class TreeParent {
private HashMap m_children;
public TreeParent() {
m_children = new HashMap();
}
public void addChild(TreeLibPathObject child) {
m_children.put(child.m_fileSystem.getAbsolutePath(), child);
child.setParent(this);
}
public void removeChild(TreeLibPathObject child) {
m_children.remove(child.m_fileSystem.getAbsolutePath());
child.setParent(null);
}
public TreeLibPathObject[] getChildren() {
int nArraySize = m_children.entrySet().size();
TreeLibPathObject[] retval = (TreeLibPathObject[]) m_children.values().toArray(new TreeLibPathObject[nArraySize]);
return retval;
}
public boolean hasChildren() {
return m_children.entrySet().size() > 0;
}
public TreeLibPathObject matchingParent(File test) {
String parentPath = test.getParent();
if (m_children.keySet().contains(parentPath)) {
return (TreeLibPathObject) m_children.get(parentPath);
}
return null;
}
}
class ViewContentProvider implements IStructuredContentProvider,
ITreeContentProvider {
private TreeParent invisibleRoot;
public void inputChanged(Viewer v, Object oldInput, Object newInput) {}
public void dispose() {}
public Object[] getElements(Object parent) {
if (parent.equals(ResourcesPlugin.getWorkspace())) {
// if (parent instanceof TreeRoot) {
if (invisibleRoot == null) {
initialize();
}
return getChildren(invisibleRoot);
}
return getChildren(parent);
}
public Object getParent(Object child) {
// this is where things are going to get icky.
// when the child is a file type, inspect the path and see if
// it matches any of the parents in the list
if (child instanceof File) {
File currfile = (File) child;
return invisibleRoot.matchingParent(currfile);
}
else if (child instanceof TreeLibPathObject) {
return ((TreeLibPathObject) child).getParent();
}
return null;
}
public Object [] getChildren(Object parent) {
// the root of the tree
if (parent instanceof TreeParent) {
return ((TreeParent) parent).getChildren();
// the first level
} else if (parent instanceof TreeLibPathObject) {
return ((TreeLibPathObject) parent).getChildren();
}
// since we're not showing anything past the first level,
// just return an empty array
return new Object[0];
}
public boolean hasChildren(Object parent) {
// the root of the tree
if (parent instanceof TreeParent) {
return ((TreeParent) parent).hasChildren();
// the first level
} else if (parent instanceof TreeLibPathObject) {
return ((TreeLibPathObject) parent).hasChildren();
}
// since we're not showing anything past the first level,
// just return an empty array
return false;
}
private void initialize() {
invisibleRoot = new TreeParent();
// read from the parent's list of items
for (int nIndex = 0; nIndex < fLibPaths.length; nIndex++) {
invisibleRoot.addChild(new TreeLibPathObject(fLibPaths[nIndex], fToolchain));
}
}
}
// methods for CLibFileDialog
public CLibFileDialog(Shell shell, ICToolchain toolchain, ICBuildVariable[] libPaths) {
super(shell);
fLibPaths = libPaths;
fToolchain = toolchain;
fLibNames = new List (shell, shell.getStyle());
}
// methods for CLibFileDialog
public CLibFileDialog(Shell shell, ICToolchain toolchain, ICBuildVariable[] libPaths, List libList) {
super(shell);
fLibPaths = libPaths;
fToolchain = toolchain;
fLibNames = libList;
}
protected Control createContents(Composite parent) {
super.createContents(parent);
Composite composite = (Composite) getDialogArea();
GridLayout layout = new GridLayout();
layout.marginHeight = 5;
layout.marginWidth = 5;
layout.numColumns = 1;
composite.setLayout(layout);
// row 1
fFileTree = new TreeViewer(composite, SWT.LEFT | SWT.BORDER | SWT.READ_ONLY);
GridData gdTree = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_BOTH);
gdTree.widthHint= convertWidthInCharsToPixels(DLG_WIDTH);
gdTree.heightHint= convertHeightInCharsToPixels(DLG_HEIGHT);
fFileTree.getControl().setLayoutData(gdTree);
fFileTree.setLabelProvider(new FileLabelProvider());
fFileTree.setSorter(new ViewerSorter() {});
fFileTree.setContentProvider(new ViewContentProvider());
fFileTree.setInput(ResourcesPlugin.getWorkspace());
fFileTree.addSelectionChangedListener(new CItemSelectedIsLibrary());
fFileTree.addDoubleClickListener(new CDoubleClickInTree());
return composite;
}
/**
* @see org.eclipse.jface.window.Window#configureShell(Shell)
*/
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(("Select_Library_1")); //$NON-NLS-1$
}
/**
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
protected void okPressed() {
ISelection selection; // the current selection
selection = fFileTree.getSelection();
if (selection != null) {
fSelection = (File) ((StructuredSelection) selection).getFirstElement();
}
// Let's check if this name exists or not.
if (fLibNames.getItemCount() > 0) {
boolean exists = checkExistance();
if (exists) {
return;
}
}
super.okPressed();
}
public File getSelection() {
return fSelection;
}
private boolean checkExistance () {
String[] existingItems = fLibNames.getItems();
for (int i = 0; i < existingItems.length; i++) {
if (existingItems[i].toString().equals(getSelection().getName())) {
String errorMsg = "This Identifier already exists in the Preprocessor definitions for this project";
MessageDialog.openError(this.getShell(), "Naming problems", errorMsg);
return true;
}
}
return false;
}
}

View file

@ -1,275 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import org.eclipse.cdt.core.builder.util.CUtil;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* @author sam.robb
*
* Simple dialog for creating/editing name-value pairs.
*/
public class CNameValueDialog extends Dialog {
/**
* Dialog title.
*/
String fTitle = "Variable";
/**
* Description of property name (ex, "Definition")
*/
String fNameLabel = "Name";
/**
* Description of property value (ex, "Value")
*/
String fValueLabel = "Value";
/**
* Property name.
*/
String fName = "";
/**
* Property value.
*/
String fValue = "";
/**
* Internal list to keep track of existing macro names.
*/
private List reservedNames;
private Button btnOK = null;
private Button btnCancel = null;
private Text textName = null;
private Text textValue = null;
/**
* Constructor for CEntryDialog.
*
* @param parent
*/
public CNameValueDialog(Shell parent) {
super(parent);
reservedNames = new List (parent, parent.getStyle());
}
/**
* Second Constructor
* @param Shell parent, List list
*/
public CNameValueDialog (Shell parent, List list) {
super (parent);
reservedNames = list;
}
/**
* Set the title for the dialog.
*
* @param title Title to use for the dialog.
*/
public void setTitle(String title) {
fTitle = title;
}
/**
* Set the label for the "Name" edit field in the dialog
*
* @param nameLabel Label to use for the "Name" edit field.
*/
public void setNameLabel(String nameLabel) {
fNameLabel = nameLabel;
}
/**
* Set the label for the "Value" edit field in the dialog
*
* @param valueLabel Label to use for the "Value" edit field.
*/
public void setValueLabel(String valueLabel) {
fValueLabel = valueLabel;
}
/**
* Set the inital contents of the "Name" edit field in the dialog
*
* @param name Initial value for the "Name" edit field.
*/
public void setName(String name) {
fName = name;
}
/**
* Set the inital contents of the "Value" edit field in the dialog
*
* @param value Initial value for the "Value" edit field.
*/
public void setValue(String value) {
fValue = value;
}
/**
* Returns the contents of the "Name" edit field in the dialog.
*
* @return Property name.
*/
public String getName() {
return fName;
}
/**
* Returns the contents of the "Value" edit field in the dialog.
*
* @return Property value.
*/
public String getValue() {
return fValue;
}
protected Control createContents(Composite parent) {
Control result = super.createContents(parent);
updateButtonsState();
return result;
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(fTitle);
}
protected Control createDialogArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 5;
layout.numColumns = 2;
composite.setLayout(layout);
GC gc = new GC(composite);
gc.setFont(composite.getFont());
FontMetrics metrics = gc.getFontMetrics();
gc.dispose();
int fieldWidthHint = convertWidthInCharsToPixels(metrics, 50);
GridData gd = null;
Label label = null;
label = new Label(composite, SWT.NONE);
label.setText(fNameLabel + ":");
textName = new Text(composite, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_BOTH);
gd.grabExcessHorizontalSpace = true;
gd.widthHint = fieldWidthHint;
textName.setLayoutData(gd);
label = new Label(composite, SWT.NONE);
label.setText(fValueLabel + ":");
textValue = new Text(composite, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_BOTH);
gd.grabExcessHorizontalSpace = true;
gd.widthHint = fieldWidthHint;
textValue.setLayoutData(gd);
textName.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateButtonsState();
}
});
textValue.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateButtonsState();
}
});
textName.setText(fName);
textValue.setText(fValue);
return composite;
}
protected void createButtonsForButtonBar(Composite parent) {
btnOK = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
btnCancel = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
private void updateButtonsState() {
if (btnOK != null) {
btnOK.setEnabled(textName.getText().trim().length() > 0);
}
}
protected void okPressed() {
fName = textName.getText().trim();
fValue = textValue.getText().trim();
textValue.setText(fValue);
// Let's first check if this name already exists or not.
if (reservedNames.getItemCount() > 0) {
boolean exists = checkExistance();
if (exists) {
return;
}
}
// Validate the user input here.
boolean isValid = CUtil.isValidCIdentifier(fName);
if (!isValid) {
String errorMsg = fName + " is not a valid identifier name.";
MessageDialog.openError(this.getShell(), "Problem with Identifier name", errorMsg);
return;
}
setReturnCode(OK);
close();
}
private boolean checkExistance () {
String[] existingItems = reservedNames.getItems();
for (int i = 0; i < existingItems.length; i++) {
if (existingItems[i].toString().equals(fName)) {
String errorMsg = "This Identifier already exists in the Preprocessor definitions for this project";
MessageDialog.openError(this.getShell(), "Naming problems", errorMsg);
return true;
}
}
return false;
}
}

View file

@ -1,57 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Timesys Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Timesys - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.ui.builder.internal;
import org.eclipse.cdt.core.builder.internal.ACExtensionPoint;
import org.eclipse.cdt.ui.builder.ICToolTabGroup;
import org.eclipse.cdt.ui.builder.ICToolTabGroupPoint;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* @author sam.robb
*/
public class CToolTabGroupPoint
extends ACExtensionPoint
implements ICToolTabGroupPoint {
/**
* Constructor.
*
* @param element configuration element for the build configuration provider.
*/
public CToolTabGroupPoint(IConfigurationElement element) {
super(element);
}
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroupPoint#getId()
*/
public String getId() {
return getField(FIELD_ID);
}
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroupPoint#getProviderClassName()
*/
public String getProviderClassName() {
return getField(FIELD_CLASS);
}
/**
* @see org.eclipse.cdt.ui.builder.ICToolTabGroupPoint#getProvider()
*/
public ICToolTabGroup getProvider() throws CoreException {
return (ICToolTabGroup) getClassInstance(FIELD_CLASS);
}
}