From 7873bd1d541a829d2ab9ae1f0888b3ba54efcd92 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Fri, 29 Dec 2023 11:19:48 +0100 Subject: [PATCH 1/5] extend domain model overview diagram Signed-off-by: Manfred Hanke --- docs/userguide/006_The_Core_API.adoc | 155 ++++++++++++++++++++------- 1 file changed, 116 insertions(+), 39 deletions(-) diff --git a/docs/userguide/006_The_Core_API.adoc b/docs/userguide/006_The_Core_API.adoc index c5fdac4036..43d41ac9a9 100644 --- a/docs/userguide/006_The_Core_API.adoc +++ b/docs/userguide/006_The_Core_API.adoc @@ -89,45 +89,122 @@ like this: [plantuml, "domain-overview"] ---- -skinparam componentStyle uml2 - -skinparam component { - BorderColor #grey - BackgroundColor #white -} - -skinparam class { - BorderColor #grey - BackgroundColor #white -} - -class JavaPackage -class JavaClass -class JavaMember -class JavaField -class JavaCodeUnit -class ThrowsClause -class JavaConstructor -class JavaMethod -class JavaStaticInitializer - -class JavaFieldAccess -class JavaConstructorCall -class JavaMethodCall - -JavaPackage *--* "1..*" JavaClass : has -JavaClass *-- "0..*" JavaMember : has -JavaMember <|-- JavaField : extends -JavaMember <|-- JavaCodeUnit : extends -JavaCodeUnit <|-- JavaConstructor : extends -JavaCodeUnit <|-- JavaMethod : extends -JavaCodeUnit <|-- JavaStaticInitializer : extends -JavaConstructor *-- "1" ThrowsClause : has -JavaMethod *-- "1" ThrowsClause : has - -JavaCodeUnit *-- "0..*" JavaFieldAccess : has -JavaCodeUnit *-- "0..*" JavaMethodCall : has -JavaCodeUnit *-- "0..*" JavaConstructorCall : has +@startuml +skinparam hyperlinkUnderline false +hide empty members + +!function $getDomainLink($name, $prefix="") !return "[[https://javadoc.io/doc/com.tngtech.archunit/archunit/latest/com/tngtech/archunit/core/domain/" + $prefix + $name + ".html " + $name + "]]" +!function $getAccessTargetLink($name) !return $getDomainLink($name, "AccessTarget.") + +!unquoted procedure domainLink($name, $parameter="") + "$getDomainLink($name)$parameter " as $name +!endprocedure + +!unquoted procedure accessTargetLink($name) + "$getAccessTargetLink($name) " as $name +!endprocedure + +interface domainLink(JavaType) +interface domainLink(JavaParameterizedType) +class domainLink(JavaGenericArrayType) +class domainLink(JavaWildcardType) +class domainLink(JavaTypeVariable) + +class domainLink(JavaClasses)<>> + +class domainLink(JavaPackage) +class domainLink(JavaClass) +abstract class domainLink(JavaMember) + +class domainLink(JavaField) +abstract class domainLink(JavaCodeUnit) +class domainLink(JavaParameter) +class domainLink(JavaMethod) +class domainLink(JavaConstructor) +class domainLink(JavaStaticInitializer) + +class domainLink(JavaAnnotation, ) + +class domainLink(ThrowsClause, )<>> +class domainLink(ThrowsDeclaration) +class domainLink(ReferencedClassObject) +class domainLink(InstanceofCheck) +class domainLink(TryCatchBlock) +abstract class domainLink(JavaAccess, \n) +class domainLink(JavaFieldAccess) +abstract class domainLink(JavaCodeUnitAccess, \n) +abstract class domainLink(JavaCodeUnitReference, \n) +class domainLink(JavaMethodReference) +class domainLink(JavaConstructorReference) +abstract class domainLink(JavaCall, \n) +class domainLink(JavaMethodCall) +class domainLink(JavaConstructorCall) + +abstract class domainLink(AccessTarget) +class accessTargetLink(FieldAccessTarget) +abstract class accessTargetLink(CodeUnitAccessTarget) +abstract class accessTargetLink(CodeUnitReferenceTarget) +class accessTargetLink(MethodReferenceTarget) +class accessTargetLink(ConstructorReferenceTarget) +abstract class accessTargetLink(CodeUnitCallTarget) +class accessTargetLink(MethodCallTarget) +class accessTargetLink(ConstructorCallTarget) + +JavaClass ---u-|> JavaType +JavaParameterizedType --|> JavaType +JavaTypeVariable --|> JavaType +JavaGenericArrayType --|> JavaType +JavaWildcardType --|> JavaType + +JavaClasses -. JavaClass : contains > + +JavaPackage ||-{ "1..*" JavaClass : has > + +JavaParameter ||--{ "0..*" JavaAnnotation : has > +JavaPackage ||--{ "0..*" JavaAnnotation : has > +JavaClass ||--{ "0..*" JavaAnnotation : has > +JavaMember ||--{ "0..*" JavaAnnotation : has > + +JavaClass ||-{ "0..*" JavaMember : has > + +JavaMember <|-- JavaField +JavaMember <|--r- JavaCodeUnit + +JavaCodeUnit ||--{ "0..*" JavaParameter : has > +JavaCodeUnit <|-- JavaMethod +JavaCodeUnit <|--- JavaConstructor +JavaCodeUnit <|-- JavaStaticInitializer + +JavaCodeUnit ||--u{ "0..*" InstanceofCheck : has > +JavaCodeUnit ||--u{ "0..*" ReferencedClassObject : has > +JavaCodeUnit ||--u|| "1" ThrowsClause : has > +JavaCodeUnit ||--u{ "0..*" TryCatchBlock : has > +JavaCodeUnit ||--r-{ "0..*" JavaAccess : has > + +ThrowsClause ||-u-{ "0..*" ThrowsDeclaration : has > + +JavaAccess <|-- JavaFieldAccess : T =\n$getAccessTargetLink(FieldAccessTarget) +JavaAccess <|-- JavaCodeUnitAccess + +JavaCodeUnitAccess <|-- JavaCall +JavaCall <|-- JavaMethodCall : T =\n$getAccessTargetLink(MethodCallTarget) +JavaCall <|--- JavaConstructorCall : T=\n$getAccessTargetLink(ConstructorCallTarget) + +JavaCodeUnitAccess <|-- JavaCodeUnitReference +JavaCodeUnitReference <|-- JavaMethodReference : T=\n$getAccessTargetLink(MethodReferenceTarget) +JavaCodeUnitReference <|--- JavaConstructorReference : T=\n$getAccessTargetLink(ConstructorReferenceTarget) + +JavaAccess ||-r-|| "1" AccessTarget : has > +FieldAccessTarget -u-|> AccessTarget +FieldAccessTarget -[hidden]r-> CodeUnitAccessTarget +CodeUnitAccessTarget -u-|> AccessTarget +CodeUnitCallTarget -u-|> CodeUnitAccessTarget +MethodCallTarget -u-|> CodeUnitCallTarget +ConstructorCallTarget --u-|> CodeUnitCallTarget +CodeUnitReferenceTarget -u-|> CodeUnitAccessTarget +MethodReferenceTarget -u-|> CodeUnitReferenceTarget +ConstructorReferenceTarget --u-|> CodeUnitReferenceTarget +@enduml ---- Most objects resemble the Java Reflection API, including inheritance relations. Thus a `JavaClass` From 3a1d857c722d61fa9da2581137b780cb397317f0 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Fri, 29 Dec 2023 11:33:36 +0100 Subject: [PATCH 2/5] remove AccessTarget hierarchy from domain model overview diagram as the same information is already present in the JavaAccess hierarchy Signed-off-by: Manfred Hanke --- docs/userguide/006_The_Core_API.adoc | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/docs/userguide/006_The_Core_API.adoc b/docs/userguide/006_The_Core_API.adoc index 43d41ac9a9..73c48bb785 100644 --- a/docs/userguide/006_The_Core_API.adoc +++ b/docs/userguide/006_The_Core_API.adoc @@ -140,16 +140,6 @@ abstract class domainLink(JavaCall, \n JavaType JavaParameterizedType --|> JavaType JavaTypeVariable --|> JavaType @@ -193,17 +183,6 @@ JavaCall <|--- JavaConstructorCall : T=\n$getAccessTargetLink(ConstructorCallTar JavaCodeUnitAccess <|-- JavaCodeUnitReference JavaCodeUnitReference <|-- JavaMethodReference : T=\n$getAccessTargetLink(MethodReferenceTarget) JavaCodeUnitReference <|--- JavaConstructorReference : T=\n$getAccessTargetLink(ConstructorReferenceTarget) - -JavaAccess ||-r-|| "1" AccessTarget : has > -FieldAccessTarget -u-|> AccessTarget -FieldAccessTarget -[hidden]r-> CodeUnitAccessTarget -CodeUnitAccessTarget -u-|> AccessTarget -CodeUnitCallTarget -u-|> CodeUnitAccessTarget -MethodCallTarget -u-|> CodeUnitCallTarget -ConstructorCallTarget --u-|> CodeUnitCallTarget -CodeUnitReferenceTarget -u-|> CodeUnitAccessTarget -MethodReferenceTarget -u-|> CodeUnitReferenceTarget -ConstructorReferenceTarget --u-|> CodeUnitReferenceTarget @enduml ---- From 34899667627454282a1faa1f7d1b0e87a95282c2 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Fri, 29 Dec 2023 14:54:32 +0100 Subject: [PATCH 3/5] render PlantUML diagrams as (interactive) SVGs included as ``` --- docs/userguide/004_What_to_Check.adoc | 18 +++++++++--------- docs/userguide/006_The_Core_API.adoc | 8 ++++---- docs/userguide/007_The_Lang_API.adoc | 2 +- docs/userguide/008_The_Library_API.adoc | 10 +++++----- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/userguide/004_What_to_Check.adoc b/docs/userguide/004_What_to_Check.adoc index 473b02fab6..5fa46b49bb 100644 --- a/docs/userguide/004_What_to_Check.adoc +++ b/docs/userguide/004_What_to_Check.adoc @@ -4,7 +4,7 @@ The following section illustrates some typical checks you could do with ArchUnit === Package Dependency Checks -[plantuml, "package-deps-no-access"] +[plantuml, "package-deps-no-access", svg, opts=interactive] ---- skinparam componentStyle uml2 skinparam component { @@ -23,7 +23,7 @@ noClasses().that().resideInAPackage("..source..") .should().dependOnClassesThat().resideInAPackage("..foo..") ---- -[plantuml, "package-deps-only-access"] +[plantuml, "package-deps-only-access", svg, opts=interactive] ---- skinparam componentStyle uml2 skinparam component { @@ -47,7 +47,7 @@ classes().that().resideInAPackage("..foo..") === Class Dependency Checks -[plantuml, "class-naming-deps"] +[plantuml, "class-naming-deps", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -79,7 +79,7 @@ classes().that().haveNameMatching(".*Bar") === Class and Package Containment Checks -[plantuml, "class-package-contain"] +[plantuml, "class-package-contain", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -113,7 +113,7 @@ classes().that().haveSimpleNameStartingWith("Foo") === Inheritance Checks -[plantuml, "inheritance-naming-check"] +[plantuml, "inheritance-naming-check", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -145,7 +145,7 @@ classes().that().implement(Connection.class) .should().haveSimpleNameEndingWith("Connection") ---- -[plantuml, "inheritance-access-check"] +[plantuml, "inheritance-access-check", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -183,7 +183,7 @@ classes().that().areAssignableTo(EntityManager.class) === Annotation Checks -[plantuml, "inheritance-annotation-check"] +[plantuml, "inheritance-annotation-check", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -216,7 +216,7 @@ classes().that().areAssignableTo(EntityManager.class) === Layer Checks -[plantuml, "layer-check"] +[plantuml, "layer-check", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -270,7 +270,7 @@ layeredArchitecture() === Cycle Checks -[plantuml, "cycle-check"] +[plantuml, "cycle-check", svg, opts=interactive] ---- skinparam componentStyle uml2 diff --git a/docs/userguide/006_The_Core_API.adoc b/docs/userguide/006_The_Core_API.adoc index 73c48bb785..b2222b8025 100644 --- a/docs/userguide/006_The_Core_API.adoc +++ b/docs/userguide/006_The_Core_API.adoc @@ -87,7 +87,7 @@ The domain objects represent Java code, thus the naming should be pretty straigh commonly, the `ClassFileImporter` imports instances of type `JavaClass`. A rough overview looks like this: -[plantuml, "domain-overview"] +[plantuml, "domain-overview", svg, opts=interactive] ---- @startuml skinparam hyperlinkUnderline false @@ -207,7 +207,7 @@ For example, every `JavaField` allows to call `JavaField#getAccessesToSelf()` to code units within the graph that access this specific field. The resolution process through inheritance is not completely straight forward. Consider for example -[plantuml, "resolution-example"] +[plantuml, "resolution-example", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -244,7 +244,7 @@ member within another class. If a member is queried for `accessesToSelf()` thoug will resolve the necessary targets and determine, which member is represented by which target. The situation looks roughly like -[plantuml, "resolution-overview"] +[plantuml, "resolution-overview", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -290,7 +290,7 @@ Second, why can there be more than one resolved methods for method calls? The reason for this is that a call target might indeed match several methods in those cases, for example: -[plantuml, "diamond-example"] +[plantuml, "diamond-example", svg, opts=interactive] ---- skinparam componentStyle uml2 diff --git a/docs/userguide/007_The_Lang_API.adoc b/docs/userguide/007_The_Lang_API.adoc index e472d3c800..acd98b6aea 100644 --- a/docs/userguide/007_The_Lang_API.adoc +++ b/docs/userguide/007_The_Lang_API.adoc @@ -246,7 +246,7 @@ detailed about fields, methods or constructors. A generic API will never be able every imaginable concept out of the box. Thus ArchUnit's rule API has at its foundation a more generic API that controls the types of objects that our concept targets. -[plantuml, "import-vs-lang"] +[plantuml, "import-vs-lang", svg, opts=interactive] ---- skinparam componentStyle uml2 diff --git a/docs/userguide/008_The_Library_API.adoc b/docs/userguide/008_The_Library_API.adoc index 1c706e6a63..ce2e4cea5f 100644 --- a/docs/userguide/008_The_Library_API.adoc +++ b/docs/userguide/008_The_Library_API.adoc @@ -55,7 +55,7 @@ More precisely, the following holds: contain dependencies on any `adapter` package. -[plantuml, "onion-architecture-check"] +[plantuml, "onion-architecture-check", svg, opts=interactive] ---- skinparam componentStyle uml2 @@ -357,7 +357,7 @@ Diagrams supported have to be component diagrams and associate classes to compon The way this works is to use the respective package identifiers (compare `ArchConditions.onlyHaveDependenciesInAnyPackage(..)`) as stereotypes: -[plantuml, "simple-plantuml-archrule-example"] +[plantuml, "simple-plantuml-archrule-example", svg, opts=interactive] ---- [Some Source] <<..some.source..>> [Some Target] <<..some.target..>> as target @@ -600,7 +600,7 @@ The `CCD` of the system divided by the `CCD` of a balanced binary tree with the ===== Example -[plantuml,"lakos-example"] +[plantuml, "lakos-example", svg, opts=interactive] ---- skinparam componentStyle uml2 skinparam component { @@ -690,7 +690,7 @@ so it makes sense to only consider those classes to calculate the *A* value. The following provides some example where the `A` values assume some random factor of abstract classes within the respective component. -[plantuml,"martin-example"] +[plantuml, "martin-example", svg, opts=interactive] ---- skinparam componentStyle uml2 skinparam component { @@ -755,7 +755,7 @@ The metrics are composed from the following definitions: ===== Example -[plantuml,"dowalil-example"] +[plantuml, "dowalil-example", svg, opts=interactive] ---- skinparam componentStyle uml2 skinparam component { From 8da60d5b5e2ffc45a256da3634d0b3d20a342a19 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Fri, 29 Dec 2023 15:35:06 +0100 Subject: [PATCH 4/5] hide empty fields & methods of class diagrams Signed-off-by: Manfred Hanke --- docs/userguide/004_What_to_Check.adoc | 21 +++++++++++++++++++++ docs/userguide/006_The_Core_API.adoc | 16 ++++++++++++---- docs/userguide/008_The_Library_API.adoc | 3 +++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/docs/userguide/004_What_to_Check.adoc b/docs/userguide/004_What_to_Check.adoc index 5fa46b49bb..737ae5aef0 100644 --- a/docs/userguide/004_What_to_Check.adoc +++ b/docs/userguide/004_What_to_Check.adoc @@ -49,6 +49,8 @@ classes().that().resideInAPackage("..foo..") [plantuml, "class-naming-deps", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -69,6 +71,7 @@ note top on link #crimson: forbidden Bar --> FooBar #green note left on link #green: allowed +@enduml ---- [source,java] @@ -81,6 +84,8 @@ classes().that().haveNameMatching(".*Bar") [plantuml, "class-package-contain", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -103,6 +108,7 @@ package com.wrong { note "resides in wrong package" as WrongPackage #crimson FooController .. WrongPackage +@enduml ---- [source,java] @@ -115,6 +121,8 @@ classes().that().haveSimpleNameStartingWith("Foo") [plantuml, "inheritance-naming-check", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -137,6 +145,7 @@ FtpConnection --|> Connection #green SshThing --|> Connection #crimson note right on link #crimson: Has wrong name +@enduml ---- [source,java] @@ -147,6 +156,8 @@ classes().that().implement(Connection.class) [plantuml, "inheritance-access-check", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -173,6 +184,7 @@ ValidPersistenceUser --> EntityManager #green IllegalPersistenceUser --> EntityManager #crimson note right on link #crimson: Accessor resides in wrong package +@enduml ---- [source,java] @@ -185,6 +197,8 @@ classes().that().areAssignableTo(EntityManager.class) [plantuml, "inheritance-annotation-check", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -206,6 +220,7 @@ ValidPersistenceUser --> EntityManager #green IllegalPersistenceUser --> EntityManager #crimson note right on link #crimson: Accessor is not annotated with @Transactional +@enduml ---- [source,java] @@ -218,6 +233,8 @@ classes().that().areAssignableTo(EntityManager.class) [plantuml, "layer-check", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -253,6 +270,7 @@ note right on link #crimson: Access goes against layers SomePersistenceManager -up--> SomeServiceOne #crimson note right on link #crimson: Access goes against layers +@enduml ---- [source,java] @@ -272,6 +290,8 @@ layeredArchitecture() [plantuml, "cycle-check", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -301,6 +321,7 @@ ClassOneInModuleOne --> ClassTwoInModuleTwo #crimson ClassOneInModuleTwo --> ClassOneInModuleThree #crimson ClassTwoInModuleThree --> ClassOneInModuleOne #crimson note right on link #crimson: Combination of accesses forms cycle +@enduml ---- [source,java] diff --git a/docs/userguide/006_The_Core_API.adoc b/docs/userguide/006_The_Core_API.adoc index b2222b8025..1cb287c745 100644 --- a/docs/userguide/006_The_Core_API.adoc +++ b/docs/userguide/006_The_Core_API.adoc @@ -209,6 +209,8 @@ inheritance is not completely straight forward. Consider for example [plantuml, "resolution-example", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -232,7 +234,7 @@ class SuperclassBeingAccessed { SuperclassBeingAccessed <|-- ClassBeingAccessed ClassAccessing o-- ClassBeingAccessed - +@enduml ---- The bytecode will record a field access from `ClassAccessing.accessField()` to @@ -246,6 +248,8 @@ The situation looks roughly like [plantuml, "resolution-overview", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -276,6 +280,7 @@ MethodCallTarget "1" -- "0..*" JavaMethod : resolves to JavaConstructorCall "1" *-- "1" ConstructorCallTarget : has ConstructorCallTarget "1" -- "0..1" JavaConstructor : resolves to +@enduml ---- Two things might seem strange at the first look. @@ -292,6 +297,8 @@ cases, for example: [plantuml, "diamond-example", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam component { @@ -304,13 +311,13 @@ skinparam class { BackgroundColor #white } -class A <> { +interface A <> { void targetMethod() } -class B <> { +interface B <> { void targetMethod() } -class C <> { +abstract class C <> { } class D { void callTargetMethod() @@ -319,6 +326,7 @@ class D { A <|-- C : implements B <|-- C : implements D -right- C : calls targetMethod() +@enduml ---- While this situation will always be resolved in a specified way for a real program, diff --git a/docs/userguide/008_The_Library_API.adoc b/docs/userguide/008_The_Library_API.adoc index ce2e4cea5f..c019bfa0ee 100644 --- a/docs/userguide/008_The_Library_API.adoc +++ b/docs/userguide/008_The_Library_API.adoc @@ -57,6 +57,8 @@ More precisely, the following holds: [plantuml, "onion-architecture-check", svg, opts=interactive] ---- +@startuml +hide empty members skinparam componentStyle uml2 skinparam class { @@ -112,6 +114,7 @@ note right on link #crimson: application services must not\nknow about any adapt Cli --> RestController #crimson note right on link #crimson: one adapter must not know\nabout any other adapter +@enduml ---- From fe1ef05cfa59a034886ca8635458fccba8c74455 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Fri, 29 Dec 2023 15:18:22 +0100 Subject: [PATCH 5/5] upgrade asciidoctor dependencies https://github.com/asciidoctor/asciidoctor-diagram/releases/tag/v2.2.6 updates PlantUML from 1.2022.14 to 1.2023.4. Since plantuml-1.2023.2, ``` package com.myapp.application ``` produces 3 boxes instead of one by default. cf. https://plantuml.com/news: * 2 Feb, 2023: Important change about package and namespace > > Starting with version 1.2023.2 (which is online as a beta), > PlantUML handles differently namespaces and packages. > > There won't be any difference between namespaces and packages anymore: > both keywords are now synonymous. > > The drawing is slightly different, because we now also draw intermediate packages. > Note that this is not a final choice, it depends on the feedback from users. > > Packages now involve the definition of a namespace, as in any ordinary programming language. > The default separator is the dot (.) but can be changed using the `set separator X` directive. > You can also disable namespace management using `set separator none`, > in which case you get back a behavior similar to older versions of PlantUML. Signed-off-by: Manfred Hanke --- docs/build.gradle | 4 ++-- docs/userguide/004_What_to_Check.adoc | 4 ++++ docs/userguide/008_The_Library_API.adoc | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/build.gradle b/docs/build.gradle index fa92cb706b..d9cfc97dcb 100644 --- a/docs/build.gradle +++ b/docs/build.gradle @@ -24,7 +24,7 @@ asciidoctor { asciidoctorj { modules { diagram.use() - diagram.version '2.2.4' + diagram.version '2.2.14' // https://github.com/asciidoctor/asciidoctorj-diagram/releases/ } } } @@ -34,7 +34,7 @@ asciidoctor.doFirst { } asciidoctorj { - version = '2.3.0' + version = '2.5.11' // https://github.com/asciidoctor/asciidoctorj/releases } asciidoctor.dependsOn cleanUserGuide diff --git a/docs/userguide/004_What_to_Check.adoc b/docs/userguide/004_What_to_Check.adoc index 737ae5aef0..f3078f4d9c 100644 --- a/docs/userguide/004_What_to_Check.adoc +++ b/docs/userguide/004_What_to_Check.adoc @@ -86,6 +86,7 @@ classes().that().haveNameMatching(".*Bar") ---- @startuml hide empty members +set separator none skinparam componentStyle uml2 skinparam component { @@ -158,6 +159,7 @@ classes().that().implement(Connection.class) ---- @startuml hide empty members +set separator none skinparam componentStyle uml2 skinparam component { @@ -235,6 +237,7 @@ classes().that().areAssignableTo(EntityManager.class) ---- @startuml hide empty members +set separator none skinparam componentStyle uml2 skinparam component { @@ -292,6 +295,7 @@ layeredArchitecture() ---- @startuml hide empty members +set separator none skinparam componentStyle uml2 skinparam component { diff --git a/docs/userguide/008_The_Library_API.adoc b/docs/userguide/008_The_Library_API.adoc index c019bfa0ee..4a3aeab377 100644 --- a/docs/userguide/008_The_Library_API.adoc +++ b/docs/userguide/008_The_Library_API.adoc @@ -59,6 +59,7 @@ More precisely, the following holds: ---- @startuml hide empty members +set separator none skinparam componentStyle uml2 skinparam class {