From c65275be9fce0fbba70094c754690a8bd9228ab4 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 22 Dec 2023 02:19:38 +0100 Subject: feat: solution serializer --- .../language/formatting2/ProblemFormatter.java | 16 +++++++++-- ...ferShortAssertionsProblemSemanticSequencer.java | 6 ++-- .../tests/serializer/ProblemSerializerTest.java | 32 ++++++++-------------- 3 files changed, 28 insertions(+), 26 deletions(-) (limited to 'subprojects/language') diff --git a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java index 55a5ac20..770a1a19 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java +++ b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java @@ -75,6 +75,16 @@ public class ProblemFormatter extends AbstractJavaFormatter { } } + protected void format(EnumDeclaration enumDeclaration, IFormattableDocument doc) { + surroundNewLines(doc, enumDeclaration, this::twoNewLines); + var region = regionFor(enumDeclaration); + doc.append(region.keyword("enum"), this::oneSpace); + doc.prepend(region.keyword("{"), this::oneSpace); + doc.append(region.keyword("{"), it -> it.setNewLines(1, 1, 2)); + doc.prepend(region.keyword("}"), it -> it.setNewLines(1, 1, 2)); + doc.prepend(region.keyword("."), this::noSpace); + } + protected void format(PredicateDefinition predicateDefinition, IFormattableDocument doc) { surroundNewLines(doc, predicateDefinition, this::twoNewLines); var region = regionFor(predicateDefinition); @@ -151,14 +161,14 @@ public class ProblemFormatter extends AbstractJavaFormatter { } protected void surroundNewLines(IFormattableDocument doc, EObject eObject, - Procedure1 init) { + Procedure1 init) { var region = doc.getRequest().getTextRegionAccess().regionForEObject(eObject); preprendNewLines(doc, region, init); appendNewLines(doc, region, init); } protected void preprendNewLines(IFormattableDocument doc, ISequentialRegion region, - Procedure1 init) { + Procedure1 init) { if (region == null) { return; } @@ -174,7 +184,7 @@ public class ProblemFormatter extends AbstractJavaFormatter { } protected void appendNewLines(IFormattableDocument doc, ISequentialRegion region, - Procedure1 init) { + Procedure1 init) { if (region == null) { return; } diff --git a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java index b9cafbc2..3432b2d8 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java +++ b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java @@ -21,8 +21,7 @@ public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemant @Override protected void sequence_Assertion(ISerializationContext context, Assertion semanticObject) { - if (semanticObject.isDefault() || - !(semanticObject.getValue() instanceof LogicConstant logicConstant) || + if (!(semanticObject.getValue() instanceof LogicConstant logicConstant) || logicConstant.getLogicValue() == LogicValue.ERROR) { super.sequence_Assertion(context, semanticObject); return; @@ -39,6 +38,9 @@ public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemant } var feeder = createSequencerFeeder(context, semanticObject); var access = grammarAccess.getAssertionAccess(); + if (semanticObject.isDefault()) { + feeder.accept(access.getDefaultDefaultKeyword_0_0()); + } feeder.accept(access.getValueShortLogicConstantParserRuleCall_1_1_0_0(), logicConstant); feeder.accept(access.getRelationRelationQualifiedNameParserRuleCall_1_1_1_0_1(), semanticObject.getRelation()); var iterator = semanticObject.getArguments().iterator(); diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java index 9f4f2bbf..4a3a9ac2 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java @@ -74,8 +74,8 @@ class ProblemSerializerTest { } @ParameterizedTest - @MethodSource - void defaultAssertionTest(LogicValue value, String valueAsString) { + @MethodSource("assertionTest") + void defaultAssertionTest(LogicValue value, String serializedAssertion) { var pred = createPred(); var node = ProblemFactory.eINSTANCE.createNode(); node.setName("a"); @@ -88,12 +88,7 @@ class ProblemSerializerTest { pred foo(node p). indiv a. - default foo(a):\040""" + valueAsString + ".\n"); - } - - static Stream defaultAssertionTest() { - return Stream.of(Arguments.of(LogicValue.TRUE, "true"), Arguments.of(LogicValue.FALSE, "false"), - Arguments.of(LogicValue.UNKNOWN, "unknown"), Arguments.of(LogicValue.ERROR, "error")); + default\040""" + serializedAssertion + "\n"); } @Test @@ -233,19 +228,14 @@ class ProblemSerializerTest { } private void assertSerializedResult(String expected) { - var outputStream = new ByteArrayOutputStream(); - try { - resource.save(outputStream, Map.of()); - } catch (IOException e) { - throw new AssertionError("Failed to serialize problem", e); - } finally { - try { - outputStream.close(); - } catch (IOException e) { - // Nothing to handle in a test. - } - } - var problemString = outputStream.toString(); + String problemString; + try (var outputStream = new ByteArrayOutputStream()) { + resource.save(outputStream, Map.of()); + problemString = outputStream.toString(); + } catch (IOException e) { + throw new AssertionError("Failed to serialize problem", e); + } + // Nothing to handle in a test. assertThat(problemString.replace("\r\n", "\n"), equalTo(expected.replace("\r\n", "\n"))); } -- cgit v1.2.3-70-g09d2