From 1569ac120e6066dd536ea56daa86ecb5f27190f0 Mon Sep 17 00:00:00 2001 From: irof Date: Sat, 18 Jan 2025 17:54:39 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9D=8C=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E9=96=A2=E9=80=A3=E5=9B=B3=E3=81=8C=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=AB=E3=81=AA=E3=82=8B=E5=86=8D=E7=8F=BE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagrams/PackageRelationDiagramTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java b/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java index 81dc2e97b..c155f6d4b 100644 --- a/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java +++ b/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java @@ -83,6 +83,21 @@ class PackageRelationDiagramTest { "\"a.aa.aaa\" -> \"b\";", "subgraph \"cluster_a.aa\"" ) + ), + Arguments.argumentSet("階層がずれた関連を1階層切り詰める", + new PackageIdentifiers(List.of( + PackageIdentifier.valueOf("a.aa.aaa"), + PackageIdentifier.valueOf("a.aa.aab.aaba"), + PackageIdentifier.valueOf("b") + )), + new ClassRelations(List.of( + new ClassRelation(TypeIdentifier.valueOf("a.aa.aaa.Foo"), TypeIdentifier.valueOf("a.aa.aab.aaba.Bar")), + new ClassRelation(TypeIdentifier.valueOf("a.aa.aaa.Foo"), TypeIdentifier.valueOf("b.Bbb")) + )), + 2, + List.of( + "\"a.aa\" -> \"b\";" + ) ) ); } From 61e787ef20c3c92b894d6f0297d68954a6461caf Mon Sep 17 00:00:00 2001 From: irof Date: Sat, 18 Jan 2025 18:18:04 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=9F=A2=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E9=96=A2=E9=80=A3=E5=9B=B3=E3=81=A7=E3=83=87?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=8C=E5=85=B1=E9=80=9A=E3=81=AE=E8=A6=AA?= =?UTF-8?q?=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC=E3=82=B8=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=82=8B=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92?= =?UTF-8?q?=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/model/data/packages/PackageIdentifier.java | 7 +++++++ .../domain/model/documents/stationery/Labeler.java | 11 ++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/jig-core/src/main/java/org/dddjava/jig/domain/model/data/packages/PackageIdentifier.java b/jig-core/src/main/java/org/dddjava/jig/domain/model/data/packages/PackageIdentifier.java index 767d20fde..d599f2262 100644 --- a/jig-core/src/main/java/org/dddjava/jig/domain/model/data/packages/PackageIdentifier.java +++ b/jig-core/src/main/java/org/dddjava/jig/domain/model/data/packages/PackageIdentifier.java @@ -67,6 +67,13 @@ public String asText() { return value; } + public Optional parentIfExist() { + PackageIdentifier parent = parent(); + if (parent.value.equals("(default)")) return Optional.empty(); + return Optional.of(parent); + } + + // TODO (default) がでてきた場合にを型で識別できないので、使わないようにした方が良さそう public PackageIdentifier parent() { String[] split = value.split("\\."); diff --git a/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java b/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java index 699622a55..2d1f793c3 100644 --- a/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java +++ b/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java @@ -61,8 +61,13 @@ public void applyContext(Collection contextPackages) { // 全てで共通する部分を抜き出す String commonPrefix = null; for (PackageIdentifier currentPackageIdentifier : contextPackages) { - PackageIdentifier currentParentPackageIdentifier = currentPackageIdentifier.parent(); - String currentText = currentParentPackageIdentifier.asText(); + Optional packageIdentifier = currentPackageIdentifier.parentIfExist(); + if (packageIdentifier.isEmpty()) { + continue; + } + String currentText = packageIdentifier.orElseThrow().asText(); + + packageIdentifier.map(PackageIdentifier::asText); if (commonPrefix == null) { commonPrefix = currentText; continue; @@ -80,7 +85,7 @@ public void applyContext(Collection contextPackages) { commonPrefix = commonPrefix.substring(0, commonPrefixLength); } - this.commonPrefix = Optional.of(trimDot(commonPrefix)); + this.commonPrefix = Optional.ofNullable(commonPrefix).map(this::trimDot); } public String contextDescription() { From ffadffd697d7d32d45f5d1a92d79b1f75ce1adc4 Mon Sep 17 00:00:00 2001 From: irof Date: Sat, 18 Jan 2025 22:27:05 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E2=9D=8C=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E9=96=A2=E9=80=A3=E5=9B=B3=E3=81=8C=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=AB=E3=81=AA=E3=82=8B=E5=86=8D=E7=8F=BE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagrams/PackageRelationDiagramTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java b/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java index c155f6d4b..4476d2dea 100644 --- a/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java +++ b/jig-core/src/test/java/org/dddjava/jig/domain/model/documents/diagrams/PackageRelationDiagramTest.java @@ -98,6 +98,22 @@ class PackageRelationDiagramTest { List.of( "\"a.aa\" -> \"b\";" ) + ), + Arguments.argumentSet("デフォルトパッケージを扱える", + new PackageIdentifiers(List.of( + PackageIdentifier.valueOf("a.aa.aaa.aaaa.aaaaa"), + PackageIdentifier.valueOf("a.aa.aaa.aaaa.aaaab"), + PackageIdentifier.defaultPackage(), + PackageIdentifier.valueOf("a") + )), + new ClassRelations(List.of( + new ClassRelation(TypeIdentifier.valueOf("a.aa.aaa.aaaa.aaaaa.Hoge"), TypeIdentifier.valueOf("a.aa.aaa.aaaa.aaaab.Fuga")), + new ClassRelation(TypeIdentifier.valueOf("a.aa.aaa.aaaa.aaaaa.Hoge"), TypeIdentifier.valueOf("DefaultPackageClass")) + )), + 4, + List.of( + "\"a.aa.aaa.aaaa\" -> \"(default)\";" + ) ) ); } From 19bcba7361e54bda78bfcfba6d1b83dc46148344 Mon Sep 17 00:00:00 2001 From: irof Date: Sat, 18 Jan 2025 22:32:59 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=9F=A2=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E9=96=A2=E9=80=A3=E5=9B=B3=E3=81=A7=E3=83=87?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=8C=E3=81=82=E3=82=8B=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=81=ABroot=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=8C=E3=81=82=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AB=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=AB=E3=81=AA=E3=82=8B=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E3=82=92=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rootパッケージの名前が(default)より長い場合に発生する。 一般的な慣習ではドメイン逆転なので長くなるだろうから、デフォルトパッケージのクラスが対象だと起こる。 デフォルトパッケージとか使話ないので検出されなかった。 --- .../jig/domain/model/documents/stationery/Labeler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java b/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java index 2d1f793c3..48441cc5e 100644 --- a/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java +++ b/jig-core/src/main/java/org/dddjava/jig/domain/model/documents/stationery/Labeler.java @@ -29,7 +29,9 @@ public String label(PackageIdentifier packageIdentifier, PackageIdentifier paren public String label(PackageIdentifier packageIdentifier) { String fqn = packageIdentifier.asText(); - String labelText = commonPrefix.map(String::length).map(index -> trimDot(fqn.substring(index))) + String labelText = commonPrefix + .filter(fqn::startsWith) + .map(prefix -> trimDot(fqn.substring(prefix.length()))) .orElse(fqn); return addAliasIfExists(packageIdentifier, labelText);