1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

New Build Model

- Save and load options values
This commit is contained in:
Doug Schaefer 2003-04-25 14:32:51 +00:00
parent a4a9738866
commit b8024352d1
7 changed files with 502 additions and 343 deletions

View file

@ -22,6 +22,8 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IConfigurationElement;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
@ -88,6 +90,15 @@ public class Configuration extends BuildObject implements IConfiguration {
if (element.hasAttribute("parent"))
parent = target.getParent().getConfiguration(element.getAttribute("parent"));
NodeList configElements = element.getChildNodes();
for (int i = 0; i < configElements.getLength(); ++i) {
Node configElement = configElements.item(i);
if (configElement.getNodeName().equals("toolRef")) {
new ToolReference(this, (Element)configElement);
}
}
}
public void serealize(Document doc, Element element) {
@ -103,6 +114,7 @@ public class Configuration extends BuildObject implements IConfiguration {
for (int i = 0; i < toolReferences.size(); ++i) {
ToolReference toolRef = (ToolReference)toolReferences.get(i);
Element toolRefElement = doc.createElement("toolRef");
element.appendChild(toolRefElement);
toolRef.serealize(doc, toolRefElement);
}
}

View file

@ -10,6 +10,7 @@
**********************************************************************/
package org.eclipse.cdt.internal.core.build.managed;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.build.managed.BuildException;
@ -53,6 +54,28 @@ public class Option extends BuildObject implements IOption {
String categoryId = element.getAttribute("category");
if (categoryId != null)
setCategory(tool.getOptionCategory(categoryId));
// valueType
String valueTypeStr = element.getAttribute("valueType");
if (valueTypeStr == null || valueTypeStr.equals("string"))
valueType = IOption.STRING;
else if (valueTypeStr.equals("stringList"))
valueType = IOption.STRING_LIST;
// value
switch (valueType) {
case IOption.STRING:
value = element.getAttribute("value");
break;
case IOption.STRING_LIST:
List valueList = new ArrayList();
value = valueList;
IConfigurationElement[] valueElements = element.getChildren("optionValue");
for (int i = 0; i < valueElements.length; ++i) {
valueList.add(valueElements[i].getAttribute("value"));
}
break;
}
}
/* (non-Javadoc)

View file

@ -10,6 +10,9 @@
**********************************************************************/
package org.eclipse.cdt.internal.core.build.managed;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.build.managed.BuildException;
import org.eclipse.cdt.core.build.managed.IOption;
import org.eclipse.cdt.core.build.managed.IOptionCategory;
@ -17,6 +20,7 @@ import org.eclipse.cdt.core.build.managed.ITool;
import org.eclipse.core.runtime.IConfigurationElement;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
*
@ -51,6 +55,20 @@ public class OptionReference implements IOption {
option = owner.getTool().getOption(element.getAttribute("id"));
owner.addOptionReference(this);
// value
switch (option.getValueType()) {
case IOption.STRING:
value = element.getAttribute("value");
break;
case IOption.STRING_LIST:
List valueList = new ArrayList();
IConfigurationElement[] valueElements = element.getChildren("optionValue");
for (int i = 0; i < valueElements.length; ++i) {
valueList.add(valueElements[i].getAttribute("value"));
}
break;
}
}
/**
@ -64,6 +82,21 @@ public class OptionReference implements IOption {
option = owner.getTool().getOption(element.getAttribute("id"));
owner.addOptionReference(this);
// value
switch (option.getValueType()) {
case IOption.STRING:
value = element.getAttribute("value");
break;
case IOption.STRING_LIST:
List valueList = new ArrayList();
NodeList nodes = element.getElementsByTagName("optionValue");
for (int i = 0; i < nodes.getLength(); ++i) {
valueList.add(((Element)nodes.item(i)).getAttribute("value"));
}
break;
}
}
/**
@ -74,7 +107,20 @@ public class OptionReference implements IOption {
*/
public void serealize(Document doc, Element element) {
element.setAttribute("id", option.getId());
option = owner.getOption(element.getAttribute("id"));
// value
switch (option.getValueType()) {
case IOption.STRING:
element.setAttribute("value", (String)value);
break;
case IOption.STRING_LIST:
List valueList = (List)value;
for (int i = 0; i < valueList.size(); ++i) {
Element valueElement = doc.createElement("optionValue");
valueElement.setAttribute("value", (String)valueList.get(i));
element.appendChild(valueElement);
}
}
}
/* (non-Javadoc)

View file

@ -22,6 +22,8 @@ import org.eclipse.cdt.core.build.managed.ITool;
import org.eclipse.core.runtime.IConfigurationElement;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
@ -69,6 +71,20 @@ public class ToolReference implements ITool {
}
public ToolReference(Configuration owner, Element element) {
this.owner = owner;
Target parentTarget = (Target)owner.getTarget();
parent = ((Target)parentTarget.getParent()).getTool(element.getAttribute("id"));
owner.addToolReference(this);
NodeList configElements = element.getChildNodes();
for (int i = 0; i < configElements.getLength(); ++i) {
Node configElement = configElements.item(i);
if (configElement.getNodeName().equals("optionRef")) {
new OptionReference(this, (Element)configElement);
}
}
}
public void serealize(Document doc, Element element) {
@ -78,6 +94,7 @@ public class ToolReference implements ITool {
for (int i = 0; i < optionReferences.size(); ++i) {
OptionReference optionRef = (OptionReference)optionReferences.get(i);
Element optionRefElement = doc.createElement("optionRef");
element.appendChild(optionRefElement);
optionRef.serealize(doc, optionRefElement);
}
}

View file

@ -92,6 +92,7 @@
<complexType>
<sequence>
<element ref="optionEnum"/>
<element ref="optionValue"/>
</sequence>
<attribute name="id" type="string" use="required">
<annotation>
@ -107,7 +108,7 @@
</documentation>
</annotation>
</attribute>
<attribute name="type" use="default" value="string">
<attribute name="valueType" use="default" value="string">
<annotation>
<documentation>
@ -117,12 +118,12 @@
<restriction base="string">
<enumeration value="string">
</enumeration>
<enumeration value="enumeration">
<enumeration value="stringList">
</enumeration>
</restriction>
</simpleType>
</attribute>
<attribute name="default" type="string">
<attribute name="value" type="string">
<annotation>
<documentation>
@ -204,7 +205,7 @@
</documentation>
</annotation>
</attribute>
<attribute name="value" type="string" use="required">
<attribute name="value" type="string">
<annotation>
<documentation>
@ -282,6 +283,18 @@
</complexType>
</element>
<element name="optionValue">
<complexType>
<attribute name="value" type="string" use="required">
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<annotation>
<appInfo>
<meta.section type="since"/>

View file

@ -54,7 +54,7 @@ public class AllBuildTests extends TestCase {
* Navigates through the build info as defined in the extensions
* defined in this plugin
*/
public void testExtensions() {
public void testExtensions() throws Exception {
ITarget testRoot = null;
ITarget testSub = null;
@ -67,7 +67,7 @@ public class AllBuildTests extends TestCase {
if (target.getName().equals("Test Root")) {
testRoot = target;
checkRootTarget(testRoot);
checkRootTarget(testRoot, "x");
} else if (target.getName().equals("Test Sub")) {
testSub = target;
@ -123,7 +123,19 @@ public class AllBuildTests extends TestCase {
for (int i = 0; i < configs.length; ++i)
target.createConfiguration(configs[i], target.getId() + "." + i);
checkRootTarget(target);
checkRootTarget(target, "x");
// Override the "Option in Category" option value
configs = target.getConfigurations();
ITool[] tools = configs[0].getTools();
IOptionCategory topCategory = tools[0].getTopOptionCategory();
IOptionCategory[] categories = topCategory.getChildCategories();
IOption[] options = categories[0].getOptions(configs[0]);
configs[0].setOption(options[0], "z");
options = categories[0].getOptions(null);
assertEquals("x", options[0].getStringValue());
options = categories[0].getOptions(configs[0]);
assertEquals("z", options[0].getStringValue());
// Save, close, reopen and test again
ManagedBuildManager.saveBuildInfo(project);
@ -133,7 +145,7 @@ public class AllBuildTests extends TestCase {
targets = ManagedBuildManager.getTargets(project);
assertEquals(1, targets.length);
checkRootTarget(targets[0]);
checkRootTarget(targets[0], "z");
}
IProject createProject(String name) throws CoreException {
@ -154,7 +166,7 @@ public class AllBuildTests extends TestCase {
return project;
}
private void checkRootTarget(ITarget target) {
private void checkRootTarget(ITarget target, String oicValue) throws BuildException {
// Tools
ITool[] tools = target.getTools();
// Root Tool
@ -164,7 +176,11 @@ public class AllBuildTests extends TestCase {
IOption[] options = rootTool.getOptions();
assertEquals(2, options.length);
assertEquals("Option in Top", options[0].getName());
String[] valueList = options[0].getStringListValue();
assertEquals("a", valueList[0]);
assertEquals("b", valueList[1]);
assertEquals("Option in Category", options[1].getName());
assertEquals("x", options[1].getStringValue());
// Option Categories
IOptionCategory topCategory = rootTool.getTopOptionCategory();
assertEquals("Root Tool", topCategory.getName());
@ -187,11 +203,34 @@ public class AllBuildTests extends TestCase {
tools = rootConfig.getTools();
assertEquals(1, tools.length);
assertEquals("Root Tool", tools[0].getName());
topCategory = tools[0].getTopOptionCategory();
options = topCategory.getOptions(configs[0]);
assertEquals(1, options.length);
assertEquals("Option in Top", options[0].getName());
valueList = options[0].getStringListValue();
assertEquals("a", valueList[0]);
assertEquals("b", valueList[1]);
categories = topCategory.getChildCategories();
options = categories[0].getOptions(configs[0]);
assertEquals("Option in Category", options[0].getName());
assertEquals(oicValue, options[0].getStringValue());
// Root Override Config
assertEquals("Root Override Config", configs[1].getName());
tools = configs[1].getTools();
assertEquals(1, tools.length);
assertTrue(tools[0] instanceof ToolReference);
options = tools[0].getOptions();
assertEquals("Root Tool", tools[0].getName());
topCategory = tools[0].getTopOptionCategory();
options = topCategory.getOptions(configs[1]);
assertEquals(1, options.length);
assertEquals("Option in Top", options[0].getName());
valueList = options[0].getStringListValue();
assertEquals("a", valueList[0]);
assertEquals("b", valueList[1]);
categories = topCategory.getChildCategories();
options = categories[0].getOptions(configs[1]);
assertEquals("Option in Category", options[0].getName());
assertEquals("y", options[0].getStringValue());
}
}

View file

@ -42,14 +42,14 @@
</optionCategory>
<option
name="Compiler Flags"
type="string"
valueType="string"
id="linux.compiler.flags">
</option>
<option
name="Optimization Flags"
default="-O"
type="string"
category="linux.compiler.optimization"
value="-O"
valueType="string"
id="linux.compiler.optimizationFlags">
</option>
</tool>
@ -106,11 +106,20 @@
</optionCategory>
<option
name="Option in Top"
valueType="stringList"
id="topOption">
<optionValue
value="a">
</optionValue>
<optionValue
value="b">
</optionValue>
</option>
<option
name="Option in Category"
category="category"
value="x"
valueType="string"
id="childOption">
</option>
</tool>
@ -124,8 +133,8 @@
<toolRef
id="root.tool">
<optionRef
value="x"
id="topOption">
value="y"
id="childOption">
</optionRef>
</toolRef>
</configuration>