diff --git a/.gitignore b/.gitignore
index 27dd5ac9b8..0c85dce8cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -106,6 +106,7 @@ csharp/sbe-generated/baseline
csharp/sbe-generated/baseline-bigendian
csharp/sbe-generated/extension
csharp/sbe-generated/issue435
+csharp/sbe-generated/issue483
csharp/sbe-generated/since-deprecated
csharp/sbe-generated/mktdata/*.cs
csharp/sbe-generated/uk_co_real_logic_sbe_benchmarks_fix
diff --git a/build.gradle b/build.gradle
index 55f6fe6c53..be6dd79325 100644
--- a/build.gradle
+++ b/build.gradle
@@ -551,6 +551,7 @@ task(generateCSharpCodecs, type: JavaExec) {
'sbe.validation.xsd': validationXsdPath)
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/since-deprecated-test-schema.xml',
'sbe-tool/src/test/resources/example-bigendian-test-schema.xml',
'sbe-samples/src/main/resources/example-schema.xml',
diff --git a/csharp/runtests.sh b/csharp/runtests.sh
index 29f310cdad..4fb5797c82 100755
--- a/csharp/runtests.sh
+++ b/csharp/runtests.sh
@@ -1,3 +1,3 @@
MSTEST='/c/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/MSTest.exe'
-"$MSTEST" /testcontainer:sbe-tests/bin/Debug/Org.SbeTool.Sbe.UnitTests.dll
+"$MSTEST" /testcontainer:sbe-tests/bin/Debug/net45/Org.SbeTool.Sbe.UnitTests.dll
diff --git a/csharp/sbe-generated/sbe-generated.csproj b/csharp/sbe-generated/sbe-generated.csproj
index 6dc8e9cc09..1c48f28476 100644
--- a/csharp/sbe-generated/sbe-generated.csproj
+++ b/csharp/sbe-generated/sbe-generated.csproj
@@ -8,6 +8,11 @@
+
+
+
+
+
diff --git a/csharp/sbe-tests/Issue483Tests.cs b/csharp/sbe-tests/Issue483Tests.cs
new file mode 100644
index 0000000000..bd6f9b0640
--- /dev/null
+++ b/csharp/sbe-tests/Issue483Tests.cs
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 MarketFactory, Inc
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Org.SbeTool.Sbe.Dll;
+
+namespace Org.SbeTool.Sbe.Tests
+{
+ [TestClass]
+ public unsafe class Issue483Tests
+ {
+ private Issue483.Issue483 _issue483;
+
+ [TestInitialize]
+ public void SetUp()
+ {
+ _issue483 = new Issue483.Issue483();
+
+ }
+
+ [TestMethod]
+ public void PresenceTest()
+ {
+ // Check our attributes for their presence meta attribute
+ Assert.AreEqual(Issue483.Issue483.UnsetMetaAttribute(Issue483.MetaAttribute.Presence), "required");
+ Assert.AreEqual(Issue483.Issue483.RequiredMetaAttribute(Issue483.MetaAttribute.Presence), "required");
+ Assert.AreEqual(Issue483.Issue483.ConstantMetaAttribute(Issue483.MetaAttribute.Presence), "constant");
+ Assert.AreEqual(Issue483.Issue483.OptionalMetaAttribute(Issue483.MetaAttribute.Presence), "optional");
+ }
+
+ }
+}
diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java
index fe53c6391d..2c371ade7b 100644
--- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java
+++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java
@@ -559,7 +559,8 @@ private void generateMetaAttributeEnum() throws IOException
INDENT + "{\n" +
INDENT + INDENT + "Epoch,\n" +
INDENT + INDENT + "TimeUnit,\n" +
- INDENT + INDENT + "SemanticType\n" +
+ INDENT + INDENT + "SemanticType,\n" +
+ INDENT + INDENT + "Presence\n" +
INDENT + "}\n" +
"}\n"
);
@@ -1092,6 +1093,7 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke
final String epoch = encoding.epoch() == null ? "" : encoding.epoch();
final String timeUnit = encoding.timeUnit() == null ? "" : encoding.timeUnit();
final String semanticType = encoding.semanticType() == null ? "" : encoding.semanticType();
+ final String presence = encoding.presence() == null ? "" : encoding.presence().toString().toLowerCase();
sb.append(String.format(
"\n" +
@@ -1102,13 +1104,15 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke
indent + INDENT + INDENT + "case MetaAttribute.Epoch: return \"%s\";\n" +
indent + INDENT + INDENT + "case MetaAttribute.TimeUnit: return \"%s\";\n" +
indent + INDENT + INDENT + "case MetaAttribute.SemanticType: return \"%s\";\n" +
+ indent + INDENT + INDENT + "case MetaAttribute.Presence: return \"%s\";\n" +
indent + INDENT + "}\n\n" +
indent + INDENT + "return \"\";\n" +
indent + "}\n",
toUpperFirstChar(token.name()),
epoch,
timeUnit,
- semanticType));
+ semanticType,
+ presence));
}
private CharSequence generateEnumFieldNotPresentCondition(
diff --git a/sbe-tool/src/test/resources/issue483.xml b/sbe-tool/src/test/resources/issue483.xml
new file mode 100644
index 0000000000..ae8411584b
--- /dev/null
+++ b/sbe-tool/src/test/resources/issue483.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+