1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 09:46:02 +02:00

External code commit from Leo Treggiari from Intel that adds support for adding and removing error psarser on a managed build project

This commit is contained in:
Sean Evoy 2004-04-22 18:04:54 +00:00
parent 1a5788e0dc
commit b66bb2d4b7
8 changed files with 173 additions and 6 deletions

View file

@ -465,6 +465,13 @@ Additional special types exist to flag options of special relevance to the build
</documentation> </documentation>
</annotation> </annotation>
</attribute> </attribute>
<attribute name="errorParsers" type="string">
<annotation>
<documentation>
Specifies the default list of error parsers to be used by projects created from this target. It is an ordered, semi-colon separated list of parser IDs. The order specifies the order in which the error parsers are invoked during a build.
</documentation>
</annotation>
</attribute>
</complexType> </complexType>
</element> </element>

View file

@ -238,4 +238,20 @@ public interface IManagedBuildInfo {
* @param target * @param target
*/ */
public void setDefaultTarget(ITarget target); public void setDefaultTarget(ITarget target);
/**
* Set the currently selected target. This is used while the project
* property pages are displayed
*
* @param target
*/
public void setSelectedTarget(ITarget target);
/**
* Get the currently selected target. This is used while the project
* property pages are displayed
*
* @return target
*/
public ITarget getSelectedTarget();
} }

View file

