From d8cb8cbeea816ff35b368e94a39b95a61d11b4cd Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Thu, 9 Apr 2026 02:23:15 +0200 Subject: [PATCH 01/10] add coco --- .../monticore/cdbasis/cocos/CDBasisCoCos.java | 1 + .../ConstructorNameEqualsClassNameCoCo.java | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/CDBasisCoCos.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/CDBasisCoCos.java index ed1415dc6..91161e150 100644 --- a/cdlang/src/main/java/de/monticore/cdbasis/cocos/CDBasisCoCos.java +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/CDBasisCoCos.java @@ -45,6 +45,7 @@ protected void addEbnfCoCos(CDBasisCoCoChecker checker) { checker.addCoCo(new CDClassImplementsOnlyInterfaces()); checker.addCoCo(new CDClassImplementsNotCyclic()); checker.addCoCo(new CDClassNameUpperCase()); + checker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); // CDType checker.addCoCo(new CDTypeNoInitializationOfDerivedAttribute()); diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java new file mode 100644 index 000000000..c1d5ce02d --- /dev/null +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java @@ -0,0 +1,37 @@ +/* (c) https://github.com/MontiCore/monticore */ +package de.monticore.cdbasis.cocos; + +import de.monticore.cd4codebasis._ast.ASTCDConstructor; +import de.monticore.cdbasis._ast.ASTCDClass; +import de.monticore.cdbasis._cocos.CDBasisASTCDClassCoCo; +import de.se_rwth.commons.logging.Log; + +/** + * Validates that all constructors of a CD class have the same name as the class. + * + * A constructor is identified as a method without a return type (CDConstructor). + * This CoCo ensures that generated Java code is valid, since Java requires + * constructors to have the same name as their class. + */ +public class ConstructorNameEqualsClassNameCoCo implements CDBasisASTCDClassCoCo { + + public static final String ERROR_CODE = "0xCDC50"; + public static final String ERROR_MESSAGE = ERROR_CODE + + ": Invalid constructor name '%s' in class '%s'. " + + "Constructors must have the same name as their class."; + + @Override + public void check(ASTCDClass node) { + String className = node.getName(); + + // Check all constructors in the class + for (ASTCDConstructor constructor : node.getCDConstructorList()) { + if (!constructor.getName().equals(className)) { + Log.error( + String.format(ERROR_MESSAGE, constructor.getName(), className), + constructor.get_SourcePositionStart() + ); + } + } + } +} From ec4d1973959e12b7dec461e666b9d4560ad4d308 Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Thu, 9 Apr 2026 02:41:34 +0200 Subject: [PATCH 02/10] add coco --- .../de/monticore/cd4codebasis/cocos/CD4CodeBasisCoCos.java | 4 ++++ .../cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cdlang/src/main/java/de/monticore/cd4codebasis/cocos/CD4CodeBasisCoCos.java b/cdlang/src/main/java/de/monticore/cd4codebasis/cocos/CD4CodeBasisCoCos.java index 03fa4e8ca..030fd8755 100644 --- a/cdlang/src/main/java/de/monticore/cd4codebasis/cocos/CD4CodeBasisCoCos.java +++ b/cdlang/src/main/java/de/monticore/cd4codebasis/cocos/CD4CodeBasisCoCos.java @@ -5,6 +5,7 @@ import de.monticore.cd4codebasis._cocos.CD4CodeBasisCoCoChecker; import de.monticore.cd4codebasis.cocos.ebnf.CD4CodeEnumConstantParameterMatchConstructorArguments; import de.monticore.cd4codebasis.cocos.ebnf.CDMethodSignatureParameterNamesUnique; +import de.monticore.cdbasis.cocos.ConstructorNameEqualsClassNameCoCo; import de.monticore.types.check.AbstractDerive; public class CD4CodeBasisCoCos extends CoCoParent { @@ -31,6 +32,9 @@ protected void addCheckerForAllCoCos(CD4CodeBasisCoCoChecker checker) { protected void addEbnfCoCos(CD4CodeBasisCoCoChecker checker) { super.addEbnfCoCos(checker); + // CDClass + checker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); + // CDMethodSignature checker.addCoCo(new CDMethodSignatureParameterNamesUnique()); diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java index c1d5ce02d..96c02e379 100644 --- a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java @@ -8,10 +8,6 @@ /** * Validates that all constructors of a CD class have the same name as the class. - * - * A constructor is identified as a method without a return type (CDConstructor). - * This CoCo ensures that generated Java code is valid, since Java requires - * constructors to have the same name as their class. */ public class ConstructorNameEqualsClassNameCoCo implements CDBasisASTCDClassCoCo { @@ -24,7 +20,6 @@ public class ConstructorNameEqualsClassNameCoCo implements CDBasisASTCDClassCoCo public void check(ASTCDClass node) { String className = node.getName(); - // Check all constructors in the class for (ASTCDConstructor constructor : node.getCDConstructorList()) { if (!constructor.getName().equals(className)) { Log.error( From 34cecedefc525f43e8136af3563ac6c541b9f205 Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Thu, 9 Apr 2026 02:42:09 +0200 Subject: [PATCH 03/10] add tests --- ...onstructorNameEqualsClassNameCoCoTest.java | 47 +++++++++++++++++++ .../ConstructorNameEqualsClassNameInvalid.cd | 15 ++++++ .../ConstructorNameEqualsClassNameValid.cd | 17 +++++++ 3 files changed, 79 insertions(+) create mode 100644 cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java create mode 100644 cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd create mode 100644 cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd diff --git a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java new file mode 100644 index 000000000..c0762c716 --- /dev/null +++ b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java @@ -0,0 +1,47 @@ +/* (c) https://github.com/MontiCore/monticore */ +package de.monticore.testcd4codebasis.cocos; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import de.monticore.cdbasis._ast.ASTCDCompilationUnit; +import de.monticore.cdbasis.cocos.ConstructorNameEqualsClassNameCoCo; +import de.monticore.testcd4codebasis.CD4CodeBasisTestBasis; +import de.se_rwth.commons.logging.Log; +import java.io.IOException; +import java.util.Optional; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +public class ConstructorNameEqualsClassNameCoCoTest extends CD4CodeBasisTestBasis { + + @Test + public void testValid() throws IOException { + coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); + final Optional optAST = p.parse( + getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")); + assertTrue(optAST.isPresent()); + final ASTCDCompilationUnit ast = optAST.get(); + Log.getFindings().clear(); + coCoChecker.checkAll(ast); + assertTrue(Log.getFindings().isEmpty(), "Valid constructors should not produce errors"); + } + + @Test + public void testInvalid() throws IOException { + coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); + final Optional optAST = p.parse( + getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")); + assertTrue(optAST.isPresent()); + final ASTCDCompilationUnit ast = optAST.get(); + Log.getFindings().clear(); + coCoChecker.checkAll(ast); + assertEquals(2, Log.getFindings().size(), "Invalid constructors should produce 2 errors"); + assertTrue(Log.getFindings().get(0).getMsg().startsWith("0xCDC50")); + assertTrue(Log.getFindings().get(1).getMsg().startsWith("0xCDC50")); + } + + @AfterEach + public void after() {} + +} \ No newline at end of file diff --git a/cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd b/cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd new file mode 100644 index 000000000..cb0ea3919 --- /dev/null +++ b/cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd @@ -0,0 +1,15 @@ +/* (c) https://github.com/MontiCore/monticore */ + +classdiagram ConstructorNameEqualsClassNameInvalid { + + class Payment { + public pay(); + public Payment(int amount); + } + + class Order { + public Order(); + public create(); + } + +} diff --git a/cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd b/cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd new file mode 100644 index 000000000..e427337a6 --- /dev/null +++ b/cdlang/src/test/resources/de/monticore/cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd @@ -0,0 +1,17 @@ +/* (c) https://github.com/MontiCore/monticore */ + +classdiagram ConstructorNameEqualsClassNameValid { + + class Payment { + public Payment(); + public Payment(int amount); + public void process(); + } + + class Handler { + public void execute(); + } + + class Delivery { } + +} From d8035acb50d6d6b4fcf613e80e773f3dff68f71a Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Sun, 3 May 2026 23:39:25 +0200 Subject: [PATCH 04/10] add endPosition --- .../cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java index 96c02e379..36c2d01cf 100644 --- a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java @@ -24,7 +24,8 @@ public void check(ASTCDClass node) { if (!constructor.getName().equals(className)) { Log.error( String.format(ERROR_MESSAGE, constructor.getName(), className), - constructor.get_SourcePositionStart() + constructor.get_SourcePositionStart(), + constructor.get_SourcePositionEnd() ); } } From eda0691a42d7da328e2bf6b365dd9fb13c7a157c Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Mon, 4 May 2026 00:06:58 +0200 Subject: [PATCH 05/10] Clear findings after each test --- ...onstructorNameEqualsClassNameCoCoTest.java | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java index c0762c716..828c4bec0 100644 --- a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java +++ b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java @@ -9,39 +9,45 @@ import de.monticore.testcd4codebasis.CD4CodeBasisTestBasis; import de.se_rwth.commons.logging.Log; import java.io.IOException; -import java.util.Optional; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; public class ConstructorNameEqualsClassNameCoCoTest extends CD4CodeBasisTestBasis { - + + @AfterEach + public void after() { + Log.getFindings().clear(); + } + @Test public void testValid() throws IOException { + // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - final Optional optAST = p.parse( - getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")); - assertTrue(optAST.isPresent()); - final ASTCDCompilationUnit ast = optAST.get(); - Log.getFindings().clear(); + + // When + final ASTCDCompilationUnit ast = p.parse( + getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")).orElseThrow(); coCoChecker.checkAll(ast); + + // Then assertTrue(Log.getFindings().isEmpty(), "Valid constructors should not produce errors"); } - + @Test public void testInvalid() throws IOException { + // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - final Optional optAST = p.parse( - getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")); - assertTrue(optAST.isPresent()); - final ASTCDCompilationUnit ast = optAST.get(); - Log.getFindings().clear(); + + // When + final ASTCDCompilationUnit ast = p.parse( + getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")).orElseThrow(); coCoChecker.checkAll(ast); + + // Then assertEquals(2, Log.getFindings().size(), "Invalid constructors should produce 2 errors"); assertTrue(Log.getFindings().get(0).getMsg().startsWith("0xCDC50")); assertTrue(Log.getFindings().get(1).getMsg().startsWith("0xCDC50")); } - - @AfterEach - public void after() {} - -} \ No newline at end of file + +} From 2f9c6919478c0b0d17bee097c0be0ec492b019cb Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Tue, 5 May 2026 14:10:38 +0200 Subject: [PATCH 06/10] spotless --- .../ConstructorNameEqualsClassNameCoCo.java | 14 +++++------ ...onstructorNameEqualsClassNameCoCoTest.java | 24 +++++++++---------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java index 36c2d01cf..439f0e66c 100644 --- a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java @@ -10,24 +10,22 @@ * Validates that all constructors of a CD class have the same name as the class. */ public class ConstructorNameEqualsClassNameCoCo implements CDBasisASTCDClassCoCo { - + public static final String ERROR_CODE = "0xCDC50"; public static final String ERROR_MESSAGE = ERROR_CODE + ": Invalid constructor name '%s' in class '%s'. " + "Constructors must have the same name as their class."; - + @Override public void check(ASTCDClass node) { String className = node.getName(); - + for (ASTCDConstructor constructor : node.getCDConstructorList()) { if (!constructor.getName().equals(className)) { - Log.error( - String.format(ERROR_MESSAGE, constructor.getName(), className), - constructor.get_SourcePositionStart(), - constructor.get_SourcePositionEnd() - ); + Log.error(String.format(ERROR_MESSAGE, constructor.getName(), className), constructor + .get_SourcePositionStart(), constructor.get_SourcePositionEnd()); } } } + } diff --git a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java index 828c4bec0..bc3004041 100644 --- a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java +++ b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java @@ -14,40 +14,40 @@ import org.junit.jupiter.api.Test; public class ConstructorNameEqualsClassNameCoCoTest extends CD4CodeBasisTestBasis { - + @AfterEach public void after() { Log.getFindings().clear(); } - + @Test public void testValid() throws IOException { // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - + // When - final ASTCDCompilationUnit ast = p.parse( - getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")).orElseThrow(); + final ASTCDCompilationUnit ast = p.parse(getFilePath( + "cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")).orElseThrow(); coCoChecker.checkAll(ast); - + // Then assertTrue(Log.getFindings().isEmpty(), "Valid constructors should not produce errors"); } - + @Test public void testInvalid() throws IOException { // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - + // When - final ASTCDCompilationUnit ast = p.parse( - getFilePath("cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")).orElseThrow(); + final ASTCDCompilationUnit ast = p.parse(getFilePath( + "cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")).orElseThrow(); coCoChecker.checkAll(ast); - + // Then assertEquals(2, Log.getFindings().size(), "Invalid constructors should produce 2 errors"); assertTrue(Log.getFindings().get(0).getMsg().startsWith("0xCDC50")); assertTrue(Log.getFindings().get(1).getMsg().startsWith("0xCDC50")); } - + } From 70553a07065920ede59046bdc9f2ec018d105934 Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Tue, 5 May 2026 14:11:29 +0200 Subject: [PATCH 07/10] spotless --- .../cocos/ConstructorNameEqualsClassNameCoCo.java | 7 +++---- .../ConstructorNameEqualsClassNameCoCoTest.java | 15 +++++++-------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java index 439f0e66c..3a365c940 100644 --- a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java @@ -10,16 +10,16 @@ * Validates that all constructors of a CD class have the same name as the class. */ public class ConstructorNameEqualsClassNameCoCo implements CDBasisASTCDClassCoCo { - + public static final String ERROR_CODE = "0xCDC50"; public static final String ERROR_MESSAGE = ERROR_CODE + ": Invalid constructor name '%s' in class '%s'. " + "Constructors must have the same name as their class."; - + @Override public void check(ASTCDClass node) { String className = node.getName(); - + for (ASTCDConstructor constructor : node.getCDConstructorList()) { if (!constructor.getName().equals(className)) { Log.error(String.format(ERROR_MESSAGE, constructor.getName(), className), constructor @@ -27,5 +27,4 @@ public void check(ASTCDClass node) { } } } - } diff --git a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java index bc3004041..28250bd52 100644 --- a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java +++ b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java @@ -14,40 +14,39 @@ import org.junit.jupiter.api.Test; public class ConstructorNameEqualsClassNameCoCoTest extends CD4CodeBasisTestBasis { - + @AfterEach public void after() { Log.getFindings().clear(); } - + @Test public void testValid() throws IOException { // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - + // When final ASTCDCompilationUnit ast = p.parse(getFilePath( "cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")).orElseThrow(); coCoChecker.checkAll(ast); - + // Then assertTrue(Log.getFindings().isEmpty(), "Valid constructors should not produce errors"); } - + @Test public void testInvalid() throws IOException { // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - + // When final ASTCDCompilationUnit ast = p.parse(getFilePath( "cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")).orElseThrow(); coCoChecker.checkAll(ast); - + // Then assertEquals(2, Log.getFindings().size(), "Invalid constructors should produce 2 errors"); assertTrue(Log.getFindings().get(0).getMsg().startsWith("0xCDC50")); assertTrue(Log.getFindings().get(1).getMsg().startsWith("0xCDC50")); } - } From 76f13e53881c911c07019ffeb37222ab51048ef0 Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Wed, 6 May 2026 14:37:47 +0200 Subject: [PATCH 08/10] Revert changes --- .../de/monticore/cdconcretization/banking/BankingOut.cd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd b/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd index af828452a..fdc02891d 100644 --- a/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd +++ b/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd @@ -21,8 +21,8 @@ classdiagram BankingCon { // sends money from sourceAccount to targetAccount class Transaction { - <>BankAccount sourceBankAccount; - <>BankAccount targetBankAccount; + BankAccount sourceAccount; + BankAccount targetAccount; double amount; } @@ -30,4 +30,4 @@ classdiagram BankingCon { association SEPABank (sEPABank) -> (customer) Customer [*]; association [*] BankAccount (bankAccount) <-> (customer) Customer [*]; association BankAccount (bankAccount) -> (transaction) Transaction [*] <>; -} +} \ No newline at end of file From 32a6daad3af0de54c304da835156fc4100289c98 Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Wed, 6 May 2026 14:42:55 +0200 Subject: [PATCH 09/10] solve spotless --- .../cocos/ConstructorNameEqualsClassNameCoCo.java | 7 ++++--- .../ConstructorNameEqualsClassNameCoCoTest.java | 15 ++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java index 3a365c940..439f0e66c 100644 --- a/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java +++ b/cdlang/src/main/java/de/monticore/cdbasis/cocos/ConstructorNameEqualsClassNameCoCo.java @@ -10,16 +10,16 @@ * Validates that all constructors of a CD class have the same name as the class. */ public class ConstructorNameEqualsClassNameCoCo implements CDBasisASTCDClassCoCo { - + public static final String ERROR_CODE = "0xCDC50"; public static final String ERROR_MESSAGE = ERROR_CODE + ": Invalid constructor name '%s' in class '%s'. " + "Constructors must have the same name as their class."; - + @Override public void check(ASTCDClass node) { String className = node.getName(); - + for (ASTCDConstructor constructor : node.getCDConstructorList()) { if (!constructor.getName().equals(className)) { Log.error(String.format(ERROR_MESSAGE, constructor.getName(), className), constructor @@ -27,4 +27,5 @@ public void check(ASTCDClass node) { } } } + } diff --git a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java index 28250bd52..bc3004041 100644 --- a/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java +++ b/cdlang/src/test/java/de/monticore/testcd4codebasis/cocos/ConstructorNameEqualsClassNameCoCoTest.java @@ -14,39 +14,40 @@ import org.junit.jupiter.api.Test; public class ConstructorNameEqualsClassNameCoCoTest extends CD4CodeBasisTestBasis { - + @AfterEach public void after() { Log.getFindings().clear(); } - + @Test public void testValid() throws IOException { // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - + // When final ASTCDCompilationUnit ast = p.parse(getFilePath( "cd4codebasis/cocos/ConstructorNameEqualsClassNameValid.cd")).orElseThrow(); coCoChecker.checkAll(ast); - + // Then assertTrue(Log.getFindings().isEmpty(), "Valid constructors should not produce errors"); } - + @Test public void testInvalid() throws IOException { // Given coCoChecker.addCoCo(new ConstructorNameEqualsClassNameCoCo()); - + // When final ASTCDCompilationUnit ast = p.parse(getFilePath( "cd4codebasis/cocos/ConstructorNameEqualsClassNameInvalid.cd")).orElseThrow(); coCoChecker.checkAll(ast); - + // Then assertEquals(2, Log.getFindings().size(), "Invalid constructors should produce 2 errors"); assertTrue(Log.getFindings().get(0).getMsg().startsWith("0xCDC50")); assertTrue(Log.getFindings().get(1).getMsg().startsWith("0xCDC50")); } + } From 8deadafc5f43a8597f327301937df4fe9d7d5d38 Mon Sep 17 00:00:00 2001 From: Vanol Nguemo Tadoum Date: Wed, 6 May 2026 14:48:10 +0200 Subject: [PATCH 10/10] solve spotless --- .../de/monticore/cdconcretization/banking/BankingOut.cd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd b/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd index fdc02891d..af828452a 100644 --- a/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd +++ b/cdtool/src/test/resources/de/monticore/cdconcretization/banking/BankingOut.cd @@ -21,8 +21,8 @@ classdiagram BankingCon { // sends money from sourceAccount to targetAccount class Transaction { - BankAccount sourceAccount; - BankAccount targetAccount; + <>BankAccount sourceBankAccount; + <>BankAccount targetBankAccount; double amount; } @@ -30,4 +30,4 @@ classdiagram BankingCon { association SEPABank (sEPABank) -> (customer) Customer [*]; association [*] BankAccount (bankAccount) <-> (customer) Customer [*]; association BankAccount (bankAccount) -> (transaction) Transaction [*] <>; -} \ No newline at end of file +}