Skip to content

Commit e86b617

Browse files
committed
* SysML2PlantUMLText, Visitor (toBeRendered): Added
* VDefault (isEmpty): Check Specialization except for ReferenceSubsetting (addShorthandRelation): Use toBeRendered() to check if the target is rendered.
1 parent a11b968 commit e86b617

3 files changed

Lines changed: 33 additions & 9 deletions

File tree

org.omg.sysml.plantuml/src/org/omg/sysml/plantuml/SysML2PlantUMLText.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,17 @@ private void addStyleHeader(StringBuilder sb) {
474474
sb.append('\n');
475475
}
476476

477+
private List<Element> topElements;
478+
479+
/* package */ boolean toBeRendered(EObject eObj) {
480+
while (eObj != null) {
481+
if (!(eObj instanceof Element)) return false;
482+
if (topElements.contains((Element) eObj)) return true;
483+
eObj = eObj.eContainer();
484+
}
485+
return false;
486+
}
487+
477488
public String sysML2PUML(List<? extends EObject> eObjs) {
478489
initStyle();
479490
this.vpath = new VPath();
@@ -487,9 +498,11 @@ public String sysML2PUML(List<? extends EObject> eObjs) {
487498
init();
488499

489500
numVisits = 0;
501+
this.topElements = new ArrayList<>(eObjs.size());
490502
for (EObject eObj : eObjs) {
491503
if (eObj instanceof Element) {
492504
Element e = (Element) eObj;
505+
topElements.add(e);
493506
vpath.visit(e);
494507
}
495508
}

org.omg.sysml.plantuml/src/org/omg/sysml/plantuml/VDefault.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import org.omg.sysml.lang.sysml.Subsetting;
6666
import org.omg.sysml.lang.sysml.Type;
6767
import org.omg.sysml.lang.sysml.Usage;
68+
import org.omg.sysml.util.FeatureUtil;
6869

6970
public class VDefault extends VTraverser {
7071
protected void addConnector(Element rel, Connector c, String desc) {
@@ -317,14 +318,18 @@ protected static boolean isEmptyObjective(ObjectiveMembership om) {
317318
}
318319

319320
private static boolean isEmpty(Feature f) {
320-
for (Membership ms: toOwnedMembershipArray(f)) {
321-
if (!(ms instanceof OwningMembership)) continue;
322-
if (ms instanceof SubjectMembership) {
323-
if (isEmptySubject((SubjectMembership) ms)) continue;
321+
for (Relationship rel: toOwnedRelationshipArray(f)) {
322+
if (rel instanceof Specialization) {
323+
if (rel instanceof ReferenceSubsetting) continue;
324+
return false;
325+
}
326+
if (!(rel instanceof OwningMembership)) continue;
327+
if (rel instanceof SubjectMembership) {
328+
if (isEmptySubject((SubjectMembership) rel)) continue;
324329
return false;
325330
}
326-
if (ms instanceof ObjectiveMembership) {
327-
if (isEmptyObjective((ObjectiveMembership) ms)) continue;
331+
if (rel instanceof ObjectiveMembership) {
332+
if (isEmptyObjective((ObjectiveMembership) rel)) continue;
328333
return false;
329334
}
330335
return false;
@@ -338,8 +343,10 @@ private boolean addShorthandRelation(Usage u, String title) {
338343
if (u.getDeclaredShortName() != null) return false;
339344
ReferenceSubsetting rs = u.getOwnedReferenceSubsetting();
340345
if (rs == null) return false;
341-
Feature tgt = rs.getReferencedFeature();
342-
if (!checkId(tgt)) return false; // If the target does not exist, we render a distinct node.
346+
Feature ref = rs.getReferencedFeature();
347+
Feature tgt = FeatureUtil.getFirstChainingFeatureOf(ref);
348+
if (tgt == null) tgt = ref;
349+
if (!toBeRendered(tgt)) return false; // If the target is not rendered, we render a distinct node.
343350

344351
if (!isEmpty(u)) return false;
345352

@@ -349,7 +356,7 @@ private boolean addShorthandRelation(Usage u, String title) {
349356
if (!(owner instanceof Type)) return false;
350357
if (!checkId(owner)) return false;
351358

352-
addPRelation(owner, tgt, u, title);
359+
addPRelation(owner, ref, u, title);
353360

354361
return true;
355362
}

org.omg.sysml.plantuml/src/org/omg/sysml/plantuml/Visitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,10 @@ private boolean exists(Element e) {
627627
return checkId(e);
628628
}
629629

630+
protected boolean toBeRendered(Element e) {
631+
return s2p.toBeRendered(e);
632+
}
633+
630634
private void renderImportedPackage(org.omg.sysml.lang.sysml.Package pkg, Collection<Element> nonPkgs) {
631635
String name = pkg.getQualifiedName();
632636
if (name == null) return;

0 commit comments

Comments
 (0)