@ -20,6 +20,7 @@ public interface ITarget extends IBuildObject {
public static final String TARGET_ELEMENT_NAME = "target"; //$NON-NLS-1$ public static final String TARGET_ELEMENT_NAME = "target"; //$NON-NLS-1$
public static final String ARTIFACT_NAME = "artifactName"; //$NON-NLS-1$ public static final String ARTIFACT_NAME = "artifactName"; //$NON-NLS-1$
public static final String BINARY_PARSER = "binaryParser"; //$NON-NLS-1$ public static final String BINARY_PARSER = "binaryParser"; //$NON-NLS-1$
public static final String ERROR_PARSERS = "errorParsers"; //$NON-NLS-1$
public static final String CLEAN_COMMAND = "cleanCommand"; //$NON-NLS-1$ public static final String CLEAN_COMMAND = "cleanCommand"; //$NON-NLS-1$
public static final String DEFAULT_EXTENSION = "defaultExtension"; //$NON-NLS-1$ public static final String DEFAULT_EXTENSION = "defaultExtension"; //$NON-NLS-1$
public static final String EXTENSION = "extension"; //$NON-NLS-1$ public static final String EXTENSION = "extension"; //$NON-NLS-1$
@ -78,6 +79,20 @@ public interface ITarget extends IBuildObject {
*/ */
public String getBinaryParserId(); public String getBinaryParserId();
/**
* Answers the semicolon separated list of unique IDs of the error parsers associated with the target.
*
* @return String
*/
public String getErrorParserIds();
/**
* Answers the ordered list of unique IDs of the error parsers associated with the target.
*
* @return String[]
*/
public String[] getErrorParserList();
/** /**
* Answers the OS-specific command to remove files created by the build * Answers the OS-specific command to remove files created by the build
* *
@ -239,6 +254,14 @@ public interface ITarget extends IBuildObject {
*/ */
public void setMakeCommand(String command); public void setMakeCommand(String command);
/**
* Sets the semicolon separated list of error parser ids
*
* @param ids
*/
public void setErrorParserIds(String ids);
/** /**
* Sets the resource that owns the receiver. * Sets the resource that owns the receiver.
* *

View file

@ -218,6 +218,43 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
} }
} }
/**
* Sets the currently selected target. This is used while the project
* property pages are displayed
*
* @param project
* @param target
*/
public static void setSelectedTarget(IProject project, ITarget target) {
if (project == null || target == null) {
return;
}
// Set the default in build information for the project
IManagedBuildInfo info = getBuildInfo(project);
if (info != null) {
info.setSelectedTarget(target);
}
}
/**
* Gets the currently selected target. This is used while the project
* property pages are displayed
*
* @param project
* @return target
*/
public static ITarget getSelectedTarget(IProject project) {
if (project == null) {
return null;
}
// Set the default in build information for the project
IManagedBuildInfo info = getBuildInfo(project);
if (info != null) {
return info.getSelectedTarget();
}
return null;
}
/* (non-Javadoc) /* (non-Javadoc)
* *
* @param config * @param config

View file

@ -390,8 +390,9 @@ public class GeneratedMakefileBuilder extends ACBuilder {
env = (String[]) envList.toArray(new String[envList.size()]); env = (String[]) envList.toArray(new String[envList.size()]);
} }
// Hook up an error parser // Hook up an error parser manager
ErrorParserManager epm = new ErrorParserManager(this); String[] errorParsers = info.getDefaultTarget().getErrorParserList();
ErrorParserManager epm = new ErrorParserManager(getProject(), this, errorParsers);
epm.setOutputStream(consoleOutStream); epm.setOutputStream(consoleOutStream);
OutputStream stdout = epm.getOutputStream(); OutputStream stdout = epm.getOutputStream();
OutputStream stderr = epm.getOutputStream(); OutputStream stderr = epm.getOutputStream();

View file

@ -49,6 +49,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
private Map defaultConfigMap; private Map defaultConfigMap;
private ITarget defaultTarget; private ITarget defaultTarget;
private String defaultTargetId; private String defaultTargetId;
private ITarget selectedTarget;
private boolean isDirty; private boolean isDirty;
private IResource owner; private IResource owner;
private Map targetMap; private Map targetMap;
@ -997,6 +998,20 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
} }
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#setSelectedTarget(org.eclipse.cdt.core.build.managed.ITarget)
*/
public void setSelectedTarget(ITarget target) {
selectedTarget = target;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getSelectedTarget()
*/
public ITarget getSelectedTarget() {
return selectedTarget;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo#setDirty(boolean) * @see org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo#setDirty(boolean)
*/ */

View file

@ -19,6 +19,7 @@ import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
@ -36,6 +37,7 @@ public class Target extends BuildObject implements ITarget {
// Build model elements that come from the plugin or project files // Build model elements that come from the plugin or project files
private String artifactName; private String artifactName;
private String binaryParserId; private String binaryParserId;
private String errorParserIds;
private String cleanCommand; private String cleanCommand;
private List configList; private List configList;
private Map configMap; private Map configMap;
@ -89,6 +91,7 @@ public class Target extends BuildObject implements ITarget {
setName(parent.getName()); setName(parent.getName());
setArtifactName(parent.getArtifactName()); setArtifactName(parent.getArtifactName());
this.binaryParserId = parent.getBinaryParserId(); this.binaryParserId = parent.getBinaryParserId();
this.errorParserIds = parent.getErrorParserIds();
this.defaultExtension = parent.getArtifactExtension(); this.defaultExtension = parent.getArtifactExtension();
this.isTest = parent.isTestTarget(); this.isTest = parent.isTestTarget();
this.cleanCommand = parent.getCleanCommand(); this.cleanCommand = parent.getCleanCommand();
@ -125,6 +128,9 @@ public class Target extends BuildObject implements ITarget {
// Get the ID of the binary parser // Get the ID of the binary parser
binaryParserId = element.getAttribute(BINARY_PARSER); binaryParserId = element.getAttribute(BINARY_PARSER);
// Get the semicolon separated list of IDs of the error parsers
errorParserIds = element.getAttribute(ERROR_PARSERS);
// Get the default extension // Get the default extension
defaultExtension = element.getAttribute(DEFAULT_EXTENSION); defaultExtension = element.getAttribute(DEFAULT_EXTENSION);
@ -209,6 +215,11 @@ public class Target extends BuildObject implements ITarget {
// Get the clean command // Get the clean command
cleanCommand = element.getAttribute(CLEAN_COMMAND); cleanCommand = element.getAttribute(CLEAN_COMMAND);
// Get the semicolon separated list of IDs of the error parsers
if (element.hasAttribute(ERROR_PARSERS)) {
errorParserIds = element.getAttribute(ERROR_PARSERS);
}
// Get the make command and arguments // Get the make command and arguments
if (element.hasAttribute(MAKE_COMMAND)) { if (element.hasAttribute(MAKE_COMMAND)) {
makeCommand = element.getAttribute(MAKE_COMMAND); makeCommand = element.getAttribute(MAKE_COMMAND);
@ -317,6 +328,9 @@ public class Target extends BuildObject implements ITarget {
if (makeArguments != null) { if (makeArguments != null) {
element.setAttribute(MAKE_ARGS, makeArguments); element.setAttribute(MAKE_ARGS, makeArguments);
} }
if (errorParserIds != null) {
element.setAttribute(ERROR_PARSERS, errorParserIds);
}
// Serialize the configuration settings // Serialize the configuration settings
Iterator iter = getConfigurationList().listIterator(); Iterator iter = getConfigurationList().listIterator();
@ -693,6 +707,46 @@ public class Target extends BuildObject implements ITarget {
return binaryParserId; return binaryParserId;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.ITarget#getErrorParserIds()
*/
public String getErrorParserIds() {
if (errorParserIds == null) {
// If I have a parent, ask it
if (parent != null) {
return parent.getErrorParserIds();
}
}
return errorParserIds;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.ITarget#getErrorParserList()
*/
public String[] getErrorParserList() {
String parserIDs = getErrorParserIds();
String[] errorParsers = null;
if (parserIDs != null) {
// Check for an empty string
if (parserIDs.length() == 0) {
errorParsers = new String[0];
} else {
StringTokenizer tok = new StringTokenizer(parserIDs, ";"); //$NON-NLS-1$
List list = new ArrayList(tok.countTokens());
while (tok.hasMoreElements()) {
list.add(tok.nextToken());
}
String[] strArr = {""};
errorParsers = (String[]) list.toArray(strArr);
}
} else {
// If no error parsers are specified by the target, the default is
// all error parsers
errorParsers = CCorePlugin.getDefault().getAllErrorParsersIDs();
}
return errorParsers;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.ITarget#getConfiguration() * @see org.eclipse.cdt.core.build.managed.ITarget#getConfiguration()
*/ */
@ -819,6 +873,18 @@ public class Target extends BuildObject implements ITarget {
} }
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.ITarget#setErrorParserIds()
*/
public void setErrorParserIds(String ids) {
if (ids == null) return;
String currentIds = getErrorParserIds();
if (currentIds == null || !(currentIds.equals(ids))) {
errorParserIds = ids;
isDirty = true;
}
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.ITarget#updateOwner(org.eclipse.core.resources.IResource) * @see org.eclipse.cdt.managedbuilder.core.ITarget#updateOwner(org.eclipse.core.resources.IResource)
*/ */

View file

@ -424,11 +424,13 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
resolved = true; resolved = true;
// IManagedConfigElement element = ManagedBuildManager.getConfigElement(this); // IManagedConfigElement element = ManagedBuildManager.getConfigElement(this);
// Tool doesn't have any references, but children might // Tool doesn't have any references, but children might
if (options != null) {
Iterator optionIter = options.iterator(); Iterator optionIter = options.iterator();
while (optionIter.hasNext()) { while (optionIter.hasNext()) {
Option current = (Option)optionIter.next(); Option current = (Option)optionIter.next();
current.resolveReferences(); current.resolveReferences();
} }
}
Iterator catIter = categoryMap.values().iterator(); Iterator catIter = categoryMap.values().iterator();
while (catIter.hasNext()) { while (catIter.hasNext()) {
IOptionCategory current = (IOptionCategory)catIter.next(); IOptionCategory current = (IOptionCategory)catIter.next();