Skip to content

Commit 19cd533

Browse files
committed
Fixed and added code contracts.
1 parent 6d80623 commit 19cd533

30 files changed

+184
-55
lines changed

AddressParser/AstBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private void PopOperations(bool untillLeftBracket)
104104
if (operatorStack.Count > 0 && operatorStack.Peek().TokenType == TokenType.LeftBracket)
105105
{
106106
operatorStack.Pop();
107-
operatorStack.Push(new Token { TokenType = TokenType.ReadPointer, Value = '\r' });
107+
operatorStack.Push(new Token(TokenType.ReadPointer, '\r'));
108108
}
109109
else
110110
{

AddressParser/Token.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// Design taken from https://github.com/pieterderycke/Jace
22

3+
using System.Diagnostics.Contracts;
4+
35
namespace ReClassNET.AddressParser
46
{
57
enum TokenType
@@ -14,15 +16,19 @@ enum TokenType
1416

1517
class Token
1618
{
17-
/// <summary>
18-
/// The type of the token.
19-
/// </summary>
20-
public TokenType TokenType;
19+
/// <summary>The type of the token.</summary>
20+
public TokenType TokenType { get; }
21+
22+
/// <summary>The value of the token.</summary>
23+
public object Value { get; }
2124

22-
/// <summary>
23-
/// The value of the token.
24-
/// </summary>
25-
public object Value;
25+
public Token(TokenType type, object value)
26+
{
27+
Contract.Requires(value != null);
28+
29+
TokenType = type;
30+
Value = value;
31+
}
2632

2733
public override string ToString()
2834
{

AddressParser/TokenReader.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public List<Token> Read(string formula)
4646
}
4747
++i;
4848

49-
tokens.Add(new Token { TokenType = TokenType.ModuleOffset, Value = buffer });
49+
tokens.Add(new Token(TokenType.ModuleOffset, buffer));
5050
isFormulaSubPart = false;
5151

5252
if (i == characters.Length)
@@ -77,7 +77,7 @@ public List<Token> Read(string formula)
7777
var address = (IntPtr)unchecked((int)offsetValue);
7878
#endif
7979

80-
tokens.Add(new Token { TokenType = TokenType.Offset, Value = address });
80+
tokens.Add(new Token(TokenType.Offset, address));
8181
isFormulaSubPart = false;
8282
}
8383
else
@@ -99,15 +99,15 @@ public List<Token> Read(string formula)
9999
case '-':
100100
case '*':
101101
case '/':
102-
tokens.Add(new Token { TokenType = TokenType.Operation, Value = characters[i] });
102+
tokens.Add(new Token(TokenType.Operation, characters[i]));
103103
isFormulaSubPart = true;
104104
break;
105105
case '[':
106-
tokens.Add(new Token { TokenType = TokenType.LeftBracket, Value = characters[i] });
106+
tokens.Add(new Token(TokenType.LeftBracket, characters[i]));
107107
isFormulaSubPart = true;
108108
break;
109109
case ']':
110-
tokens.Add(new Token { TokenType = TokenType.RightBracket, Value = characters[i] });
110+
tokens.Add(new Token(TokenType.RightBracket, characters[i]));
111111
isFormulaSubPart = false;
112112
break;
113113
default:

DataExchange/ReClass2007File.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class ReClass2007File : IReClassImport
3636
typeof(FunctionPtrNode)
3737
};
3838

39-
private ReClassNetProject project;
39+
private readonly ReClassNetProject project;
4040

4141
public ReClass2007File(ReClassNetProject project)
4242
{
@@ -193,6 +193,7 @@ private IEnumerable<DataRow> Query(SQLiteConnection connection, string query)
193193
{
194194
Contract.Requires(connection != null);
195195
Contract.Requires(query != null);
196+
Contract.Ensures(Contract.Result<IEnumerable<DataRow>>() != null);
196197

197198
using (var adapter = new SQLiteDataAdapter(query, connection))
198199
{

DataExchange/ReClassClipboard.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static Tuple<List<ClassNode>, List<BaseNode>> Paste(ReClassNetProject tem
4040
{
4141
Contract.Requires(templateProject != null);
4242
Contract.Requires(logger != null);
43-
Contract.Ensures(Contract.Result<List<BaseNode>>() != null);
43+
Contract.Ensures(Contract.Result<Tuple<List<ClassNode>, List<BaseNode>>>() != null);
4444

4545
var classes = new List<ClassNode>();
4646
var nodes = new List<BaseNode>();

DataExchange/ReClassFile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ partial class ReClassFile : IReClassImport
1515
public const string FormatName = "ReClass File";
1616
public const string FileExtension = ".reclass";
1717

18-
private ReClassNetProject project;
18+
private readonly ReClassNetProject project;
1919

2020
public ReClassFile(ReClassNetProject project)
2121
{

DataExchange/ReClassNetFile.Read.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ public void Load(string filePath, ILogger logger)
2323

2424
public void Load(Stream input, ILogger logger)
2525
{
26+
Contract.Requires(input != null);
27+
Contract.Requires(logger != null);
28+
2629
using (var archive = new ZipArchive(input, ZipArchiveMode.Read))
2730
{
2831
var dataEntry = archive.GetEntry(DataFileName);
@@ -79,6 +82,7 @@ public void Load(Stream input, ILogger logger)
7982
private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, ClassNode parent, ILogger logger)
8083
{
8184
Contract.Requires(elements != null);
85+
Contract.Requires(Contract.ForAll(elements, e => e != null));
8286
Contract.Requires(parent != null);
8387
Contract.Requires(logger != null);
8488

@@ -178,6 +182,10 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
178182

179183
private static void TryGetAttributeValue(XElement element, string attribute, out int val, ILogger logger)
180184
{
185+
Contract.Requires(element != null);
186+
Contract.Requires(attribute != null);
187+
Contract.Requires(logger != null);
188+
181189
if (!int.TryParse(element.Attribute(attribute)?.Value, out val))
182190
{
183191
val = 0;
@@ -191,6 +199,7 @@ public static Tuple<List<ClassNode>, List<BaseNode>> ReadNodes(Stream input, ReC
191199
{
192200
Contract.Requires(input != null);
193201
Contract.Requires(logger != null);
202+
Contract.Ensures(Contract.Result<Tuple<List<ClassNode>, List<BaseNode>>>() != null);
194203

195204
using (var project = new ReClassNetProject())
196205
{

DataExchange/ReClassNetFile.Write.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using System.Xml.Linq;
88
using ReClassNET.Logger;
99
using ReClassNET.Nodes;
10-
using ReClassNET.Util;
1110

1211
namespace ReClassNET.DataExchange
1312
{
@@ -46,6 +45,7 @@ public void Save(Stream output, ILogger logger)
4645
private IEnumerable<XElement> CreateClassElements(IEnumerable<ClassNode> classes, ILogger logger)
4746
{
4847
Contract.Requires(classes != null);
48+
Contract.Requires(Contract.ForAll(classes, c => c != null));
4949
Contract.Requires(logger != null);
5050
Contract.Ensures(Contract.Result<IEnumerable<XElement>>() != null);
5151

@@ -62,6 +62,7 @@ private IEnumerable<XElement> CreateClassElements(IEnumerable<ClassNode> classes
6262
private IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> nodes, ILogger logger)
6363
{
6464
Contract.Requires(nodes != null);
65+
Contract.Requires(Contract.ForAll(nodes, n => n != null));
6566
Contract.Requires(logger != null);
6667
Contract.Ensures(Contract.Result<IEnumerable<XElement>>() != null);
6768

@@ -129,6 +130,7 @@ public static void WriteNodes(Stream output, IEnumerable<BaseNode> nodes, ILogge
129130
{
130131
Contract.Requires(output != null);
131132
Contract.Requires(nodes != null);
133+
Contract.Requires(Contract.ForAll(nodes, n => n != null));
132134
Contract.Requires(logger != null);
133135

134136
using (var project = new ReClassNetProject())

DataExchange/ReClassNetFile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public partial class ReClassNetFile : IReClassImport, IReClassExport
3838
public const string XmlBitsAttribute = "bits";
3939
public const string XmlLengthAttribute = "length";
4040

41-
private ReClassNetProject project;
41+
private readonly ReClassNetProject project;
4242

4343
public ReClassNetFile(ReClassNetProject project)
4444
{

DataExchange/ReClassQtFile.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ReClassQtFile : IReClassImport
1414
public const string FormatName = "ReClassQt File";
1515
public const string FileExtension = ".reclassqt";
1616

17-
private ReClassNetProject project;
17+
private readonly ReClassNetProject project;
1818

1919
public ReClassQtFile(ReClassNetProject project)
2020
{
@@ -107,6 +107,7 @@ private string ParseAddressString(XElement element)
107107
private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, ClassNode parent, IReadOnlyDictionary<string, ClassNode> classes, ILogger logger)
108108
{
109109
Contract.Requires(elements != null);
110+
Contract.Requires(Contract.ForAll(elements, e => e != null));
110111
Contract.Requires(parent != null);
111112
Contract.Requires(logger != null);
112113

0 commit comments

Comments
 (0)