Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Java,C#,C++] Support field access order checking #948

Merged
merged 50 commits into from
Dec 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
f00d59c
[Java] Add disabled tests around checking field access order.
ZachBray Jun 2, 2023
ae404df
[Java] Spike an approach for checking field encode order.
ZachBray Jun 5, 2023
9f9de4a
[Java] Support printing field order access state machine.
ZachBray Jun 5, 2023
ec53b7d
[Java] Add checking around decoding order.
ZachBray Jun 9, 2023
2331fb1
[Java] Test field order checks across versions.
ZachBray Jun 14, 2023
60b4803
[Java] Generate better error messages.
ZachBray Jun 14, 2023
e06462a
[Java] Test field order checks with fixed-length strings.
ZachBray Jun 15, 2023
3d05f78
[Java] Test field checks do not affect toString.
ZachBray Jun 15, 2023
3b8d557
[Java] Fix field order checks to work with `decodedLength()`.
ZachBray Jun 15, 2023
6e10545
[Java] Test content of field order error messages.
ZachBray Jun 15, 2023
f879284
[Java] Fix field access order in tests and re-enable.
ZachBray Jun 15, 2023
b5f4ba1
[Java] Permit block field access whenever it is safe (and, unfortunat…
ZachBray Jun 15, 2023
3e77828
[Java] Add (disabled) failing tests for false positives.
ZachBray Jun 16, 2023
46bd3d3
Revert "[Java] Permit block field access whenever it is safe (and, un…
ZachBray Jun 16, 2023
1d9df0d
[Java] Treat top-level block fields as a special case.
ZachBray Jun 16, 2023
d9621e6
[Java] Support turning on access checks independently of bounds checks.
ZachBray Jun 19, 2023
8fbc6ca
[Java] Attempt to optimise code with disabled access order checks.
ZachBray Jun 19, 2023
19a6448
[Java] Add feature toggle for access order check generation.
ZachBray Jun 20, 2023
e7a9cf2
[Java] Improve performance of field access order checking.
ZachBray Jun 20, 2023
3d4756c
[Java] Provide more context in error messages.
ZachBray Jun 20, 2023
623ad8e
[Java] Provide more context in error messages.
ZachBray Jun 20, 2023
bf8cde9
[Java] Specify expected transitions in error messages.
ZachBray Jun 20, 2023
9287ab2
[Java] Use fewer states to model encoding.
ZachBray Jun 20, 2023
2171808
[Java] Refactor field access order checking.
ZachBray Jun 21, 2023
b979411
[Java] Address review comment.
ZachBray Jun 22, 2023
482d60d
[Java] Add tests for variable-length data in nested group.
ZachBray Jun 22, 2023
4031a11
[Java] Generate check that encoding is complete.
ZachBray Jun 22, 2023
f0958de
[Java] Initialise buffer bytes before encoding in tests.
ZachBray Jun 26, 2023
1faedbb
[C#] Ignore personal Rider file.
ZachBray Jun 26, 2023
3885a63
[C#] Fix bug in string encoding method.
ZachBray Jun 26, 2023
8f74af9
[C#] Port field access order tests.
ZachBray Jun 26, 2023
f876347
[Java] Fix indent.
ZachBray Jun 27, 2023
18967f6
[C#,Java] Port access order checking implementation to C#.
ZachBray Jun 27, 2023
cc18cac
[C#] Recover codec state after `ToString()`.
ZachBray Jun 27, 2023
9bc676c
[C#] Generate (more) presence checks in accessors.
ZachBray Jun 28, 2023
03d605c
[C#] Enable access order checking tests.
ZachBray Jun 28, 2023
7499622
[C++] Port access order checking tests and implementation to C++.
ZachBray Jul 31, 2023
2f9b258
[C#] Improve indentation generation.
ZachBray Aug 15, 2023
a0eb0ea
[Java, C#, C++] Model `resetCountToIndex()` state machine transition.
ZachBray Aug 15, 2023
39d28c1
[Java, C++, C#] Disable access order checking feature by default.
ZachBray Aug 22, 2023
3d44354
[C++] Make access listener methods private.
ZachBray Aug 23, 2023
cef3e1f
[C++, C#] Tidy up.
ZachBray Sep 20, 2023
dab9ae2
[Java, C++] Tidy up.
ZachBray Sep 20, 2023
69d13b6
[Java, C#, C++] Rename flags to enable field access order checking.
ZachBray Oct 20, 2023
08367e0
[Java,C#,C++] Allow custom flag/properties to enable precedence checks.
ZachBray Nov 13, 2023
938fbe9
Address Mike's feedback around depending directly on system properties.
ZachBray Dec 4, 2023
1efe4f2
Address Mike's feedback: provide more specific diagram location.
ZachBray Dec 4, 2023
0eb1266
Validate PrecedenceChecks#Context in conclude.
ZachBray Dec 5, 2023
26f79f2
Address Mike's feedback: move sys prop eval higher.
ZachBray Dec 5, 2023
8796e9e
Avoid cyclic dependency between classes.
ZachBray Dec 5, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ out
# cmake
cmake-build-debug
codecs
.cmake
CMakeFiles
thirdparty

# cpp build linux
cppbuild/CMakeCache.txt
Expand Down Expand Up @@ -101,10 +104,12 @@ csharp/sbe-generated/issue483
csharp/sbe-generated/issue560
csharp/sbe-generated/issue661
csharp/sbe-generated/since-deprecated
csharp/sbe-generated/order_check
csharp/sbe-generated/mktdata/*.cs
csharp/sbe-generated/uk_co_real_logic_sbe_benchmarks_fix
csharp/sbe-tests/*.sbe
csharp/nuget/
csharp/csharp.sln.DotSettings.user

# rust
rust/target
Expand Down
26 changes: 20 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ subprojects {
}

javaLauncher.set(toolchainLauncher)

systemProperty 'sbe.enable.ir.precedence.checks', 'true'
systemProperty 'sbe.enable.test.precedence.checks', 'true'
}
}

Expand Down Expand Up @@ -279,9 +282,12 @@ project(':sbe-tool') {
'sbe.output.dir': generatedDir,
'sbe.target.language': 'Java',
'sbe.validation.stop.on.error': 'true',
'sbe.validation.xsd': validationXsdPath)
'sbe.validation.xsd': validationXsdPath,
'sbe.generate.precedence.checks': 'true',
'sbe.java.precedence.checks.property.name': 'sbe.enable.test.precedence.checks')
args = ['src/test/resources/json-printer-test-schema.xml',
'src/test/resources/composite-elements-schema.xml']
'src/test/resources/composite-elements-schema.xml',
'src/test/resources/field-order-check-schema.xml']
}

jar {
Expand Down Expand Up @@ -541,7 +547,8 @@ project(':sbe-benchmarks') {
'sbe.validation.stop.on.error': 'true',
'sbe.validation.xsd': validationXsdPath,
'sbe.java.encoding.buffer.type': 'org.agrona.concurrent.UnsafeBuffer',
'sbe.java.decoding.buffer.type': 'org.agrona.concurrent.UnsafeBuffer')
'sbe.java.decoding.buffer.type': 'org.agrona.concurrent.UnsafeBuffer',
'sbe.generate.precedence.checks': 'false')
args = ['src/main/resources/car.xml', 'src/main/resources/fix-message-samples.xml']
}

Expand Down Expand Up @@ -730,13 +737,15 @@ tasks.register('generateCSharpCodecsTests', JavaExec) {
'sbe.output.dir': 'csharp/sbe-generated',
'sbe.target.language': 'uk.co.real_logic.sbe.generation.csharp.CSharp',
'sbe.xinclude.aware': 'true',
'sbe.validation.xsd': validationXsdPath)
'sbe.validation.xsd': validationXsdPath,
'sbe.generate.precedence.checks': 'true')
args = ['sbe-tool/src/test/resources/FixBinary.xml',
'sbe-tool/src/test/resources/issue435.xml',
'sbe-tool/src/test/resources/issue483.xml',
'sbe-tool/src/test/resources/issue560.xml',
'sbe-tool/src/test/resources/since-deprecated-test-schema.xml',
'sbe-tool/src/test/resources/example-bigendian-test-schema.xml',
'sbe-tool/src/test/resources/field-order-check-schema.xml',
'sbe-benchmarks/src/main/resources/fix-message-samples.xml']
}

Expand All @@ -753,7 +762,10 @@ tasks.register('generateJavaIrCodecs', JavaExec) {
systemProperties(
'sbe.output.dir': 'sbe-tool/src/main/java',
'sbe.target.language': 'Java',
'sbe.validation.xsd': validationXsdPath)
'sbe.validation.xsd': validationXsdPath,
'sbe.generate.precedence.checks': 'true',
'sbe.precedence.checks.flag.name': 'SBE_ENABLE_IR_PRECEDENCE_CHECKS',
'sbe.java.precedence.checks.property.name': 'sbe.enable.ir.precedence.checks')
args = ['sbe-tool/src/main/resources/sbe-ir.xml']
}

Expand All @@ -763,7 +775,9 @@ tasks.register('generateCppIrCodecs', JavaExec) {
systemProperties(
'sbe.output.dir': 'sbe-tool/src/main/cpp',
'sbe.target.language': 'cpp',
'sbe.validation.xsd': validationXsdPath)
'sbe.validation.xsd': validationXsdPath,
'sbe.generate.precedence.checks': 'true',
'sbe.precedence.checks.flag.name': 'SBE_ENABLE_IR_PRECEDENCE_CHECKS')
args = ['sbe-tool/src/main/resources/sbe-ir.xml']
}

Expand Down
8 changes: 8 additions & 0 deletions csharp/sbe-generated/sbe-generated.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@
<Copyright>Copyright (C) Bill Segall 2018, MarketFactory Inc 2017, Adaptive 2014. All rights reserved.</Copyright>
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DefineConstants>TRACE,SBE_ENABLE_PRECEDENCE_CHECKS</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DefineConstants>TRACE,SBE_ENABLE_PRECEDENCE_CHECKS</DefineConstants>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\sbe-dll\sbe-dll.csproj" />
</ItemGroup>
Expand Down
Loading
Loading