Skip to content

Commit

Permalink
Correctly handle object type names when no role name is present.
Browse files Browse the repository at this point in the history
  • Loading branch information
N-Jansen committed Sep 16, 2024
1 parent f8fd6e9 commit c7f8aa2
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 9 deletions.
14 changes: 14 additions & 0 deletions gentest/src/main/java/example/C.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* (c) https://github.com/MontiCore/monticore */
package example;


public class C {


protected D d;

public void setD(D d) {
this.d = d;
}

}
17 changes: 17 additions & 0 deletions gentest/src/main/java/example/CBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/* (c) https://github.com/MontiCore/monticore */
package example;

import java.util.Optional;

public class CBuilder extends C {

public CBuilder d(D d) {
this.d = d;
return this;
}

public Optional<C> build() {
return Optional.of(this);
}

}
15 changes: 15 additions & 0 deletions gentest/src/main/java/example/D.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* (c) https://github.com/MontiCore/monticore */
package example;

public class D {

protected int i;

public int getI() {
return i;
}

public void setI(int i) {
this.i = i;
}
}
16 changes: 16 additions & 0 deletions gentest/src/main/java/example/DBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/* (c) https://github.com/MontiCore/monticore */
package example;

import java.util.Optional;

public class DBuilder extends D {

public DBuilder i(int i) {
this.i = i;
return this;
}

public Optional<D> build() {
return Optional.of(this);
}
}
8 changes: 8 additions & 0 deletions gentest/src/main/java/example/ExampleManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,12 @@ public static ABuilder aBuilder() {
public static BBuilder bBuilder() {
return new BBuilder();
}

public static CBuilder cBuilder() {
return new CBuilder();
}

public static DBuilder dBuilder() {
return new DBuilder();
}
}
21 changes: 15 additions & 6 deletions gentest/src/main/resources/Example.od
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,20 @@ objectdiagram Examples {

link foo <-> (blub) bar;

/*u1: User {
String username = "Alice";
String password = "Alice123";
String email = "alice@se-rwth.de";
SehubRole role = SehubRole.OWNER;
};*/



t1: C {};

d: D {
i = 1;
};

e: D {
i = 2;
};

link t1 -> d;
link t1 -> e;

}
28 changes: 28 additions & 0 deletions gentest/src/main/resources/symboltable/Example.cdsym
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,34 @@
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "C",
"spannedScope":{
"symbols":[
{
"kind":"de.monticore.cdassociation._symboltable.CDRoleSymbol",
"name":"d",
"fullName":"A.d",
"isDefinitiveNavigable":true,
"cardinality":"[1]",
"association":835477811,
"type":{
"kind":"de.monticore.types.check.SymTypeOfObject",
"objName":"D"
},
"isPublic":true
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "D",
"spannedScope":{

}
}
]
}
2 changes: 1 addition & 1 deletion gentest/src/test/java/GeneratedClassesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ public void setup() {
@Test
public void test() {
List<Object> list = new ExamplesInstantiator().instantiate();
assertEquals(2, list.size());
assertEquals(5, list.size());
}
}
23 changes: 21 additions & 2 deletions src/main/java/de/monticore/od2cd/OD2CDObjectVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,10 @@ protected String capFirst(String s) {
return s.substring(0, 1).toUpperCase() + s.substring(1);
}

protected String uncapFirst(String s) {
return s.substring(0, 1).toLowerCase() + s.substring(1);
}

protected Optional<CDRoleAdapter> findRole(String src, String tgt, String roleName) {
Optional<CDRoleAdapter> res = Optional.empty();

Expand All @@ -263,18 +267,33 @@ protected Optional<CDRoleAdapter> findRole(String src, String tgt, String roleNa
return res;
}

protected String findObjectAccessorName4Role(String tgt) {
// find object in OD
Optional<ASTODNamedObject> obj = diagram.getODElementList().stream()
.filter(ASTODNamedObject.class::isInstance)
.map(ASTODNamedObject.class::cast)
.filter(o -> o.getName().equals(tgt))
.findFirst();

if (obj.isPresent()) {
return uncapFirst(obj.get().getMCObjectType().printType());
}
return tgt;
}

protected String constructLink(String src, String tgt, String roleName, Optional<CDRoleAdapter> cdRole) {

String cardModifier = "set";
String cardModifier = "";
if (cdRole.isPresent()) {
cardModifier = cardModifier(cdRole.get());
}

if (OD4DevelopmentMill.globalScope().getSubScopes().size() == 1) {
return src + "." + ((roleName.isEmpty())
? tgt + cardModifier
? findObjectAccessorName4Role(tgt) + cardModifier
: roleName + cardModifier) + "(" + tgt + ")";
} else {
cardModifier = "set";
return src + "." + cardModifier + ((roleName.isEmpty())
? capFirst(tgt)
: capFirst(roleName)) + "(" + tgt + ")";
Expand Down

0 comments on commit c7f8aa2

Please sign in to comment.