Skip to content

Commit d97972b

Browse files
committed
Give plugins a chance to fail while reading a node.
1 parent 2fc510d commit d97972b

File tree

4 files changed

+32
-27
lines changed

4 files changed

+32
-27
lines changed

DataExchange/CustomNodeConverter.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@ public interface ICustomNodeConverter
2121
/// <returns>True if the instance can handle the node, false if not.</returns>
2222
bool CanHandleNode(BaseNode node);
2323

24-
/// <summary>Creates a schema node from the xml element. This method gets only called if <see cref="CanHandleElement(XElement)"/> returned true.</summary>
25-
/// <param name="element">The element to create the schema from.</param>
26-
/// <param name="classes">The list of classes which correspond to the schema.</param>
24+
/// <summary>Creates a node from the xml element. This method gets only called if <see cref="CanHandleElement(XElement)"/> returned true.</summary>
25+
/// <param name="element">The element to create the node from.</param>
26+
/// <param name="parent">The parent of the node.</param>
27+
/// <param name="classes">The list of classes which correspond to the node.</param>
2728
/// <param name="logger">The logger used to output messages.</param>
28-
/// <returns>The schema node for the xml element.</returns>
29-
BaseNode CreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger);
29+
/// <param name="node">[out] The node for the xml element.</param>
30+
/// <returns>True if a node was created, otherwise false.</returns>
31+
bool TryCreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger, out BaseNode node);
3032

31-
/// <summary>Creates a xml element from the schema node. This method gets only called if <see cref="CanHandleSchema(SchemaCustomNode)"/> returned true.</summary>
32-
/// <param name="node">The schema node to create the xml element from.</param>
33+
/// <summary>Creates a xml element from the node. This method gets only called if <see cref="CanHandleNode(BaseNode node)"/> returned true.</summary>
34+
/// <param name="node">The node to create the xml element from.</param>
3335
/// <param name="logger">The logger used to output messages.</param>
34-
/// <returns>The xml element for the schema node.</returns>
36+
/// <returns>The xml element for the node.</returns>
3537
XElement CreateElementFromNode(BaseNode node, ILogger logger);
3638
}
3739

@@ -52,15 +54,14 @@ public bool CanHandleNode(BaseNode node)
5254
throw new NotImplementedException();
5355
}
5456

55-
public BaseNode CreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger)
57+
public bool TryCreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger, out BaseNode node)
5658
{
5759
Contract.Requires(element != null);
5860
Contract.Requires(CanHandleElement(element));
5961
Contract.Requires(parent != null);
6062
Contract.Requires(classes != null);
6163
Contract.Requires(Contract.ForAll(classes, c => c != null));
6264
Contract.Requires(logger != null);
63-
Contract.Ensures(Contract.Result<BaseNode>() != null);
6465

6566
throw new NotImplementedException();
6667
}

DataExchange/ReClassNetFile.Read.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
8484
var converter = CustomNodeConvert.GetReadConverter(element);
8585
if (converter != null)
8686
{
87-
yield return converter.CreateNodeFromElement(element, parent, project.Classes, logger);
87+
BaseNode customNode;
88+
if (converter.TryCreateNodeFromElement(element, parent, project.Classes, logger, out customNode))
89+
{
90+
yield return customNode;
91+
}
8892

8993
continue;
9094
}

DataExchange/ReClassNetFile.Write.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> nodes, IL
7878
string typeString;
7979
if (!BuildInTypeToStringMap.TryGetValue(node.GetType(), out typeString))
8080
{
81-
logger.Log(LogLevel.Error, $"Skipping node with unknown type converter: {node.Name}");
81+
logger.Log(LogLevel.Error, $"Skipping node with unknown type: {node.Name}");
8282
logger.Log(LogLevel.Warning, node.GetType().ToString());
8383

8484
continue;

DataExchange/ReClassNetFile.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@ public partial class ReClassNetFile : IReClassImport, IReClassExport
2222

2323
private const string SerialisationClassName = "__Serialization_Class__";
2424

25-
private const string XmlRootElement = "reclass";
26-
private const string XmlClassesElement = "classes";
27-
private const string XmlClassElement = "class";
28-
private const string XmlNodeElement = "node";
29-
private const string XmlMethodElement = "method";
30-
private const string XmlVersionAttribute = "version";
31-
private const string XmlUuidAttribute = "uuid";
32-
private const string XmlNameAttribute = "name";
33-
private const string XmlCommentAttribute = "comment";
34-
private const string XmlAddressAttribute = "address";
35-
private const string XmlTypeAttribute = "type";
36-
private const string XmlReferenceAttribute = "reference";
37-
private const string XmlCountAttribute = "count";
38-
private const string XmlBitsAttribute = "bits";
39-
private const string XmlLengthAttribute = "length";
25+
public const string XmlRootElement = "reclass";
26+
public const string XmlClassesElement = "classes";
27+
public const string XmlClassElement = "class";
28+
public const string XmlNodeElement = "node";
29+
public const string XmlMethodElement = "method";
30+
public const string XmlVersionAttribute = "version";
31+
public const string XmlUuidAttribute = "uuid";
32+
public const string XmlNameAttribute = "name";
33+
public const string XmlCommentAttribute = "comment";
34+
public const string XmlAddressAttribute = "address";
35+
public const string XmlTypeAttribute = "type";
36+
public const string XmlReferenceAttribute = "reference";
37+
public const string XmlCountAttribute = "count";
38+
public const string XmlBitsAttribute = "bits";
39+
public const string XmlLengthAttribute = "length";
4040

4141
private ReClassNetProject project;
4242

0 commit comments

Comments
 (0)