Skip to content

Commit da4fd69

Browse files
committed
Add helpers for enforcing _check() calls
See kaitai-io/kaitai_struct_python_runtime@fa6fbd5
1 parent 60dd2bf commit da4fd69

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Copyright 2015-2025 Kaitai Project: MIT license
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining
5+
* a copy of this software and associated documentation files (the
6+
* "Software"), to deal in the Software without restriction, including
7+
* without limitation the rights to use, copy, modify, merge, publish,
8+
* distribute, sublicense, and/or sell copies of the Software, and to
9+
* permit persons to whom the Software is furnished to do so, subject to
10+
* the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be
13+
* included in all copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22+
*/
23+
24+
package io.kaitai.struct;
25+
26+
/**
27+
* Exception thrown by {@link KaitaiStruct.ReadWrite#_write()} when attempting
28+
* to write an object whose consistency hasn't been checked
29+
* ({@link KaitaiStruct.ReadWrite#_check()}) since the last modification.
30+
*/
31+
public class ConsistencyNotCheckedError extends RuntimeException {
32+
public ConsistencyNotCheckedError(String message) {
33+
super(message);
34+
}
35+
}

src/main/java/io/kaitai/struct/KaitaiStruct.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ public ReadOnly(KaitaiStream _io) {
5858
* shortcut methods.
5959
*/
6060
public abstract static class ReadWrite extends ReadOnly {
61+
/**
62+
* Indicates whether the object has been externally modified since the
63+
* last known consistent state, meaning that the consistency of the
64+
* object is unknown because it hasn't been checked.
65+
*/
66+
protected boolean _dirty = true;
67+
6168
public ReadWrite(KaitaiStream _io) {
6269
super(_io);
6370
}
@@ -80,5 +87,11 @@ public void _write_Seq(KaitaiStream io) {
8087
this._io = io;
8188
_write_Seq();
8289
}
90+
91+
protected void _assertNotDirty() {
92+
if (_dirty) {
93+
throw new ConsistencyNotCheckedError("consistency not checked: _check() has not been called since the last modification of the object");
94+
}
95+
}
8396
}
8497
}

0 commit comments

Comments
 (0)