diff --git a/.clang-uml b/.clang-uml index 42c5b3ae..225d0717 100644 --- a/.clang-uml +++ b/.clang-uml @@ -63,15 +63,11 @@ diagrams: include!: uml/sequence/cli_handle_options_sequence.yml diagram_generate_generic_sequence: include!: uml/sequence/diagram_generate_generic_sequence.yml - sequence_diagram_visitor_sequence: - include!: uml/sequence/sequence_diagram_visitor_sequence.yml class_diagram_generator_sequence: include!: uml/sequence/class_diagram_generator_sequence.yml template_builder_sequence: include!: uml/sequence/template_builder_sequence.yml # Package diagrams - main_package: - include!: uml/package/main_package.yml architecture_package: include!: uml/package/architecture_package.yml # Include diagrams diff --git a/docs/diagram_filters.md b/docs/diagram_filters.md index 9b1620fc..9768af01 100644 --- a/docs/diagram_filters.md +++ b/docs/diagram_filters.md @@ -13,6 +13,7 @@ * [specializations](#specializations) * [access](#access) * [method_types](#method_types) +* [callee_types](#callee_types) * [dependants and dependencies](#dependants-and-dependencies) @@ -59,17 +60,18 @@ The following table specifies the values allowed in each filter: |-------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------| | `namespaces` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: '.*detail.*'``` | | `elements` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: '.*detail.*'``` | -| `element_types` | Types of diagram elements | ```class```, ```enum```, ```concept``` | -| `paths` | File or dir path or glob pattern | ```src/dir1```, ```src/dir2/a.cpp```, ```src/dir3/*.cpp``` | +| `element_types` | Types of diagram elements | ```class```, ```enum```, ```concept``` | +| `paths` | File or dir path or glob pattern | ```src/dir1```, ```src/dir2/a.cpp```, ```src/dir3/*.cpp``` | | `context` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | | `relationships` | Type of relationship | ```inheritance```, ```composition```, ```aggregation```, ```ownership```, ```association```, ```instantiation```, ```friendship```, ```dependency``` | -| `subclasses` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | -| `parents` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | -| `specializations` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | -| `access` | Method or member access scope | ```public```, ```protected```, ```private``` | -| `method_types` | Type of class method | ```constructor```, ```destructor```, ```assignment```, ```operator```, ```defaulted```, ```deleted```, ```static``` | -| `dependants` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | -| `dependencies` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | +| `subclasses` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | +| `parents` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | +| `specializations` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | +| `access` | Method or member access scope | ```public```, ```protected```, ```private``` | +| `method_types` | Type of class method | ```constructor```, ```destructor```, ```assignment```, ```operator```, ```defaulted```, ```deleted```, ```static``` | +| `dependants` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | +| `dependencies` | Qualified name or regex | ```ns1::ns2::ClassA```, ```r: 'ns1::ns2::ClassA.+'``` | +| `callee_types` | Callee types in sequence diagrams| ```constructor```, ```assignment```, ```operator```, ```defaulted```, ```static```, ```method```, ```function```, ```function_template```, ```lambda``` | The following filters are available. @@ -190,6 +192,22 @@ This filter allows to include or exclude various method types from the class dia This filter is independent of the `access` filter, which controls which methods are included based on access scope (e.g. `public`). +## callee_types + +This filter is specific for `sequence diagrams` and allows to control which types calls should be included/excluded from the diagram. +In a sequence diagram, a `callee` is the receiver of a message, and this filter specifies which types of receivers should match. + +The following callee types are supported: + * constructor + * assignment + * operator + * defaulted + * static + * method + * function + * function_template + * lambda + ## dependants and dependencies These filters allow to specify that only dependants or dependencies of a given class should be included in the diagram. diff --git a/docs/test_cases.md b/docs/test_cases.md index 904cd331..6b70275c 100644 --- a/docs/test_cases.md +++ b/docs/test_cases.md @@ -102,6 +102,8 @@ * [t20027](./test_cases/t20027.md) - Filter call expressions based on access test case * [t20028](./test_cases/t20028.md) - Conditional (ternary) '?:' operator test case * [t20029](./test_cases/t20029.md) - Combined feature sequence diagram test case + * [t20030](./test_cases/t20030.md) - Constructor and operator call test case + * [t20031](./test_cases/t20031.md) - Callee type sequence diagram filter test case ## Package diagrams * [t30001](./test_cases/t30001.md) - Basic package diagram test case * [t30002](./test_cases/t30002.md) - Package dependency test case diff --git a/docs/test_cases/t00002.md b/docs/test_cases/t00002.md index 6ca92133..472b3b0a 100644 --- a/docs/test_cases/t00002.md +++ b/docs/test_cases/t00002.md @@ -618,7 +618,7 @@ private: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00002_class.svg b/docs/test_cases/t00002_class.svg index d2f2f7a1..d7a5ec9b 100644 --- a/docs/test_cases/t00002_class.svg +++ b/docs/test_cases/t00002_class.svg @@ -1,6 +1,6 @@ - + @@ -9,123 +9,123 @@ - - + + A - + - + foo_a() = 0 : void - + - + foo_c() = 0 : void - - + + B - + - + foo_a() : void - - + + C - + - + foo_c() : void - - + + D - + - + foo_a() : void - + - + foo_c() : void - + - + as : std::vector<A *> - - + + E - + - + foo_a() : void - + - + foo_c() : void - + - + as : std::vector<A *> - + This is class A - + This is class B - + This is class D diff --git a/docs/test_cases/t00003.md b/docs/test_cases/t00003.md index 506ff9ed..d5da8a2a 100644 --- a/docs/test_cases/t00003.md +++ b/docs/test_cases/t00003.md @@ -832,7 +832,7 @@ int A::static_int = 1; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00003_class.svg b/docs/test_cases/t00003_class.svg index 8ce5ebf6..9b86cbdf 100644 --- a/docs/test_cases/t00003_class.svg +++ b/docs/test_cases/t00003_class.svg @@ -1,6 +1,6 @@ - + @@ -9,227 +9,227 @@ - - + + A - + - + A() = default : void - + - + A(int i) : void - + - + A(A &&) = default : void - + - + A(const A &) = deleted : void A<T>(T t) : void - + - + ~A() = default : void - + - + operator=(A && other) noexcept : A & - + - + operator=(A & other) noexcept : A & - + - + operator++() : A & - + - + auto_method() : int - + - + basic_method() : void - + - + const_method() const : void - + - + create_from_int(int i) : A - + - + default_int(int i = 12) : int - + - + default_string(int i, std::string s = "abc") : std::string - + - + double_int(const int i) : int - + - + private_method() : void - + - + protected_method() : void - + - + size() constexpr const : std::size_t - + - + static_method() : int - + - + sum(const double a, const double b) : int - + - + a_ : int - + - + auto_member : const unsigned long - + - + b_ : int - + - + c_ : int - + - + compare : std::function<bool (const int)> - + - + private_member : int - + - + protected_member : int - + - + public_member : int - + - + static_const_int : const int - + - + static_int : int diff --git a/docs/test_cases/t00004.md b/docs/test_cases/t00004.md index f1695d8a..7bd72089 100644 --- a/docs/test_cases/t00004.md +++ b/docs/test_cases/t00004.md @@ -528,7 +528,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00004_class.svg b/docs/test_cases/t00004_class.svg index 8120c0ff..9da70d7d 100644 --- a/docs/test_cases/t00004_class.svg +++ b/docs/test_cases/t00004_class.svg @@ -1,6 +1,6 @@ - + @@ -9,16 +9,16 @@ - - + + B - - + + B::AA @@ -28,38 +28,38 @@ AA_3 - - + + A - + - + foo() const : void - + - + foo2() const : void - - + + A::AA - - + + A::AA::Lights @@ -69,16 +69,16 @@ Red - - + + A::AA::AAA - - + + C::B @@ -87,8 +87,8 @@ - - + + C @@ -97,38 +97,38 @@ - + - + b_int : B<int> - + - + t : T - - + + C::AA - - + + C::AA::AAA - - + + C::AA::CCC @@ -137,8 +137,8 @@ CCC_2 - - + + C::B @@ -147,15 +147,15 @@ - + - + b : V - - + + C::CC @@ -164,16 +164,16 @@ CC_2 - - + + detail::D - - + + detail::D::AA @@ -183,8 +183,8 @@ AA_3 - - + + detail::D::DD diff --git a/docs/test_cases/t00005.md b/docs/test_cases/t00005.md index 3c592089..cffd4a04 100644 --- a/docs/test_cases/t00005.md +++ b/docs/test_cases/t00005.md @@ -518,7 +518,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00005_class.svg b/docs/test_cases/t00005_class.svg index aff2645f..90e20470 100644 --- a/docs/test_cases/t00005_class.svg +++ b/docs/test_cases/t00005_class.svg @@ -1,6 +1,6 @@ - + @@ -9,205 +9,205 @@ - - + + A - - + + B - - + + C - - + + D - - + + E - - + + F - - + + G - - + + H - - + + I - - + + J - - + + K - - + + R - + - + a : A - + - + b : B * - + - + c : C & - + - + d : const D * - + - + e : const E & - + - + f : F && - + - + g : G ** - + - + h : H *** - + - + i : I *& - + - + j : volatile J * - + - + k : K * - + - + some_int : int - + - + some_int_pointer : int * - + - + some_int_pointer_pointer : int ** - + - + some_int_reference : int & diff --git a/docs/test_cases/t00006.md b/docs/test_cases/t00006.md index 5505f905..5b34f3ca 100644 --- a/docs/test_cases/t00006.md +++ b/docs/test_cases/t00006.md @@ -699,7 +699,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00006_class.svg b/docs/test_cases/t00006_class.svg index b4e2dfb0..b26875ae 100644 --- a/docs/test_cases/t00006_class.svg +++ b/docs/test_cases/t00006_class.svg @@ -1,6 +1,6 @@ - + @@ -9,136 +9,136 @@ - - + + A - - + + B - - + + C - - + + D - - + + E - - + + F - - + + G - - + + H - - + + I - - + + J - - + + K - - + + L - - + + M - - + + N - - + + NN - - + + NNN - - + + custom_container @@ -147,15 +147,15 @@ - + - + data : std::vector<T> - - + + custom_container @@ -164,103 +164,103 @@ - - + + R - + - + a : std::vector<A> - + - + b : std::vector<B *> - + - + c : std::map<int,C> - + - + d : std::map<int,D *> - + - + e : custom_container<E> - + - + f : std::vector<std::vector<F>> - + - + g : std::map<int,std::vector<G *>> - + - + h : std::array<H,10> - + - + i : std::array<I *,5> - + - + j : J[10] - + - + k : K *[20] - + - + lm : std::vector<std::pair<L,M>> - + - + ns : std::tuple<N,NN,NNN> diff --git a/docs/test_cases/t00007.md b/docs/test_cases/t00007.md index 4c42e3de..b91b2c48 100644 --- a/docs/test_cases/t00007.md +++ b/docs/test_cases/t00007.md @@ -172,7 +172,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00007_class.svg b/docs/test_cases/t00007_class.svg index bceb3486..1e0b8df5 100644 --- a/docs/test_cases/t00007_class.svg +++ b/docs/test_cases/t00007_class.svg @@ -1,6 +1,6 @@ - + @@ -9,57 +9,57 @@ - - + + A - - + + B - - + + C - - + + R - + - + a : std::unique_ptr<A> - + - + b : std::shared_ptr<B> - + - + c : std::weak_ptr<C> diff --git a/docs/test_cases/t00008.md b/docs/test_cases/t00008.md index ba5b6cba..7d928784 100644 --- a/docs/test_cases/t00008.md +++ b/docs/test_cases/t00008.md @@ -561,7 +561,7 @@ template <> struct E::nested_template { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00008_class.svg b/docs/test_cases/t00008_class.svg index d8c34853..86170488 100644 --- a/docs/test_cases/t00008_class.svg +++ b/docs/test_cases/t00008_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,50 +19,50 @@ - + - + comparator : CMP - + - + ints : std::array<int,N> - + - + pointer : T * - + - + reference : T & - + - + value : T - + - + values : std::vector<P> - - + + Vector @@ -71,15 +71,15 @@ - + - + values : std::vector<T> - - + + B @@ -88,15 +88,15 @@ - + - + template_template : C<T> - - + + B @@ -105,8 +105,8 @@ - - + + D @@ -115,31 +115,31 @@ D<Items...>(std::tuple<Items...> *) : void - + - + add(int i) : void - + - + ints : B<int,Vector> - - + + E - - + + E::nested_template @@ -147,16 +147,16 @@ ET - + - + get(ET * d) : E::nested_template::DT * - - + + E::nested_template @@ -164,11 +164,11 @@ char - + - + getDecl(char * c) : E::nested_template<char>::DeclType * diff --git a/docs/test_cases/t00009.md b/docs/test_cases/t00009.md index c5bd00b8..e5176fdb 100644 --- a/docs/test_cases/t00009.md +++ b/docs/test_cases/t00009.md @@ -243,7 +243,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00009_class.svg b/docs/test_cases/t00009_class.svg index a7fe969b..ab7462c2 100644 --- a/docs/test_cases/t00009_class.svg +++ b/docs/test_cases/t00009_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,15 +19,15 @@ - + - + value : T - - + + A @@ -36,8 +36,8 @@ - - + + A @@ -46,8 +46,8 @@ - - + + A @@ -56,33 +56,33 @@ - - + + B - + - + aint : A<int> - + - + astring : A<std::string> * - + - + avector : A<std::vector<std::string>> & diff --git a/docs/test_cases/t00010.md b/docs/test_cases/t00010.md index 65ff1bc3..d839b2d0 100644 --- a/docs/test_cases/t00010.md +++ b/docs/test_cases/t00010.md @@ -253,7 +253,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00010_class.svg b/docs/test_cases/t00010_class.svg index 5e4dba33..e54c44bd 100644 --- a/docs/test_cases/t00010_class.svg +++ b/docs/test_cases/t00010_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,22 +19,22 @@ - + - + first : T - + - + second : P - - + + A @@ -43,8 +43,8 @@ - - + + B @@ -53,15 +53,15 @@ - + - + astring : A<T,std::string> - - + + B @@ -70,19 +70,19 @@ - - + + C - + - + aintstring : B<int> diff --git a/docs/test_cases/t00011.md b/docs/test_cases/t00011.md index 1f328c37..b759af25 100644 --- a/docs/test_cases/t00011.md +++ b/docs/test_cases/t00011.md @@ -212,7 +212,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00011_class.svg b/docs/test_cases/t00011_class.svg index 1c16969e..82f965fa 100644 --- a/docs/test_cases/t00011_class.svg +++ b/docs/test_cases/t00011_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + D @@ -19,48 +19,48 @@ - + - + value : T - - + + A - + - + foo() : void - - + + B - + - + foo() : void - + - + m_a : A * diff --git a/docs/test_cases/t00012.md b/docs/test_cases/t00012.md index 2f1aaeec..d56ed777 100644 --- a/docs/test_cases/t00012.md +++ b/docs/test_cases/t00012.md @@ -554,7 +554,7 @@ class R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00012_class.svg b/docs/test_cases/t00012_class.svg index 6cf4b43f..6b0e83ac 100644 --- a/docs/test_cases/t00012_class.svg +++ b/docs/test_cases/t00012_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,22 +19,22 @@ - + - + value : T - + - + values : std::variant<Ts...> - - + + B @@ -43,15 +43,15 @@ - + - + ints : std::array<int,sizeof...(Is)> - - + + C @@ -60,15 +60,15 @@ - + - + ints : std::array<T,sizeof...(Is)> - - + + A @@ -77,8 +77,8 @@ - - + + A @@ -87,8 +87,8 @@ - - + + B @@ -97,8 +97,8 @@ - - + + B @@ -107,8 +107,8 @@ - - + + C @@ -117,50 +117,50 @@ - - + + R - + - + a1 : A<int,std::string,float> - + - + a2 : A<int,std::string,bool> - + - + b1 : B<3,2,1> - + - + b2 : B<1,1,1,1> - + - + c1 : C<std::map<int,std::vector<std::vector<std::vector<std::string>>>>,3,3,3> - + Long template annotation diff --git a/docs/test_cases/t00013.md b/docs/test_cases/t00013.md index 44e39619..1f86e5e4 100644 --- a/docs/test_cases/t00013.md +++ b/docs/test_cases/t00013.md @@ -905,7 +905,7 @@ private: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00013_class.svg b/docs/test_cases/t00013_class.svg index a4ebbeee..9f086a24 100644 --- a/docs/test_cases/t00013_class.svg +++ b/docs/test_cases/t00013_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + ABCD::F @@ -19,15 +19,15 @@ - + - + f : T - - + + ABCD::F @@ -36,75 +36,75 @@ - - + + A - + - + a : int - - + + B - + - + b : int - - + + C - + - + c : int - - + + D - + - + print(R * r) : void - + - + d : int - - + + E @@ -113,15 +113,15 @@ - + - + e : T - - + + G @@ -130,22 +130,22 @@ - + - + args : std::tuple<Args...> - + - + g : T - - + + E @@ -154,8 +154,8 @@ - - + + G @@ -164,8 +164,8 @@ - - + + E @@ -174,93 +174,93 @@ - - + + R - + - + get_a(A * a) : int - + - + get_b(B & b) : int - + - + get_c(C c) : int - + - + get_const_b(const B & b) : int - + - + get_d(D && d) : int - + - + get_d2(D && d) : int get_e<T>(E<T> e) : T get_f<T>(const F<T> & f) : T - + - + get_int_e(const E<int> & e) : int - + - + get_int_e2(E<int> & e) : int - + - + get_int_f(const ABCD::F<int> & f) : int - + - + estring : E<std::string> - + - + gintstring : G<int,float,std::string> diff --git a/docs/test_cases/t00014.md b/docs/test_cases/t00014.md index f03d0bfe..02d1159c 100644 --- a/docs/test_cases/t00014.md +++ b/docs/test_cases/t00014.md @@ -969,7 +969,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00014_class.svg b/docs/test_cases/t00014_class.svg index 22f8d56f..0e036d23 100644 --- a/docs/test_cases/t00014_class.svg +++ b/docs/test_cases/t00014_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,37 +19,37 @@ - + - + p : P - + - + t : T - - + + B - + - + value : std::string - - + + A @@ -58,8 +58,8 @@ - - + + A @@ -68,8 +68,8 @@ - - + + A @@ -78,8 +78,8 @@ - - + + A @@ -88,8 +88,8 @@ - - + + A @@ -98,8 +98,8 @@ - - + + A @@ -108,8 +108,8 @@ - - + + A @@ -118,8 +118,8 @@ - - + + A @@ -128,8 +128,8 @@ - - + + A @@ -138,8 +138,8 @@ - - + + A @@ -148,8 +148,8 @@ - - + + A @@ -158,8 +158,8 @@ - - + + A @@ -168,8 +168,8 @@ - - + + A @@ -178,8 +178,8 @@ - - + + A @@ -188,8 +188,8 @@ - - + + A @@ -198,8 +198,8 @@ - - + + R @@ -208,116 +208,116 @@ - + - + abool : APtr<bool> - + - + aboolfloat : AAPtr<bool,float> - + - + afloat : ASharedPtr<float> - + - + atfloat : AAPtr<T,float> - + - + bapair : PairPairBA<bool> - + - + boolstring : A<bool,std::string> - + - + bs : BVector - + - + bs2 : BVector2 - + - + bstringstring : BStringString - + - + cb : SimpleCallback<ACharString> - + - + floatstring : AStringPtr<float> - + - + gcb : GenericCallback<R::AWCharString> - + - + intstring : AIntString - + - + stringstring : AStringString - + - + vcb : VoidCallback - + - + vps : VectorPtr<B> diff --git a/docs/test_cases/t00015.md b/docs/test_cases/t00015.md index 7f87aa78..23f9ed7c 100644 --- a/docs/test_cases/t00015.md +++ b/docs/test_cases/t00015.md @@ -187,7 +187,7 @@ class B : public ns1::ns2::Anon { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00015_class.svg b/docs/test_cases/t00015_class.svg index 47258586..a8c22d55 100644 --- a/docs/test_cases/t00015_class.svg +++ b/docs/test_cases/t00015_class.svg @@ -1,6 +1,6 @@ - + @@ -9,40 +9,40 @@ - - + + ns1::A - - + + ns1::ns2_v0_9_0::A - - + + ns1::Anon - - + + ns3::ns1::ns2::Anon - - + + ns3::B diff --git a/docs/test_cases/t00016.md b/docs/test_cases/t00016.md index bfd934eb..c49e6787 100644 --- a/docs/test_cases/t00016.md +++ b/docs/test_cases/t00016.md @@ -273,7 +273,7 @@ template <> struct is_numeric { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00016_class.svg b/docs/test_cases/t00016_class.svg index 0dde74b5..c6b6e2f3 100644 --- a/docs/test_cases/t00016_class.svg +++ b/docs/test_cases/t00016_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + is_numeric @@ -21,8 +21,8 @@ value : enum - - + + is_numeric @@ -33,8 +33,8 @@ value : enum - - + + is_numeric @@ -45,8 +45,8 @@ value : enum - - + + is_numeric @@ -57,8 +57,8 @@ value : enum - - + + is_numeric @@ -69,8 +69,8 @@ value : enum - - + + is_numeric diff --git a/docs/test_cases/t00017.md b/docs/test_cases/t00017.md index 250d4fd7..bfc812e5 100644 --- a/docs/test_cases/t00017.md +++ b/docs/test_cases/t00017.md @@ -577,7 +577,7 @@ private: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00017_class.svg b/docs/test_cases/t00017_class.svg index c39daf6d..a4e40167 100644 --- a/docs/test_cases/t00017_class.svg +++ b/docs/test_cases/t00017_class.svg @@ -1,6 +1,6 @@ - + @@ -9,135 +9,135 @@ - - + + A - - + + B - - + + C - - + + D - - + + E - - + + F - - + + G - - + + H - - + + I - - + + J - - + + K - - + + R - + - + R(int & some_int, C & cc, const E & ee, F && ff, I *& ii) : void - + - + some_int : int - + - + some_int_pointer : int * - + - + some_int_pointer_pointer : int ** - + - + some_int_reference : int & diff --git a/docs/test_cases/t00018.md b/docs/test_cases/t00018.md index aff8f218..3b9c731e 100644 --- a/docs/test_cases/t00018.md +++ b/docs/test_cases/t00018.md @@ -554,7 +554,7 @@ void widget::draw(const clanguml::t00018::widget &w) } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00018_class.svg b/docs/test_cases/t00018_class.svg index b5aefdcf..66fec2cb 100644 --- a/docs/test_cases/t00018_class.svg +++ b/docs/test_cases/t00018_class.svg @@ -1,6 +1,6 @@ - + @@ -9,121 +9,121 @@ - - + + impl::widget - + - + widget(int n) : void - + - + draw(const widget & w) const : void - + - + draw(const widget & w) : void - + - + n : int - - + + widget - + - + widget(int) : void - + - + widget(widget &&) : void - + - + widget(const widget &) = deleted : void - + - + ~widget() : void - + - + operator=(widget &&) : widget & - + - + operator=(const widget &) = deleted : widget & - + - + draw() const : void - + - + draw() : void - + - + shown() const : bool - + - + pImpl : std::unique_ptr<impl::widget> diff --git a/docs/test_cases/t00019.md b/docs/test_cases/t00019.md index 7882875a..89a37041 100644 --- a/docs/test_cases/t00019.md +++ b/docs/test_cases/t00019.md @@ -736,7 +736,7 @@ class Base { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00019_class.svg b/docs/test_cases/t00019_class.svg index bf12e3a0..b81d7074 100644 --- a/docs/test_cases/t00019_class.svg +++ b/docs/test_cases/t00019_class.svg @@ -1,6 +1,6 @@ - + @@ -9,45 +9,45 @@ - - + + Base - + - + Base() = default : void - + - + ~Base() constexpr = default : void - + - + m1() : int - + - + m2() : std::string - - + + Layer1 @@ -55,23 +55,23 @@ LowerLayer - + - + m1() : int - + - + m2() : std::string - - + + Layer2 @@ -79,16 +79,16 @@ LowerLayer - + - + all_calls_count() const : int - - + + Layer3 @@ -96,51 +96,51 @@ LowerLayer - + - + m1() : int - + - + m1_calls() const : int - + - + m2() : std::string - + - + m2_calls() const : int - + - + m_m1_calls : int - + - + m_m2_calls : int - - + + Layer3 @@ -149,8 +149,8 @@ - - + + Layer2 @@ -159,8 +159,8 @@ - - + + Layer1 @@ -169,19 +169,19 @@ - - + + A - + - + layers : std::unique_ptr<Layer1<Layer2<Layer3<Base>>>> diff --git a/docs/test_cases/t00020.md b/docs/test_cases/t00020.md index 70dd8099..1d28f2b0 100644 --- a/docs/test_cases/t00020.md +++ b/docs/test_cases/t00020.md @@ -734,7 +734,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00020_class.svg b/docs/test_cases/t00020_class.svg index 89ed3132..b9900c1c 100644 --- a/docs/test_cases/t00020_class.svg +++ b/docs/test_cases/t00020_class.svg @@ -1,6 +1,6 @@ - + @@ -9,175 +9,175 @@ - - + + ProductA - + - + ~ProductA() constexpr = default : void - + - + sell(int price) const = 0 : bool - - + + ProductA1 - + - + sell(int price) const : bool - - + + ProductA2 - + - + sell(int price) const : bool - - + + ProductB - + - + ~ProductB() constexpr = default : void - + - + buy(int price) const = 0 : bool - - + + ProductB1 - + - + buy(int price) const : bool - - + + ProductB2 - + - + buy(int price) const : bool - - + + AbstractFactory - + - + make_a() const = 0 : std::unique_ptr<ProductA> - + - + make_b() const = 0 : std::unique_ptr<ProductB> - - + + Factory1 - + - + make_a() const : std::unique_ptr<ProductA> - + - + make_b() const : std::unique_ptr<ProductB> - - + + Factory2 - + - + make_a() const : std::unique_ptr<ProductA> - + - + make_b() const : std::unique_ptr<ProductB> diff --git a/docs/test_cases/t00021.md b/docs/test_cases/t00021.md index 050e2571..3fd4fcfa 100644 --- a/docs/test_cases/t00021.md +++ b/docs/test_cases/t00021.md @@ -655,7 +655,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00021_class.svg b/docs/test_cases/t00021_class.svg index 90dfa799..7013d969 100644 --- a/docs/test_cases/t00021_class.svg +++ b/docs/test_cases/t00021_class.svg @@ -1,6 +1,6 @@ - + @@ -9,152 +9,152 @@ - - + + Visitor - + - + ~Visitor() constexpr = default : void - + - + visit_A(const A & item) const = 0 : void - + - + visit_B(const B & item) const = 0 : void - - + + Visitor1 - + - + visit_A(const A & item) const : void - + - + visit_B(const B & item) const : void - - + + Visitor2 - + - + visit_A(const A & item) const : void - + - + visit_B(const B & item) const : void - - + + Visitor3 - + - + visit_A(const A & item) const : void - + - + visit_B(const B & item) const : void - - + + Item - + - + ~Item() constexpr = default : void - + - + accept(const Visitor & visitor) const = 0 : void - - + + A - + - + accept(const Visitor & visitor) const : void - - + + B - + - + accept(const Visitor & visitor) const : void diff --git a/docs/test_cases/t00022.md b/docs/test_cases/t00022.md index 20db0824..f64dcc59 100644 --- a/docs/test_cases/t00022.md +++ b/docs/test_cases/t00022.md @@ -318,7 +318,7 @@ protected: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00022_class.svg b/docs/test_cases/t00022_class.svg index a482912f..14f9614b 100644 --- a/docs/test_cases/t00022_class.svg +++ b/docs/test_cases/t00022_class.svg @@ -1,6 +1,6 @@ - + @@ -9,76 +9,76 @@ - - + + A - + - + method1() = 0 : void - + - + method2() = 0 : void - + - + template_method() : void - - + + A1 - + - + method1() : void - + - + method2() : void - - + + A2 - + - + method1() : void - + - + method2() : void diff --git a/docs/test_cases/t00023.md b/docs/test_cases/t00023.md index 960fe7cc..3e8f4ac6 100644 --- a/docs/test_cases/t00023.md +++ b/docs/test_cases/t00023.md @@ -398,7 +398,7 @@ private: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00023_class.svg b/docs/test_cases/t00023_class.svg index 6e61cb5c..11df5169 100644 --- a/docs/test_cases/t00023_class.svg +++ b/docs/test_cases/t00023_class.svg @@ -1,6 +1,6 @@ - + @@ -9,102 +9,102 @@ - - + + Strategy - + - + ~Strategy() constexpr = default : void - + - + algorithm() = 0 : void - - + + StrategyA - + - + algorithm() : void - - + + StrategyB - + - + algorithm() : void - - + + StrategyC - + - + algorithm() : void - - + + Context - + - + Context(std::unique_ptr<Strategy> strategy) : void - + - + apply() : void - + - + m_strategy : std::unique_ptr<Strategy> diff --git a/docs/test_cases/t00024.md b/docs/test_cases/t00024.md index 813f77db..11534b0a 100644 --- a/docs/test_cases/t00024.md +++ b/docs/test_cases/t00024.md @@ -449,7 +449,7 @@ private: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00024_class.svg b/docs/test_cases/t00024_class.svg index 99c19e47..1f79774b 100644 --- a/docs/test_cases/t00024_class.svg +++ b/docs/test_cases/t00024_class.svg @@ -1,6 +1,6 @@ - + @@ -9,115 +9,115 @@ - - + + Target - + - + ~Target() = 0 : void - + - + m1() = 0 : void - + - + m2() = 0 : void - - + + Target1 - + - + m1() : void - + - + m2() : void - - + + Target2 - + - + m1() : void - + - + m2() : void - - + + Proxy - + - + Proxy(std::shared_ptr<Target> target) : void - + - + m1() : void - + - + m2() : void - + - + m_target : std::shared_ptr<Target> diff --git a/docs/test_cases/t00025.md b/docs/test_cases/t00025.md index ed1e92cf..f1632485 100644 --- a/docs/test_cases/t00025.md +++ b/docs/test_cases/t00025.md @@ -440,7 +440,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00025_class.svg b/docs/test_cases/t00025_class.svg index 6f0e13ae..787b593e 100644 --- a/docs/test_cases/t00025_class.svg +++ b/docs/test_cases/t00025_class.svg @@ -1,6 +1,6 @@ - + @@ -9,52 +9,52 @@ - - + + Target1 - + - + m1() : void - + - + m2() : void - - + + Target2 - + - + m1() : void - + - + m2() : void - - + + Proxy @@ -62,38 +62,38 @@ T - + - + Proxy(std::shared_ptr<T> target) : void - + - + m1() : void - + - + m2() : void - + - + m_target : std::shared_ptr<T> - - + + Proxy @@ -102,8 +102,8 @@ - - + + Proxy @@ -112,26 +112,26 @@ - - + + ProxyHolder - + - + proxy1 : Proxy<Target1> - + - + proxy2 : Proxy<Target2> diff --git a/docs/test_cases/t00026.md b/docs/test_cases/t00026.md index b2bec600..ab527395 100644 --- a/docs/test_cases/t00026.md +++ b/docs/test_cases/t00026.md @@ -580,7 +580,7 @@ struct StringMemento { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00026_class.svg b/docs/test_cases/t00026_class.svg index fd2684d5..5e70e5e9 100644 --- a/docs/test_cases/t00026_class.svg +++ b/docs/test_cases/t00026_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + Memento @@ -18,31 +18,31 @@ T - + - + Memento(T && v) : void - + - + value() const : T - + - + m_value : T - - + + Originator @@ -50,52 +50,52 @@ T - + - + Originator(T && v) : void - + - + load(const Memento<T> & m) : void - + - + memoize_value() const : Memento<T> - + - + print() const : void - + - + set(T && v) : void - + - + m_value : T - - + + Caretaker @@ -103,30 +103,30 @@ T - + - + set_state(const std::string & s, Memento<T> && m) : void - + - + state(const std::string & n) : Memento<T> & - + - + m_mementos : std::unordered_map<std::string,Memento<T>> - - + + Caretaker @@ -135,8 +135,8 @@ - - + + Originator @@ -145,26 +145,26 @@ - - + + StringMemento - + - + caretaker : Caretaker<std::string> - + - + originator : Originator<std::string> diff --git a/docs/test_cases/t00027.md b/docs/test_cases/t00027.md index 8d17e902..4202c493 100644 --- a/docs/test_cases/t00027.md +++ b/docs/test_cases/t00027.md @@ -708,7 +708,7 @@ struct Window { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00027_class.svg b/docs/test_cases/t00027_class.svg index 19162dc7..c0ef5dbe 100644 --- a/docs/test_cases/t00027_class.svg +++ b/docs/test_cases/t00027_class.svg @@ -1,6 +1,6 @@ - + @@ -9,39 +9,39 @@ - - + + Shape - + - + ~Shape() constexpr = default : void - + - + display() = 0 : void - - + + Line - - + + Line @@ -49,24 +49,24 @@ T<>... - + - + display() : void - - + + Text - - + + Text @@ -74,31 +74,31 @@ T<>... - + - + display() : void - - + + ShapeDecorator - + - + display() = 0 : void - - + + Color @@ -106,16 +106,16 @@ T - + - + display() : void - - + + Weight @@ -123,16 +123,16 @@ T - + - + display() : void - - + + Line @@ -141,8 +141,8 @@ - - + + Line @@ -151,8 +151,8 @@ - - + + Text @@ -161,8 +161,8 @@ - - + + Text @@ -171,40 +171,40 @@ - - + + Window - + - + border : Line<Color,Weight> - + - + description : Text<Color> - + - + divider : Line<Color> - + - + title : Text<Color,Weight> diff --git a/docs/test_cases/t00028.md b/docs/test_cases/t00028.md index f75f082e..56bad6fd 100644 --- a/docs/test_cases/t00028.md +++ b/docs/test_cases/t00028.md @@ -459,7 +459,7 @@ class R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00028_class.svg b/docs/test_cases/t00028_class.svg index 13e43b73..dab8a5d1 100644 --- a/docs/test_cases/t00028_class.svg +++ b/docs/test_cases/t00028_class.svg @@ -1,6 +1,6 @@ - + @@ -9,54 +9,54 @@ - - + + A - + A class note. - - + + B - + B class note. - - + + C - + C class note. - - + + D - + D class note. - - + + E @@ -65,26 +65,26 @@ - + - + param : T - + E template class note. - - + + G - - + + F @@ -94,11 +94,11 @@ three - + F enum note. - - + + E @@ -107,70 +107,70 @@ - - + + R - + - + R(C & c) : void - + - + aaa : A - + - + bbb : B * - + - + ccc : C & - + - + ddd : std::vector<std::shared_ptr<D>> - + - + eee : E<int> - + - + ggg : G ** - + R class note. - + R contains an instance of A. - + Reference to C. diff --git a/docs/test_cases/t00029.md b/docs/test_cases/t00029.md index 0747cdcb..7f1ff76e 100644 --- a/docs/test_cases/t00029.md +++ b/docs/test_cases/t00029.md @@ -310,7 +310,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00029_class.svg b/docs/test_cases/t00029_class.svg index 894b9a99..23e00338 100644 --- a/docs/test_cases/t00029_class.svg +++ b/docs/test_cases/t00029_class.svg @@ -1,6 +1,6 @@ - + @@ -9,16 +9,16 @@ - - + + A - - + + C @@ -27,15 +27,15 @@ - + - + param : T - - + + E @@ -45,65 +45,65 @@ three - - + + G1 - - + + G2 - - + + G3 - - + + G4 - - + + R - + - + g1 : G1 - + - + g3 : G3 & - + - + g4 : std::shared_ptr<G4> diff --git a/docs/test_cases/t00030.md b/docs/test_cases/t00030.md index 4cf03aed..1ecdf0fa 100644 --- a/docs/test_cases/t00030.md +++ b/docs/test_cases/t00030.md @@ -277,7 +277,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00030_class.svg b/docs/test_cases/t00030_class.svg index 6cdbb777..f56f2e8d 100644 --- a/docs/test_cases/t00030_class.svg +++ b/docs/test_cases/t00030_class.svg @@ -1,6 +1,6 @@ - + @@ -9,87 +9,87 @@ - - + + A - - + + B - - + + C - - + + D - - + + E - - + + R - + - + aaa : A - + - + bbb : std::vector<B> - + - + ccc : std::vector<C> - + - + ddd : D - + - + eee : E * diff --git a/docs/test_cases/t00031.md b/docs/test_cases/t00031.md index 6defd55d..52f812fb 100644 --- a/docs/test_cases/t00031.md +++ b/docs/test_cases/t00031.md @@ -298,7 +298,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00031_class.svg b/docs/test_cases/t00031_class.svg index 76bc36c5..6a0373a3 100644 --- a/docs/test_cases/t00031_class.svg +++ b/docs/test_cases/t00031_class.svg @@ -1,33 +1,33 @@ - + - + - + - - - + + + A - - + + B @@ -37,8 +37,8 @@ three - - + + @@ -48,23 +48,23 @@ - + - + ttt : T - - + + D - - + + C @@ -73,40 +73,40 @@ - - + + R - + - + aaa : A * - + - + bbb : std::vector<B> - + - + ccc : C<int> - + - + ddd : D * diff --git a/docs/test_cases/t00032.md b/docs/test_cases/t00032.md index 89ef92ae..74237c79 100644 --- a/docs/test_cases/t00032.md +++ b/docs/test_cases/t00032.md @@ -427,7 +427,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00032_class.svg b/docs/test_cases/t00032_class.svg index c87e05ce..6cf68fcc 100644 --- a/docs/test_cases/t00032_class.svg +++ b/docs/test_cases/t00032_class.svg @@ -1,6 +1,6 @@ - + @@ -9,69 +9,69 @@ - - + + Base - - + + TBase - - + + A - + - + operator()() : void - - + + B - + - + operator()() : void - - + + C - + - + operator()() : void - - + + Overload @@ -80,15 +80,15 @@ - + - + counter : L - - + + Overload @@ -97,19 +97,19 @@ - - + + R - + - + overload : Overload<TBase,int,A,B,C> diff --git a/docs/test_cases/t00033.md b/docs/test_cases/t00033.md index b831c174..117934c0 100644 --- a/docs/test_cases/t00033.md +++ b/docs/test_cases/t00033.md @@ -375,7 +375,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00033_class.svg b/docs/test_cases/t00033_class.svg index da055c13..0ae67436 100644 --- a/docs/test_cases/t00033_class.svg +++ b/docs/test_cases/t00033_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,15 +19,15 @@ - + - + aaa : T - - + + B @@ -36,15 +36,15 @@ - + - + bbb : T - - + + C @@ -53,30 +53,30 @@ - + - + ccc : T - - + + D - + - + ddd : int - - + + C @@ -85,8 +85,8 @@ - - + + B @@ -95,8 +95,8 @@ - - + + A @@ -105,19 +105,19 @@ - - + + R - + - + abc : A<B<std::unique_ptr<C<D>>>> diff --git a/docs/test_cases/t00034.md b/docs/test_cases/t00034.md index 68e73cc3..6e8aef10 100644 --- a/docs/test_cases/t00034.md +++ b/docs/test_cases/t00034.md @@ -351,7 +351,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00034_class.svg b/docs/test_cases/t00034_class.svg index 31ed5e3f..f8612c77 100644 --- a/docs/test_cases/t00034_class.svg +++ b/docs/test_cases/t00034_class.svg @@ -1,6 +1,6 @@ - + @@ -9,30 +9,30 @@ - - + + Void - + - + operator!=(const Void &) constexpr const : bool - + - + operator==(const Void &) constexpr const : bool - - + + lift_void @@ -41,8 +41,8 @@ - - + + lift_void @@ -51,8 +51,8 @@ - - + + drop_void @@ -61,8 +61,8 @@ - - + + drop_void @@ -71,34 +71,34 @@ - - + + A - - + + R - + - + la : lift_void_t<A> * - + - + lv : lift_void_t<void> * diff --git a/docs/test_cases/t00035.md b/docs/test_cases/t00035.md index abb81dc4..b55676d4 100644 --- a/docs/test_cases/t00035.md +++ b/docs/test_cases/t00035.md @@ -160,7 +160,7 @@ struct Right { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00035_class.svg b/docs/test_cases/t00035_class.svg index e336b3fc..c5bc51b0 100644 --- a/docs/test_cases/t00035_class.svg +++ b/docs/test_cases/t00035_class.svg @@ -1,6 +1,6 @@ - + @@ -9,40 +9,40 @@ - - + + Top - - + + Left - - + + Center - - + + Bottom - - + + Right diff --git a/docs/test_cases/t00036.md b/docs/test_cases/t00036.md index 6bbdb08c..c4513327 100644 --- a/docs/test_cases/t00036.md +++ b/docs/test_cases/t00036.md @@ -276,7 +276,7 @@ struct DImpl : public ns2::ns22::D { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00036_class.svg b/docs/test_cases/t00036_class.svg index 6b571231..9b14bc0c 100644 --- a/docs/test_cases/t00036_class.svg +++ b/docs/test_cases/t00036_class.svg @@ -1,6 +1,6 @@ - + @@ -9,23 +9,23 @@ - + ns1 - + ns11 - + ns111 - + ns2 - + ns22 - - + + E @@ -34,8 +34,8 @@ yellow - - + + A @@ -44,15 +44,15 @@ - + - + a : T - - + + A @@ -61,23 +61,23 @@ - - + + B - + - + a_int : A<int> - - + + C diff --git a/docs/test_cases/t00037.md b/docs/test_cases/t00037.md index 372a4808..00ee7253 100644 --- a/docs/test_cases/t00037.md +++ b/docs/test_cases/t00037.md @@ -288,7 +288,7 @@ struct A { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00037_class.svg b/docs/test_cases/t00037_class.svg index 3c38d79a..61568ebe 100644 --- a/docs/test_cases/t00037_class.svg +++ b/docs/test_cases/t00037_class.svg @@ -1,6 +1,6 @@ - + @@ -9,106 +9,106 @@ - - + + ST - + - + dimensions : ST::(anonymous_662) - + - + units : ST::(anonymous_792) - - + + ST::(dimensions) - + - + t : double - + - + x : double - + - + y : double - + - + z : double - - + + ST::(units) - + - + c : double - + - + h : double - - + + A - + - + A() : void - + - + st : ST diff --git a/docs/test_cases/t00038.md b/docs/test_cases/t00038.md index 72724213..fd975972 100644 --- a/docs/test_cases/t00038.md +++ b/docs/test_cases/t00038.md @@ -494,7 +494,7 @@ struct map - + @@ -9,8 +9,8 @@ - - + + thirdparty::ns1::color_t @@ -20,16 +20,16 @@ blue - - + + thirdparty::ns1::E - - + + property_t @@ -39,47 +39,47 @@ property_c - - + + A - - + + B - - + + C - - + + key_t - + - + key : std::string - - + + map @@ -88,8 +88,8 @@ - - + + map @@ -98,8 +98,8 @@ - - + + map @@ -108,8 +108,8 @@ - - + + map @@ -118,8 +118,8 @@ - - + + map diff --git a/docs/test_cases/t00039.md b/docs/test_cases/t00039.md index 55a9dc37..0ea21499 100644 --- a/docs/test_cases/t00039.md +++ b/docs/test_cases/t00039.md @@ -608,7 +608,7 @@ template struct FFF : public FF { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00039_class.svg b/docs/test_cases/t00039_class.svg index 1c2c45e3..3805310c 100644 --- a/docs/test_cases/t00039_class.svg +++ b/docs/test_cases/t00039_class.svg @@ -1,6 +1,6 @@ - + @@ -9,95 +9,95 @@ - - + + C - - + + D - - + + E - - + + CD - - + + DE - - + + CDE - - + + A - - + + AA - - + + AAA - + - + b : B * - - + + ns2::AAAA - - + + ns3::F @@ -106,15 +106,15 @@ - + - + t : T * - - + + ns3::FF @@ -123,15 +123,15 @@ - + - + m : M * - - + + ns3::FE @@ -140,15 +140,15 @@ - + - + m : M * - - + + ns3::FFF @@ -157,11 +157,11 @@ - + - + n : N * diff --git a/docs/test_cases/t00040.md b/docs/test_cases/t00040.md index 1195f311..8f0d0d1b 100644 --- a/docs/test_cases/t00040.md +++ b/docs/test_cases/t00040.md @@ -307,7 +307,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00040_class.svg b/docs/test_cases/t00040_class.svg index 56ca52ab..4212e005 100644 --- a/docs/test_cases/t00040_class.svg +++ b/docs/test_cases/t00040_class.svg @@ -1,6 +1,6 @@ - + @@ -9,70 +9,70 @@ - - + + A - + - + get_a() : int - + - + ii_ : int - - + + AA - - + + AAA - + - + get_aaa() : int - + - + b : B * - - + + R - + - + foo(A * a) : void diff --git a/docs/test_cases/t00041.md b/docs/test_cases/t00041.md index d59701b1..aba29f9e 100644 --- a/docs/test_cases/t00041.md +++ b/docs/test_cases/t00041.md @@ -390,7 +390,7 @@ struct NM : public N { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00041_class.svg b/docs/test_cases/t00041_class.svg index 7a3666f0..7b2b4b47 100644 --- a/docs/test_cases/t00041_class.svg +++ b/docs/test_cases/t00041_class.svg @@ -1,6 +1,6 @@ - + @@ -9,107 +9,107 @@ - - + + R - - + + D - + - + rr : RR * - - + + E - - + + F - - + + RR - + - + foo(H * h) : void - + - + e : E * - + - + f : F * - + - + g : detail::G * - - + + RRR - - + + ns1::N - - + + ns1::NN - - + + ns1::NM diff --git a/docs/test_cases/t00042.md b/docs/test_cases/t00042.md index d446e0d9..03aa0bda 100644 --- a/docs/test_cases/t00042.md +++ b/docs/test_cases/t00042.md @@ -305,7 +305,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00042_class.svg b/docs/test_cases/t00042_class.svg index 738d4452..12ca621b 100644 --- a/docs/test_cases/t00042_class.svg +++ b/docs/test_cases/t00042_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,15 +19,15 @@ - + - + a : T - - + + A @@ -36,15 +36,15 @@ - + - + a : void * - - + + B @@ -53,22 +53,22 @@ - + - + b : T - + - + bb : K - - + + A @@ -77,8 +77,8 @@ - - + + A @@ -87,8 +87,8 @@ - - + + B diff --git a/docs/test_cases/t00043.md b/docs/test_cases/t00043.md index 398a058e..81f49a9f 100644 --- a/docs/test_cases/t00043.md +++ b/docs/test_cases/t00043.md @@ -651,7 +651,7 @@ struct J { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00043_class.svg b/docs/test_cases/t00043_class.svg index fab46bf8..5edf311e 100644 --- a/docs/test_cases/t00043_class.svg +++ b/docs/test_cases/t00043_class.svg @@ -1,6 +1,6 @@ - + @@ -9,167 +9,167 @@ - + dependants - + dependencies - - + + A - - + + B - + - + b(dependants::A * a) : void - - + + BB - + - + bb(dependants::A * a) : void - - + + C - + - + c(dependants::B * b) : void - - + + D - + - + d(dependants::C * c) : void - + - + dd(dependants::BB * bb) : void - - + + E - + - + e(dependants::D * d) : void - - + + G - - + + GG - - + + H - + - + h(dependencies::G * g) : void - + - + hh(dependencies::GG * gg) : void - - + + I - + - + i(dependencies::H * h) : void - - + + J - + - + i(dependencies::I * i) : void diff --git a/docs/test_cases/t00044.md b/docs/test_cases/t00044.md index 33c51f8d..f50bb256 100644 --- a/docs/test_cases/t00044.md +++ b/docs/test_cases/t00044.md @@ -430,7 +430,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00044_class.svg b/docs/test_cases/t00044_class.svg index bd85c9fe..a60b986c 100644 --- a/docs/test_cases/t00044_class.svg +++ b/docs/test_cases/t00044_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + signal_handler @@ -19,8 +19,8 @@ - - + + sink @@ -28,26 +28,26 @@ signal_handler<Ret(Args...),A> - + - + sink(signal_t & sh) : void get_signal<CastTo>() : CastTo * - + - + signal : signal_t * - - + + signal_handler @@ -56,8 +56,8 @@ - - + + sink @@ -66,23 +66,23 @@ - - + + R - + - + sink1 : sink<signal_handler<void (int),bool>> - - + + signal_handler @@ -91,8 +91,8 @@ - - + + sink diff --git a/docs/test_cases/t00045.md b/docs/test_cases/t00045.md index b2b39774..3cd44b81 100644 --- a/docs/test_cases/t00045.md +++ b/docs/test_cases/t00045.md @@ -461,7 +461,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00045_class.svg b/docs/test_cases/t00045_class.svg index de4a6c10..5655085a 100644 --- a/docs/test_cases/t00045_class.svg +++ b/docs/test_cases/t00045_class.svg @@ -1,6 +1,6 @@ - + @@ -9,32 +9,32 @@ - - + + A - - + + AA - - + + AAA - - + + AAAA @@ -43,110 +43,110 @@ - + - + t : T - - + + ns1::A - - + + ns1::ns2::A - - + + ns1::ns2::B - - + + ns1::ns2::C - - + + ns1::ns2::D - - + + ns1::ns2::E - - + + ns1::ns2::AAA - - + + ns1::ns2::R - + - + foo(AA & aa) : void - + - + a : ns1::ns2::A * - + - + ns1_a : ns1::A * - + - + ns1_ns2_a : ns1::ns2::A * - + - + root_a : ::A * diff --git a/docs/test_cases/t00046.md b/docs/test_cases/t00046.md index 6ee017a2..e66cc7cc 100644 --- a/docs/test_cases/t00046.md +++ b/docs/test_cases/t00046.md @@ -394,7 +394,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00046_class.svg b/docs/test_cases/t00046_class.svg index 40a95127..dcb55e1e 100644 --- a/docs/test_cases/t00046_class.svg +++ b/docs/test_cases/t00046_class.svg @@ -1,6 +1,6 @@ - + @@ -9,120 +9,120 @@ - + ns1 - + ns2 - - + + A - - + + A - - + + B - - + + C - - + + D - - + + E - - + + R - + - + foo(AA & aa) : void - + - + a : ns1::ns2::A * - + - + i : std::vector<std::uint8_t> - + - + ns1_a : ns1::A * - + - + ns1_ns2_a : ns1::ns2::A * - + - + root_a : ::A * - - + + A - - + + AA diff --git a/docs/test_cases/t00047.md b/docs/test_cases/t00047.md index aa5f99c9..df0c750e 100644 --- a/docs/test_cases/t00047.md +++ b/docs/test_cases/t00047.md @@ -192,7 +192,7 @@ using conditional = typename conditional_t::type; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00047_class.svg b/docs/test_cases/t00047_class.svg index 29601b77..9f1c5320 100644 --- a/docs/test_cases/t00047_class.svg +++ b/docs/test_cases/t00047_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + conditional_t @@ -19,8 +19,8 @@ - - + + conditional_t @@ -29,8 +29,8 @@ - - + + conditional_t @@ -39,8 +39,8 @@ - - + + conditional_t diff --git a/docs/test_cases/t00048.md b/docs/test_cases/t00048.md index 1a89feb5..129a54cd 100644 --- a/docs/test_cases/t00048.md +++ b/docs/test_cases/t00048.md @@ -544,7 +544,7 @@ template struct BaseTemplate { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00048_class.svg b/docs/test_cases/t00048_class.svg index 584569de..c4ec5875 100644 --- a/docs/test_cases/t00048_class.svg +++ b/docs/test_cases/t00048_class.svg @@ -1,6 +1,6 @@ - + @@ -9,30 +9,30 @@ - - + + Base - + - + foo() = 0 : void - + - + base : int - - + + BaseTemplate @@ -40,45 +40,45 @@ T - + - + foo() = 0 : void - + - + base : T - - + + B - + - + foo() : void - + - + b : int - - + + BTemplate @@ -86,45 +86,45 @@ T - + - + foo() : void - + - + b : T - - + + A - + - + foo() : void - + - + a : int - - + + ATemplate @@ -132,19 +132,19 @@ T - + - + foo() : void - + - + a : T diff --git a/docs/test_cases/t00049.md b/docs/test_cases/t00049.md index e44be010..a049f2ab 100644 --- a/docs/test_cases/t00049.md +++ b/docs/test_cases/t00049.md @@ -325,7 +325,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00049_class.svg b/docs/test_cases/t00049_class.svg index 0ba4113d..31bc05fe 100644 --- a/docs/test_cases/t00049_class.svg +++ b/docs/test_cases/t00049_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -18,23 +18,23 @@ T - + - + get_a() : T & - + - + a : T - - + + A @@ -43,8 +43,8 @@ - - + + A @@ -53,8 +53,8 @@ - - + + A @@ -63,47 +63,47 @@ - - + + R - + - + get_int_map() : A<intmap> - + - + set_int_map(A<intmap> && int_map) : void - + - + a_int_map : A<intmap> - + - + a_string : A<thestring> - + - + a_vector_string : A<string_vector> diff --git a/docs/test_cases/t00050.md b/docs/test_cases/t00050.md index 32ff71e9..75a3fb60 100644 --- a/docs/test_cases/t00050.md +++ b/docs/test_cases/t00050.md @@ -504,7 +504,7 @@ class NoComment { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00050_class.svg b/docs/test_cases/t00050_class.svg index c5a373fc..0f4f8dac 100644 --- a/docs/test_cases/t00050_class.svg +++ b/docs/test_cases/t00050_class.svg @@ -1,6 +1,6 @@ - + @@ -9,40 +9,40 @@ - - + + A - - + + B - - + + C - - + + utils::D - - + + E @@ -52,8 +52,8 @@ E3 - - + + F @@ -62,43 +62,43 @@ - + - + t : T[N] - + - + v : V - - + + G - - + + NoComment - + Lorem ipsum dolor sit - + Lorem ipsum dolor sit - + Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis vehicula class ultricies mollis dictumst, aenean non a in donec nulla. @@ -125,50 +125,50 @@ imperdiet praesent magnis ridiculus congue gravida curabitur dictum sagittis, enim et magna sit inceptos sodales parturient pharetra mollis, aenean vel nostra tellus commodo pretium sapien sociosqu. - + This is a short description of class G. - + This is an intermediate description of class G. - + This is a long description of class G. - + Lorem ipsum - + TODO 1. Write meaningful comment - + TODO 2. Write tests - + TODO 3. Implement - + Long comment example - + TODO Implement... - + Simple array wrapper. - + Template parameters diff --git a/docs/test_cases/t00051.md b/docs/test_cases/t00051.md index 5f254076..0bcdc18a 100644 --- a/docs/test_cases/t00051.md +++ b/docs/test_cases/t00051.md @@ -637,7 +637,7 @@ A::custom_thread2 A::start_thread2() } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00051_class.svg b/docs/test_cases/t00051_class.svg index bfb8533f..a837d787 100644 --- a/docs/test_cases/t00051_class.svg +++ b/docs/test_cases/t00051_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + B @@ -18,125 +18,125 @@ F,FF=F - + - + B(F && f, FF && ff) : void - + - + f() : void - + - + ff() : void - + - + f_ : F - + - + ff_ : FF - - + + B<(lambda at ../../tests/t00051/t00051.cc:43:18),(lambda at ../../tests/t00051/t00051.cc:43:27)> - + - + B((lambda at ../../tests/t00051/t00051.cc:43:18) && f, (lambda at ../../tests/t00051/t00051.cc:43:27) && ff) : void - + - + f() : void - + - + ff() : void - + - + f_ : (lambda at ../../tests/t00051/t00051.cc:43:18) - + - + ff_ : (lambda at ../../tests/t00051/t00051.cc:43:27) - - + + A - + - + get_function() : (lambda at ../../tests/t00051/t00051.cc:48:16) - + - + start_thread1() : A::custom_thread1 - + - + start_thread2() : A::custom_thread2 - + - + start_thread3() : B<(lambda at ../../tests/t00051/t00051.cc:43:18),(lambda at ../../tests/t00051/t00051.cc:43:27)> - - + + A::custom_thread1 @@ -145,18 +145,18 @@ custom_thread1<Function,Args...>(Function && f, Args &&... args) : void - - + + A::custom_thread2 - + - + thread((lambda at ../../tests/t00051/t00051.cc:59:27) &&) : void diff --git a/docs/test_cases/t00052.md b/docs/test_cases/t00052.md index 732ac04c..3a4b1fa0 100644 --- a/docs/test_cases/t00052.md +++ b/docs/test_cases/t00052.md @@ -396,7 +396,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00052_class.svg b/docs/test_cases/t00052_class.svg index 5fa8af10..02ddfc22 100644 --- a/docs/test_cases/t00052_class.svg +++ b/docs/test_cases/t00052_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -21,8 +21,8 @@ aa<F,Q>(F && f, Q q) : void - - + + B @@ -30,18 +30,18 @@ T - + - + b(T t) : T bb<F>(F && f, T t) : T - - + + C @@ -52,8 +52,8 @@ c<P>(P p) : T - - + + B @@ -62,8 +62,8 @@ - - + + C @@ -72,33 +72,33 @@ - - + + R - + - + a : A - + - + b : B<int> - + - + c : C<int> diff --git a/docs/test_cases/t00053.md b/docs/test_cases/t00053.md index 1811e2e5..fc9c6829 100644 --- a/docs/test_cases/t00053.md +++ b/docs/test_cases/t00053.md @@ -418,7 +418,7 @@ enum class j { jjj }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00053_class.svg b/docs/test_cases/t00053_class.svg index 0792dd30..2f6c4a38 100644 --- a/docs/test_cases/t00053_class.svg +++ b/docs/test_cases/t00053_class.svg @@ -1,6 +1,6 @@ - + @@ -9,72 +9,72 @@ - - + + A - - + + C - - + + E - - + + F - - + + a - - + + c - - + + e - - + + f - - + + h @@ -82,8 +82,8 @@ hhh - - + + j @@ -91,56 +91,56 @@ jjj - - + + b - - + + d - - + + g - - + + B - - + + D - - + + G - - + + i diff --git a/docs/test_cases/t00054.md b/docs/test_cases/t00054.md index 08ec6923..624ccd53 100644 --- a/docs/test_cases/t00054.md +++ b/docs/test_cases/t00054.md @@ -460,7 +460,7 @@ enum class j { jjj }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00054_class.svg b/docs/test_cases/t00054_class.svg index 0ed10dad..9a2f4715 100644 --- a/docs/test_cases/t00054_class.svg +++ b/docs/test_cases/t00054_class.svg @@ -1,6 +1,6 @@ - + @@ -9,28 +9,28 @@ - + detail - + detail2 - + detail3 - + detail4 - - + + d - - + + a @@ -40,8 +40,8 @@ - - + + c @@ -51,8 +51,8 @@ - - + + e @@ -62,40 +62,40 @@ - - + + C - - + + F - - + + D - - + + E - - + + A @@ -104,8 +104,8 @@ - - + + B @@ -114,8 +114,8 @@ - - + + f @@ -124,8 +124,8 @@ - - + + G @@ -133,8 +133,8 @@ - - + + h @@ -143,8 +143,8 @@ hhh - - + + i @@ -153,8 +153,8 @@ iii - - + + j @@ -163,16 +163,16 @@ jjj - - + + b - - + + g diff --git a/docs/test_cases/t00055.md b/docs/test_cases/t00055.md index d87ae8e8..5710d97c 100644 --- a/docs/test_cases/t00055.md +++ b/docs/test_cases/t00055.md @@ -266,7 +266,7 @@ struct J { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00055_class.svg b/docs/test_cases/t00055_class.svg index 4c62b1e2..3a4adfb8 100644 --- a/docs/test_cases/t00055_class.svg +++ b/docs/test_cases/t00055_class.svg @@ -1,6 +1,6 @@ - + @@ -9,80 +9,80 @@ - - + + A - - + + B - - + + C - - + + D - - + + E - - + + F - - + + G - - + + H - - + + I - - + + J diff --git a/docs/test_cases/t00056.md b/docs/test_cases/t00056.md index 41e5a8c4..75ca604d 100644 --- a/docs/test_cases/t00056.md +++ b/docs/test_cases/t00056.md @@ -605,7 +605,7 @@ struct F { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00056_class.svg b/docs/test_cases/t00056_class.svg index 9e267827..ebe5f2b9 100644 --- a/docs/test_cases/t00056_class.svg +++ b/docs/test_cases/t00056_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + «concept» @@ -20,8 +20,8 @@ - - + + «concept» @@ -33,8 +33,8 @@ sizeof (l) > sizeof (r) - - + + «concept» @@ -44,8 +44,8 @@ - - + + «concept» @@ -58,8 +58,8 @@ container.begin() container.end() - - + + «concept» @@ -71,8 +71,8 @@ typename T::value_type - - + + «concept» @@ -86,8 +86,8 @@ {std::to_string(s)} noexcept {std::to_string(s)} -> std::same_as<std::string> - - + + «concept» @@ -97,8 +97,8 @@ - - + + «concept» @@ -108,8 +108,8 @@ - - + + A @@ -118,15 +118,15 @@ - + - + a : T - - + + B @@ -135,15 +135,15 @@ - + - + b : T - - + + C @@ -152,15 +152,15 @@ - + - + c : T - - + + D @@ -169,8 +169,8 @@ - - + + E @@ -179,29 +179,29 @@ - + - + e1 : T1 - + - + e2 : T2 - + - + e3 : T3 - - + + F @@ -210,25 +210,25 @@ - + - + f1 : T1 - + - + f2 : T2 - + - + f3 : T3 diff --git a/docs/test_cases/t00057.md b/docs/test_cases/t00057.md index b0fb4a14..a265505b 100644 --- a/docs/test_cases/t00057.md +++ b/docs/test_cases/t00057.md @@ -550,7 +550,7 @@ struct t00057_R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00057_class.svg b/docs/test_cases/t00057_class.svg index 7d4a2e25..41e622ed 100644 --- a/docs/test_cases/t00057_class.svg +++ b/docs/test_cases/t00057_class.svg @@ -1,6 +1,6 @@ - + @@ -9,53 +9,53 @@ - - + + t00057_A - + - + a1 : int - - + + t00057_B - + - + b1 : int - - + + t00057_C - + - + c1 : int - - + + «union» @@ -63,73 +63,73 @@ - + - + d1 : int - + - + d2 : float - - + + t00057_E - + - + coordinates : t00057_E::(anonymous_739) - + - + e : int - + - + height : t00057_E::(anonymous_807) - - + + t00057_E::(coordinates) - + - + x : int - + - + y : int - - + + «union» @@ -137,105 +137,105 @@ - + - + t : double - + - + z : int - - + + t00057_G - + - + g1 : int - - + + t00057_R - + - + a : struct t00057_A - + - + b : t00057_B - + - + c : struct t00057_C * - + - + d : union t00057_D - + - + e : struct t00057_E * - + - + f : struct t00057_F * - + - + g : struct t00057_G * - - + + t00057_F - + - + f1 : int diff --git a/docs/test_cases/t00058.md b/docs/test_cases/t00058.md index eabf0845..76af365b 100644 --- a/docs/test_cases/t00058.md +++ b/docs/test_cases/t00058.md @@ -433,7 +433,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00058_class.svg b/docs/test_cases/t00058_class.svg index 81c5b3cb..be27a8cc 100644 --- a/docs/test_cases/t00058_class.svg +++ b/docs/test_cases/t00058_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + first_type @@ -19,8 +19,8 @@ - - + + «concept» @@ -30,8 +30,8 @@ - - + + A @@ -40,15 +40,15 @@ - + - + a : std::vector<T> - - + + B @@ -57,22 +57,22 @@ - + - + b : std::vector<T> - + - + bb : P - - + + A @@ -81,8 +81,8 @@ - - + + A @@ -91,8 +91,8 @@ - - + + B @@ -101,26 +101,26 @@ - - + + R - + - + aa : A<int,int,double,std::string> - + - + bb : B<int,std::string,int,double,A<int,int>> diff --git a/docs/test_cases/t00059.md b/docs/test_cases/t00059.md index 29b037a6..68ea1174 100644 --- a/docs/test_cases/t00059.md +++ b/docs/test_cases/t00059.md @@ -645,7 +645,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00059_class.svg b/docs/test_cases/t00059_class.svg index c50e00ea..879b6877 100644 --- a/docs/test_cases/t00059_class.svg +++ b/docs/test_cases/t00059_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + «concept» @@ -23,8 +23,8 @@ T{} t.get_name() - - + + «concept» @@ -36,8 +36,8 @@ t.get_sweetness() - - + + «concept» @@ -49,96 +49,96 @@ t.get_bitterness() - - + + gala_apple - + - + get_name() const : std::string - + - + get_sweetness() const : float - - + + empire_apple - + - + get_name() const : std::string - + - + get_sweetness() const : float - - + + lima_orange - + - + get_bitterness() const : float - + - + get_name() const : std::string - - + + valencia_orange - + - + get_bitterness() const : float - + - + get_name() const : std::string - - + + fruit_factory @@ -146,23 +146,23 @@ apple_c TA,orange_c TO - + - + create_apple() const : TA - + - + create_orange() const : TO - - + + fruit_factory @@ -171,8 +171,8 @@ - - + + fruit_factory @@ -181,26 +181,26 @@ - - + + R - + - + factory_1 : fruit_factory_1 - + - + factory_2 : fruit_factory_2 diff --git a/docs/test_cases/t00060.md b/docs/test_cases/t00060.md index 56c5d1a3..6991dc4e 100644 --- a/docs/test_cases/t00060.md +++ b/docs/test_cases/t00060.md @@ -274,7 +274,7 @@ template struct H : public G { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00060_class.svg b/docs/test_cases/t00060_class.svg index d5071b5f..bbed4e56 100644 --- a/docs/test_cases/t00060_class.svg +++ b/docs/test_cases/t00060_class.svg @@ -1,6 +1,6 @@ - + @@ -9,40 +9,40 @@ - - + + A - - + + B - - + + C - - + + D - - + + G @@ -51,15 +51,15 @@ - + - + g : T - - + + H @@ -68,18 +68,18 @@ - + - + h : G<T> - + - + hh : P diff --git a/docs/test_cases/t00061.md b/docs/test_cases/t00061.md index 60118477..c396da0a 100644 --- a/docs/test_cases/t00061.md +++ b/docs/test_cases/t00061.md @@ -63,7 +63,7 @@ struct C { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00061_class.svg b/docs/test_cases/t00061_class.svg index 5a74041c..e4341419 100644 --- a/docs/test_cases/t00061_class.svg +++ b/docs/test_cases/t00061_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A diff --git a/docs/test_cases/t00062.md b/docs/test_cases/t00062.md index 3713a7e2..dd7cadbf 100644 --- a/docs/test_cases/t00062.md +++ b/docs/test_cases/t00062.md @@ -1370,7 +1370,7 @@ struct A> { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00062_class.svg b/docs/test_cases/t00062_class.svg index ad983669..0594a88e 100644 --- a/docs/test_cases/t00062_class.svg +++ b/docs/test_cases/t00062_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A @@ -19,15 +19,15 @@ - + - + u : U & - - + + A @@ -36,15 +36,15 @@ - + - + u : U & - - + + A @@ -53,8 +53,8 @@ - - + + A @@ -63,15 +63,15 @@ - + - + u : U ** - - + + A @@ -80,15 +80,15 @@ - + - + u : U *** - - + + A @@ -97,15 +97,15 @@ - + - + u : U *** - - + + A @@ -114,15 +114,15 @@ - + - + u : U && - - + + A @@ -131,15 +131,15 @@ - + - + u : const U & - - + + A @@ -148,22 +148,22 @@ - + - + c : C & - + - + m : M C::* - - + + A @@ -172,22 +172,22 @@ - + - + c : C && - + - + m : M C::* - - + + A @@ -196,22 +196,22 @@ - + - + c : C & - + - + m : M C::* - - + + A @@ -220,15 +220,15 @@ - + - + c : C & - - + + A @@ -237,22 +237,22 @@ - + - + c : C && - + - + m : M C::* - - + + A @@ -261,22 +261,22 @@ - + - + c : C && - + - + mf : float C::* - - + + A @@ -285,22 +285,22 @@ - + - + c : C & - + - + m : M C::* - - + + A @@ -309,15 +309,15 @@ - + - + n : char[N] - - + + A @@ -326,15 +326,15 @@ - + - + n : std::vector<char> - - + + A @@ -343,15 +343,15 @@ - + - + klm : char[K][L][M] - - + + A @@ -360,15 +360,15 @@ - + - + u : bool - - + + A @@ -377,15 +377,15 @@ - + - + c : C<T> - - + + A @@ -394,22 +394,22 @@ - + - + args : std::tuple<Args...> - + - + c : C<T> - - + + A diff --git a/docs/test_cases/t00063.md b/docs/test_cases/t00063.md index f1b9f0a8..be19df0b 100644 --- a/docs/test_cases/t00063.md +++ b/docs/test_cases/t00063.md @@ -61,7 +61,7 @@ enum class C { c1, c2, c3 }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00063_class.svg b/docs/test_cases/t00063_class.svg index acff32cc..f0a75c0d 100644 --- a/docs/test_cases/t00063_class.svg +++ b/docs/test_cases/t00063_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + A diff --git a/docs/test_cases/t00064.md b/docs/test_cases/t00064.md index a743fa62..73a3c073 100644 --- a/docs/test_cases/t00064.md +++ b/docs/test_cases/t00064.md @@ -1034,7 +1034,7 @@ public: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00064_class.svg b/docs/test_cases/t00064_class.svg index 53a564e2..9daa7c96 100644 --- a/docs/test_cases/t00064_class.svg +++ b/docs/test_cases/t00064_class.svg @@ -1,6 +1,6 @@ - + @@ -9,8 +9,8 @@ - - + + type_list @@ -19,8 +19,8 @@ - - + + type_list @@ -29,8 +29,8 @@ - - + + type_list @@ -39,8 +39,8 @@ - - + + type_list @@ -49,8 +49,8 @@ - - + + head @@ -59,8 +59,8 @@ - - + + type_list @@ -69,8 +69,8 @@ - - + + type_list @@ -79,8 +79,8 @@ - - + + type_list @@ -89,8 +89,8 @@ - - + + type_group_pair @@ -99,15 +99,15 @@ - + - + size : const size_t - - + + optional_ref @@ -116,8 +116,8 @@ - - + + optional_ref @@ -126,8 +126,8 @@ - - + + type_group_pair_it @@ -135,54 +135,54 @@ It,type_list<First...>,type_list<Second...> - + - + find(value_type const& v) constexpr : unsigned int - + - + get(unsigned int i) : ref_t - + - + getp(unsigned int i) : value_type const* - - + + A - - + + B - - + + C - - + + type_list @@ -191,8 +191,8 @@ - - + + type_list @@ -201,8 +201,8 @@ - - + + type_list @@ -211,8 +211,8 @@ - - + + type_group_pair @@ -221,30 +221,30 @@ - - + + R - + - + abc : type_group_pair<type_list<float,double>,type_list<A,B,C>> - + - + aboolint : type_list<A,bool,int> - - + + type_group_pair @@ -253,8 +253,8 @@ - - + + type_group_pair_it @@ -263,8 +263,8 @@ - - + + head diff --git a/docs/test_cases/t00065.md b/docs/test_cases/t00065.md index 2faa4ade..174d991d 100644 --- a/docs/test_cases/t00065.md +++ b/docs/test_cases/t00065.md @@ -527,7 +527,7 @@ struct R { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00065_class.svg b/docs/test_cases/t00065_class.svg index 185c027a..192e1668 100644 --- a/docs/test_cases/t00065_class.svg +++ b/docs/test_cases/t00065_class.svg @@ -1,6 +1,6 @@ - + @@ -9,20 +9,20 @@ - + module1 - + submodule1a - + module2 - + concepts - - + + ABC @@ -32,8 +32,8 @@ c - - + + XYZ @@ -43,68 +43,68 @@ z - - + + A - + - + abc : ABC - + - + pimpl : detail::AImpl * - + - + xyz : XYZ - - + + AImpl - - + + B - + - + B() = default : void - + - + b() : void - - + + C @@ -113,15 +113,15 @@ - + - + t : T * - - + + C @@ -130,8 +130,8 @@ - - + + D @@ -140,22 +140,22 @@ - + - + c : C<int> - + - + t : T - - + + C @@ -164,8 +164,8 @@ - - + + D @@ -174,8 +174,8 @@ - - + + «concept» @@ -186,33 +186,33 @@ T{} t.b() - - + + R - + - + a : A * - + - + c : C<B> - + - + d : D<B> diff --git a/docs/test_cases/t00066.md b/docs/test_cases/t00066.md index f29d0b94..8793a9c6 100644 --- a/docs/test_cases/t00066.md +++ b/docs/test_cases/t00066.md @@ -802,7 +802,7 @@ int A::static_int = 1; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00066_class.svg b/docs/test_cases/t00066_class.svg index 5a76889c..f0e31fe6 100644 --- a/docs/test_cases/t00066_class.svg +++ b/docs/test_cases/t00066_class.svg @@ -1,6 +1,6 @@ - + @@ -9,222 +9,222 @@ - - + + A - + - + a_ : int - + - + auto_member : const unsigned long - + - + b_ : int - + - + c_ : int - + - + private_member : int - + - + protected_member : int - + - + public_member : int - + - + static_const_int : const int - + - + static_int : int - + - + A(int i) : void - + - + A(A &&) = default : void - + - + A(const A &) = deleted : void - + - + A() = default : void - + - + auto_method() : int - + - + basic_method() : void - + - + const_method() const : void - + - + create_from_int(int i) : A - + - + default_int(int i = 12) : int - + - + default_string(int i, std::string s = "abc") : std::string - + - + double_int(const int i) : int - + - + operator++() : A & - + - + operator=(A && other) noexcept : A & - + - + operator=(A & other) noexcept : A & - + - + private_method() : void - + - + protected_method() : void - + - + size() const : std::size_t - + - + static_method() : int - + - + sum(const double a, const double b) : int - + - + ~A() = default : void - + - + compare : std::function<bool (const int)> diff --git a/docs/test_cases/t00067.md b/docs/test_cases/t00067.md index ab9675f5..00a4b6bc 100644 --- a/docs/test_cases/t00067.md +++ b/docs/test_cases/t00067.md @@ -525,7 +525,7 @@ int A::static_int = 1; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t00067_class.svg b/docs/test_cases/t00067_class.svg index 84fadf4a..f733f717 100644 --- a/docs/test_cases/t00067_class.svg +++ b/docs/test_cases/t00067_class.svg @@ -1,6 +1,6 @@ - + @@ -9,152 +9,152 @@ - - + + A - + - + auto_method() : int - + - + basic_method() : void - + - + const_method() const : void - + - + default_int(int i = 12) : int - + - + default_string(int i, std::string s = "abc") : std::string - + - + double_int(const int i) : int - + - + private_method() : void - + - + protected_method() : void - + - + size() const : std::size_t - + - + sum(const double a, const double b) : int - + - + a_ : int - + - + auto_member : const unsigned long - + - + b_ : int - + - + c_ : int - + - + compare : std::function<bool (const int)> - + - + private_member : int - + - + protected_member : int - + - + public_member : int - + - + static_const_int : const int - + - + static_int : int diff --git a/docs/test_cases/t20001.md b/docs/test_cases/t20001.md index 820f267c..d6e5056d 100644 --- a/docs/test_cases/t20001.md +++ b/docs/test_cases/t20001.md @@ -108,7 +108,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, @@ -151,6 +151,52 @@ int tmain() "sequences": [ { "messages": [ + { + "from": { + "activity_id": "622672604730036140", + "activity_name": "clanguml::t20001::tmain()", + "participant_id": "622672604730036140", + "participant_name": "clanguml::t20001::tmain()" + }, + "name": "A()", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 7, + "file": "../../tests/t20001/t20001.cc", + "line": 63, + "translation_unit": "../../tests/t20001/t20001.cc" + }, + "to": { + "activity_id": "275353461034438145", + "activity_name": "clanguml::t20001::A::A()", + "participant_id": "1771943546649183134" + }, + "type": "message" + }, + { + "from": { + "activity_id": "622672604730036140", + "activity_name": "clanguml::t20001::tmain()", + "participant_id": "622672604730036140", + "participant_name": "clanguml::t20001::tmain()" + }, + "name": "B(A &)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 7, + "file": "../../tests/t20001/t20001.cc", + "line": 64, + "translation_unit": "../../tests/t20001/t20001.cc" + }, + "to": { + "activity_id": "2235477658795500000", + "activity_name": "clanguml::t20001::B::B(A &)", + "participant_id": "272433898507800600" + }, + "type": "message" + }, { "from": { "activity_id": "622672604730036140", diff --git a/docs/test_cases/t20001_sequence.svg b/docs/test_cases/t20001_sequence.svg index 85906844..7d0127a7 100644 --- a/docs/test_cases/t20001_sequence.svg +++ b/docs/test_cases/t20001_sequence.svg @@ -1,6 +1,6 @@ - + - + @@ -9,87 +9,101 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + tmain() - - tmain() + + tmain() - - + + A - - A + + A - - + + B - - B + + B - - - - - - - - + + + + + + + + + + - add(int,int) + A() - - - - - - wrap_add3(int,int,int) + + + + B(A &) - - - - add3(int,int,int) + + + + add(int,int) - - - - - - add(int,int) + + + + + + wrap_add3(int,int,int) - - - - - - - - - - log_result(int) + + + + add3(int,int,int) - - - - - - log_result(int) + + + + + + add(int,int) - - - - - Main test function + + + + + + + + + + log_result(int) + + + + + + + log_result(int) + + + + + + Main test function diff --git a/docs/test_cases/t20002.md b/docs/test_cases/t20002.md index 43f3e00c..f19e2dfb 100644 --- a/docs/test_cases/t20002.md +++ b/docs/test_cases/t20002.md @@ -45,7 +45,7 @@ void m1() { m2(); } { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20002_sequence.svg b/docs/test_cases/t20002_sequence.svg index c662d0fb..33067c39 100644 --- a/docs/test_cases/t20002_sequence.svg +++ b/docs/test_cases/t20002_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,51 +9,51 @@ - - - - + + + + - - + + m1() - + m1() - - + + m2() - + m2() - - + + m3() - + m3() - - + + m4() - + m4() - - - - - + + + + + - + - + diff --git a/docs/test_cases/t20003.md b/docs/test_cases/t20003.md index 7f869910..a743c7a7 100644 --- a/docs/test_cases/t20003.md +++ b/docs/test_cases/t20003.md @@ -41,7 +41,7 @@ template void m1(T p) { m2(p); } { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20003_sequence.svg b/docs/test_cases/t20003_sequence.svg index b0a014ec..28f5c468 100644 --- a/docs/test_cases/t20003_sequence.svg +++ b/docs/test_cases/t20003_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,51 +9,51 @@ - - - - + + + + - - + + m1<T>(T) - + m1<T>(T) - - + + m2<T>(T) - + m2<T>(T) - - + + m3<T>(T) - + m3<T>(T) - - + + m4<T>(T) - + m4<T>(T) - - - - - + + + + + - + - + diff --git a/docs/test_cases/t20004.md b/docs/test_cases/t20004.md index 607c05bc..5407c79c 100644 --- a/docs/test_cases/t20004.md +++ b/docs/test_cases/t20004.md @@ -77,7 +77,7 @@ int main() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20004_sequence.svg b/docs/test_cases/t20004_sequence.svg index e2543a05..d0380978 100644 --- a/docs/test_cases/t20004_sequence.svg +++ b/docs/test_cases/t20004_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,16 +9,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -29,87 +29,87 @@ - - + + main() - + main() - - + + m1<float>(float) - + m1<float>(float) - - + + m1<unsigned long>(unsigned long) - + m1<unsigned long>(unsigned long) - - + + m4<unsigned long>(unsigned long) - + m4<unsigned long>(unsigned long) - - + + m1<std::string>(std::string) - + m1<std::string>(std::string) - - + + m2<std::string>(std::string) - + m2<std::string>(std::string) - - + + m1<int>(int) - + m1<int>(int) - - + + m2<int>(int) - + m2<int>(int) - - + + m3<int>(int) - + m3<int>(int) - - + + m4<int>(int) - + m4<int>(int) - - - - - - - - - - - + + + + + + + + + + + - + - + @@ -117,11 +117,11 @@ - + - + @@ -129,19 +129,19 @@ - + - + - + - + diff --git a/docs/test_cases/t20005.md b/docs/test_cases/t20005.md index 29140b38..9b6a395d 100644 --- a/docs/test_cases/t20005.md +++ b/docs/test_cases/t20005.md @@ -48,7 +48,7 @@ template struct C { { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20005_sequence.svg b/docs/test_cases/t20005_sequence.svg index 1bfe6ca5..73d6378d 100644 --- a/docs/test_cases/t20005_sequence.svg +++ b/docs/test_cases/t20005_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,42 +9,42 @@ - - - + + + - - + + C<T> - + C<T> - - + + B<T> - + B<T> - - + + A<T> - + A<T> - - - + + + c(T) - + b(T) - + a(T) diff --git a/docs/test_cases/t20006.md b/docs/test_cases/t20006.md index eae68a8d..2106427b 100644 --- a/docs/test_cases/t20006.md +++ b/docs/test_cases/t20006.md @@ -106,7 +106,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, @@ -167,28 +167,6 @@ void tmain() }, "type": "class" }, - { - "id": "264392653889863384", - "name": "clanguml::t20006::BB", - "source_location": { - "column": 42, - "file": "../../tests/t20006/t20006.cc", - "line": 26, - "translation_unit": "../../tests/t20006/t20006.cc" - }, - "type": "class" - }, - { - "id": "1903567228894636312", - "name": "clanguml::t20006::AA", - "source_location": { - "column": 30, - "file": "../../tests/t20006/t20006.cc", - "line": 21, - "translation_unit": "../../tests/t20006/t20006.cc" - }, - "type": "class" - }, { "id": "2269742833301555472", "name": "clanguml::t20006::BB", @@ -210,6 +188,28 @@ void tmain() "translation_unit": "../../tests/t20006/t20006.cc" }, "type": "class" + }, + { + "id": "264392653889863384", + "name": "clanguml::t20006::BB", + "source_location": { + "column": 42, + "file": "../../tests/t20006/t20006.cc", + "line": 26, + "translation_unit": "../../tests/t20006/t20006.cc" + }, + "type": "class" + }, + { + "id": "1903567228894636312", + "name": "clanguml::t20006::AA", + "source_location": { + "column": 30, + "file": "../../tests/t20006/t20006.cc", + "line": 21, + "translation_unit": "../../tests/t20006/t20006.cc" + }, + "type": "class" } ], "sequences": [ @@ -305,6 +305,52 @@ void tmain() }, "type": "message" }, + { + "from": { + "activity_id": "363965584448680958", + "activity_name": "clanguml::t20006::tmain()", + "participant_id": "363965584448680958", + "participant_name": "clanguml::t20006::tmain()" + }, + "name": "BB(AA *)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 26, + "file": "../../tests/t20006/t20006.cc", + "line": 67, + "translation_unit": "../../tests/t20006/t20006.cc" + }, + "to": { + "activity_id": "381732876807761480", + "activity_name": "clanguml::t20006::BB::BB(AA *)", + "participant_id": "2269742833301555472" + }, + "type": "message" + }, + { + "from": { + "activity_id": "363965584448680958", + "activity_name": "clanguml::t20006::tmain()", + "participant_id": "363965584448680958", + "participant_name": "clanguml::t20006::tmain()" + }, + "name": "BB(AA &)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 20, + "file": "../../tests/t20006/t20006.cc", + "line": 68, + "translation_unit": "../../tests/t20006/t20006.cc" + }, + "to": { + "activity_id": "1051013203072323842", + "activity_name": "clanguml::t20006::BB::BB(AA &)", + "participant_id": "1743503037360505162" + }, + "type": "message" + }, { "from": { "activity_id": "363965584448680958", diff --git a/docs/test_cases/t20006_sequence.svg b/docs/test_cases/t20006_sequence.svg index 09166755..8accb977 100644 --- a/docs/test_cases/t20006_sequence.svg +++ b/docs/test_cases/t20006_sequence.svg @@ -1,6 +1,6 @@ - + - + @@ -9,107 +9,111 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tmain() - - tmain() + + tmain() - - + + B<int> - - B<int> + + B<int> - - + + A<int> - - A<int> + + A<int> - - + + B<std::string> - - B<std::string> + + B<std::string> - - + + A<std::string> - - A<std::string> + + A<std::string> - - - BB<int,int> - - BB<int,int> + + + BB<int,std::string> + + BB<int,std::string> - - - AA<int> - - AA<int> + + + BB<int,float> + + BB<int,float> - - - BB<int,std::string> - - BB<int,std::string> + + + BB<int,int> + + BB<int,int> - - - BB<int,float> - - BB<int,float> + + + AA<int> + + AA<int> - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + b(int) - + a1(int) @@ -118,12 +122,12 @@ - + b(std::string) - + a2(std::string) @@ -132,62 +136,72 @@ - - - - bb1(int,int) + + + + BB(AA<int> *) - - - - aa1(int) + + + + BB(AA<int> &) - - - - bb2(int,int) + + + + bb1(int,int) - - - - aa2(int) + + + + aa1(int) - - - - bb1(int,std::string) + + + + bb2(int,int) - - - - aa2(int) + + + + aa2(int) - - - - bb2(int,std::string) + + + + bb1(int,std::string) - - - - aa1(int) + + + + aa2(int) - - - - bb1(int,float) + + + + bb2(int,std::string) - - - - - - bb2(int,float) + + + + aa1(int) - - - - aa2(int) + + + + bb1(int,float) + + + + + + + bb2(int,float) + + + + + aa2(int) diff --git a/docs/test_cases/t20007.md b/docs/test_cases/t20007.md index 9941839b..17000258 100644 --- a/docs/test_cases/t20007.md +++ b/docs/test_cases/t20007.md @@ -52,7 +52,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20007_sequence.svg b/docs/test_cases/t20007_sequence.svg index ae63e10c..a8795abb 100644 --- a/docs/test_cases/t20007_sequence.svg +++ b/docs/test_cases/t20007_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,57 +9,57 @@ - - - - + + + + - - + + tmain() - + tmain() - - + + Adder<int,int> - + Adder<int,int> - - + + Adder<int,float,double> - + Adder<int,float,double> - - + + Adder<std::string,std::string,std::string> - + Adder<std::string,std::string,std::string> - - - - - + + + + + add(int &&,int &&) - + add(int &&,float &&,double &&) - + add(std::string &&,std::string &&,std::string &&) diff --git a/docs/test_cases/t20008.md b/docs/test_cases/t20008.md index b10635fb..f71ee49c 100644 --- a/docs/test_cases/t20008.md +++ b/docs/test_cases/t20008.md @@ -70,7 +70,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20008_sequence.svg b/docs/test_cases/t20008_sequence.svg index 0d078d32..1b88b111 100644 --- a/docs/test_cases/t20008_sequence.svg +++ b/docs/test_cases/t20008_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,13 +9,13 @@ - - - - - - - + + + + + + + @@ -23,81 +23,81 @@ - - + + tmain() - + tmain() - - + + B<int> - + B<int> - - + + A<int> - + A<int> - - + + B<const char *> - + B<const char *> - - + + A<const char *> - + A<const char *> - - + + B<std::string> - + B<std::string> - - + + A<std::string> - + A<std::string> - - - - - - - - + + + + + + + + b(int) - + a1(int) - + b(const char *) - + a2(const char *) - + b(std::string) - + a3(std::string) diff --git a/docs/test_cases/t20009.md b/docs/test_cases/t20009.md index 2e9cfb1d..b47cb957 100644 --- a/docs/test_cases/t20009.md +++ b/docs/test_cases/t20009.md @@ -56,7 +56,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20009_sequence.svg b/docs/test_cases/t20009_sequence.svg index 688dd11b..bef740c8 100644 --- a/docs/test_cases/t20009_sequence.svg +++ b/docs/test_cases/t20009_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,13 +9,13 @@ - - - - - - - + + + + + + + @@ -23,81 +23,81 @@ - - + + tmain() - + tmain() - - + + B<std::string> - + B<std::string> - - + + A<std::string> - + A<std::string> - - + + B<int> - + B<int> - - + + A<int> - + A<int> - - + + B<float> - + B<float> - - + + A<float> - + A<float> - - - - - - - - + + + + + + + + b(std::string) - + a(std::string) - + b(int) - + a(int) - + b(float) - + a(float) diff --git a/docs/test_cases/t20010.md b/docs/test_cases/t20010.md index cdd7464b..805be746 100644 --- a/docs/test_cases/t20010.md +++ b/docs/test_cases/t20010.md @@ -66,7 +66,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20010_sequence.svg b/docs/test_cases/t20010_sequence.svg index 0cfd7503..542bccd2 100644 --- a/docs/test_cases/t20010_sequence.svg +++ b/docs/test_cases/t20010_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,81 +9,81 @@ - - - - - - - - - + + + + + + + + + - - + + tmain() - + tmain() - - + + B<int> - + B<int> - - + + A - + A - - - - - - - - - - + + + + + + + + + + b1() - + a1() - + b2() - + a2() - + b3() - + a3() - + b4() - + a4() diff --git a/docs/test_cases/t20011.md b/docs/test_cases/t20011.md index 522583ff..e48a299e 100644 --- a/docs/test_cases/t20011.md +++ b/docs/test_cases/t20011.md @@ -58,7 +58,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20011_sequence.svg b/docs/test_cases/t20011_sequence.svg index 0db5b226..e7f1b742 100644 --- a/docs/test_cases/t20011_sequence.svg +++ b/docs/test_cases/t20011_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,42 +9,42 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - + + tmain() - + tmain() - - + + A - + A - - - - - - - - - - + + + + + + + + + + a(int) @@ -52,26 +52,26 @@ alt - + a(int) - + b(int) - + c(int) - + @@ -81,14 +81,14 @@ alt - + b(int) - + @@ -98,7 +98,7 @@ alt - + diff --git a/docs/test_cases/t20012.md b/docs/test_cases/t20012.md index 33e0ef98..4278ac69 100644 --- a/docs/test_cases/t20012.md +++ b/docs/test_cases/t20012.md @@ -133,7 +133,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, @@ -226,17 +226,6 @@ void tmain() "translation_unit": "../../tests/t20012/t20012.cc" }, "type": "class" - }, - { - "id": "1627226326147373737", - "name": "clanguml::t20012::D", - "source_location": { - "column": 8, - "file": "../../tests/t20012/t20012.cc", - "line": 36, - "translation_unit": "../../tests/t20012/t20012.cc" - }, - "type": "class" } ], "sequences": [ @@ -508,6 +497,29 @@ void tmain() }, "type": "message" }, + { + "from": { + "activity_id": "893699278278125827", + "activity_name": "clanguml::t20012::tmain()", + "participant_id": "893699278278125827", + "participant_name": "clanguml::t20012::tmain()" + }, + "name": "R((lambda at /home/bartek/devel/clang-uml/tests/t20012/t20012.cc:86:9) &&)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 7, + "file": "../../tests/t20012/t20012.cc", + "line": 86, + "translation_unit": "../../tests/t20012/t20012.cc" + }, + "to": { + "activity_id": "1163275626544717212", + "activity_name": "clanguml::t20012::R::R((lambda at /home/bartek/devel/clang-uml/tests/t20012/t20012.cc:86:9) &&)", + "participant_id": "1848989986288721876" + }, + "type": "message" + }, { "from": { "activity_id": "893699278278125827", @@ -574,29 +586,6 @@ void tmain() "participant_id": "2071958121786360262" }, "type": "message" - }, - { - "from": { - "activity_id": "893699278278125827", - "activity_name": "clanguml::t20012::tmain()", - "participant_id": "893699278278125827", - "participant_name": "clanguml::t20012::tmain()" - }, - "name": "add5(int)", - "return_type": "", - "scope": "normal", - "source_location": { - "column": 31, - "file": "../../tests/t20012/t20012.cc", - "line": 94, - "translation_unit": "../../tests/t20012/t20012.cc" - }, - "to": { - "activity_id": "1355013132527568474", - "activity_name": "clanguml::t20012::D::add5(int)", - "participant_id": "1627226326147373737" - }, - "type": "message" } ], "start_from": { diff --git a/docs/test_cases/t20012_sequence.svg b/docs/test_cases/t20012_sequence.svg index e5d35598..e1ace729 100644 --- a/docs/test_cases/t20012_sequence.svg +++ b/docs/test_cases/t20012_sequence.svg @@ -1,6 +1,6 @@ - + - + @@ -9,156 +9,149 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tmain() - - tmain() + + tmain() - - + + tmain()::(lambda ../../tests/t20012/t20012.cc:67:20) - - tmain()::(lambda ../../tests/t20012/t20012.cc:67:20) + + tmain()::(lambda ../../tests/t20012/t20012.cc:67:20) - - + + A - - A + + A - - + + B - - B + + B - - + + tmain()::(lambda ../../tests/t20012/t20012.cc:80:20) - - tmain()::(lambda ../../tests/t20012/t20012.cc:80:20) + + tmain()::(lambda ../../tests/t20012/t20012.cc:80:20) - - + + C - - C + + C - - + + R<R::(lambda ../../tests/t20012/t20012.cc:86:9)> - - R<R::(lambda ../../tests/t20012/t20012.cc:86:9)> + + R<R::(lambda ../../tests/t20012/t20012.cc:86:9)> - - + + tmain()::(lambda ../../tests/t20012/t20012.cc:86:9) - - tmain()::(lambda ../../tests/t20012/t20012.cc:86:9) + + tmain()::(lambda ../../tests/t20012/t20012.cc:86:9) - - - D - - D - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + operator()() - + a() - + aa() - + aaa() - + b() - + bb() - + @@ -167,67 +160,67 @@ - + operator()() - + c() - + cc() - + ccc() - + operator()() - + a() - + aa() - + aaa() - + b() - + bb() - + @@ -238,43 +231,41 @@ - + - r() + R((lambda at /home/bartek/devel/clang-uml/tests/t20012/t20012.cc:86:9) &&) - - - - operator()() + + + + r() - - - - c() + + + + operator()() - - - - - - cc() + + + + c() - - - - - - ccc() + + + + + + cc() - - - - - - add5(int) + + + + + + ccc() - - + + diff --git a/docs/test_cases/t20013.md b/docs/test_cases/t20013.md index 16f2e28a..6d1e2fda 100644 --- a/docs/test_cases/t20013.md +++ b/docs/test_cases/t20013.md @@ -54,7 +54,7 @@ void tmain(int argc, char **argv) { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20013_sequence.svg b/docs/test_cases/t20013_sequence.svg index 69d5fe7a..04950fb2 100644 --- a/docs/test_cases/t20013_sequence.svg +++ b/docs/test_cases/t20013_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,47 +9,47 @@ - - - - - - - + + + + + + + - - + + tmain(int,char **) - + tmain(int,char **) - - + + B - + B - - + + A - + A - - - - - - - - + + + + + + + + b(int) - + a1(int) @@ -58,12 +58,12 @@ - + b(double) - + a2(double) @@ -72,12 +72,12 @@ - + b(const char *) - + a3(const char *) diff --git a/docs/test_cases/t20014.md b/docs/test_cases/t20014.md index 67ac20ea..b6d69741 100644 --- a/docs/test_cases/t20014.md +++ b/docs/test_cases/t20014.md @@ -89,7 +89,7 @@ namespace t20014 { { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20014_sequence.svg b/docs/test_cases/t20014_sequence.svg index 9780b13a..eb9c466c 100644 --- a/docs/test_cases/t20014_sequence.svg +++ b/docs/test_cases/t20014_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,56 +9,56 @@ - - - - - - - - + + + + + + + + - - + + tmain() - + tmain() - - + + B - + B - - + + A - + A - - + + C<B,int> - + C<B,int> - - - - - - - - - + + + + + + + + + b1(int,int) - + a1(int,int) @@ -67,12 +67,12 @@ - + b2(int,int) - + a2(int,int) @@ -81,17 +81,17 @@ - + c1(int,int) - + b1(int,int) - + a1(int,int) diff --git a/docs/test_cases/t20015.md b/docs/test_cases/t20015.md index 203461c9..1aca5c01 100644 --- a/docs/test_cases/t20015.md +++ b/docs/test_cases/t20015.md @@ -70,7 +70,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20015_sequence.svg b/docs/test_cases/t20015_sequence.svg index d2737773..7534b591 100644 --- a/docs/test_cases/t20015_sequence.svg +++ b/docs/test_cases/t20015_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,25 +9,25 @@ - - + + - - + + tmain() - + tmain() - - + + B - + B - - - + + + setup_a(std::shared_ptr<detail::A> &) diff --git a/docs/test_cases/t20016.md b/docs/test_cases/t20016.md index f645a239..aa12011e 100644 --- a/docs/test_cases/t20016.md +++ b/docs/test_cases/t20016.md @@ -52,7 +52,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20016_sequence.svg b/docs/test_cases/t20016_sequence.svg index 08d7d8de..7a3f179f 100644 --- a/docs/test_cases/t20016_sequence.svg +++ b/docs/test_cases/t20016_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,53 +9,53 @@ - - - - - + + + + + - - + + tmain() - + tmain() - - + + B<long> - + B<long> - - + + A - + A - - - - - - + + + + + + b1(long) - + a1(int) - + b2(long) - + a2(const long &) diff --git a/docs/test_cases/t20017.md b/docs/test_cases/t20017.md index 134504dd..57a350cf 100644 --- a/docs/test_cases/t20017.md +++ b/docs/test_cases/t20017.md @@ -49,7 +49,7 @@ int tmain() { return b2(a1(a2(a3(1, 2), b1(3, 4)), 5), 6); } { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20017_sequence.svg b/docs/test_cases/t20017_sequence.svg index 2f89640c..713cfa1d 100644 --- a/docs/test_cases/t20017_sequence.svg +++ b/docs/test_cases/t20017_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,65 +9,65 @@ - - - - - - + + + + + + - + t20017.cc - + t20017.cc - + include/t20017_a.h - + include/t20017_a.h - + include/t20017_b.h - + include/t20017_b.h - - - - - - + + + + + + tmain() - + a3(int,int) - + b1(int,int) - + a2(int,int) - + a1(int,int) - + b2<int>(int,int) diff --git a/docs/test_cases/t20018.md b/docs/test_cases/t20018.md index bd925367..6534e7cc 100644 --- a/docs/test_cases/t20018.md +++ b/docs/test_cases/t20018.md @@ -54,7 +54,7 @@ void tmain() { Answer>::print(); } { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20018_sequence.svg b/docs/test_cases/t20018_sequence.svg index 748df054..c2c55249 100644 --- a/docs/test_cases/t20018_sequence.svg +++ b/docs/test_cases/t20018_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,14 +9,14 @@ - - - - - - - - + + + + + + + + @@ -25,93 +25,93 @@ - - + + tmain() - + tmain() - - + + Answer<Factorial<5>,120> - + Answer<Factorial<5>,120> - - + + Factorial<5> - + Factorial<5> - - + + Factorial<4> - + Factorial<4> - - + + Factorial<3> - + Factorial<3> - - + + Factorial<2> - + Factorial<2> - - + + Factorial<1> - + Factorial<1> - - + + Factorial<0> - + Factorial<0> - - - - - - - - - + + + + + + + + + print() - + print(int) - + print(int) - + print(int) - + print(int) - + print(int) - + print(int) diff --git a/docs/test_cases/t20019.md b/docs/test_cases/t20019.md index a221aab1..5961aade 100644 --- a/docs/test_cases/t20019.md +++ b/docs/test_cases/t20019.md @@ -61,7 +61,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20019_sequence.svg b/docs/test_cases/t20019_sequence.svg index 04114d54..8d7cc179 100644 --- a/docs/test_cases/t20019_sequence.svg +++ b/docs/test_cases/t20019_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,95 +9,95 @@ - - - - - - - - - + + + + + + + + + - - + + tmain() - + tmain() - - + + Base<D1> - + Base<D1> - - + + D1 - + D1 - - + + Base<D2> - + Base<D2> - - + + D2 - + D2 - - - - - - - - - - + + + + + + + + + + name() - + impl() - + name() - + impl() - + name() - + impl() - + name() - + impl() diff --git a/docs/test_cases/t20020.md b/docs/test_cases/t20020.md index c516d5cb..eb6f652b 100644 --- a/docs/test_cases/t20020.md +++ b/docs/test_cases/t20020.md @@ -113,7 +113,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, @@ -408,7 +408,7 @@ int tmain() "participant_id": "432124388562400664", "participant_name": "clanguml::t20020::tmain()" }, - "name": "c1()", + "name": "c1() const", "return_type": "void", "scope": "normal", "source_location": { @@ -418,24 +418,24 @@ int tmain() "translation_unit": "../../tests/t20020/t20020.cc" }, "to": { - "activity_id": "1962953889020699702", - "activity_name": "clanguml::t20020::C::c1()", + "activity_id": "1473521613404783653", + "activity_name": "clanguml::t20020::C::c1() const", "participant_id": "1562462306909405383" }, "type": "message" }, { - "activity_id": "1962953889020699702", + "activity_id": "1473521613404783653", "branches": [ { "messages": [ { "from": { - "activity_id": "1962953889020699702", - "activity_name": "clanguml::t20020::C::c1()", + "activity_id": "1473521613404783653", + "activity_name": "clanguml::t20020::C::c1() const", "participant_id": "1562462306909405383" }, - "name": "c2()", + "name": "c2() const", "return_type": "_Bool", "scope": "condition", "source_location": { @@ -445,19 +445,19 @@ int tmain() "translation_unit": "../../tests/t20020/t20020.cc" }, "to": { - "activity_id": "1224151733617799047", - "activity_name": "clanguml::t20020::C::c2()", + "activity_id": "1789116382725485914", + "activity_name": "clanguml::t20020::C::c2() const", "participant_id": "1562462306909405383" }, "type": "message" }, { "from": { - "activity_id": "1962953889020699702", - "activity_name": "clanguml::t20020::C::c1()", + "activity_id": "1473521613404783653", + "activity_name": "clanguml::t20020::C::c1() const", "participant_id": "1562462306909405383" }, - "name": "log()", + "name": "log() const", "return_type": "void", "scope": "normal", "source_location": { @@ -467,8 +467,8 @@ int tmain() "translation_unit": "../../tests/t20020/t20020.cc" }, "to": { - "activity_id": "1108114094862697094", - "activity_name": "clanguml::t20020::C::log()", + "activity_id": "635780525021572670", + "activity_name": "clanguml::t20020::C::log() const", "participant_id": "1562462306909405383" }, "type": "message" diff --git a/docs/test_cases/t20020_sequence.svg b/docs/test_cases/t20020_sequence.svg index 40189e26..5df9905f 100644 --- a/docs/test_cases/t20020_sequence.svg +++ b/docs/test_cases/t20020_sequence.svg @@ -1,6 +1,6 @@ - + - + @@ -9,89 +9,89 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - + + + + tmain() - + tmain() - - + + A - + A - - + + C - + C - - - B - - B + + + B + + B - - - D<int> - - D<int> + + + D<int> + + D<int> - - - - - - - - - - - - - + + + + + + + + + + + + + - + alt - + a1() - + - + alt - + [ @@ -100,7 +100,7 @@ - + [ @@ -109,15 +109,15 @@ - - - + + + b1() - - - + + + [ @@ -126,65 +126,65 @@ - - - + + + b2() - - + + a4() - - - + + + log() - + alt - + - c1() + c1() const - + alt - + [ - c2() - ] + c2() const + ] - + - log() + log() const - + alt - - - + + + d1(int,int) - + diff --git a/docs/test_cases/t20021.md b/docs/test_cases/t20021.md index a6dfa83c..f74807ad 100644 --- a/docs/test_cases/t20021.md +++ b/docs/test_cases/t20021.md @@ -84,7 +84,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, @@ -352,7 +352,7 @@ int tmain() "participant_id": "1682631020380557915", "participant_name": "clanguml::t20021::tmain()" }, - "name": "b2()", + "name": "b2() const", "return_type": "int", "scope": "normal", "source_location": { @@ -362,8 +362,8 @@ int tmain() "translation_unit": "../../tests/t20021/t20021.cc" }, "to": { - "activity_id": "1387752719733375782", - "activity_name": "clanguml::t20021::B::b2()", + "activity_id": "1561040999276563077", + "activity_name": "clanguml::t20021::B::b2() const", "participant_id": "1849696080443395393" }, "type": "message" @@ -409,7 +409,7 @@ int tmain() "participant_id": "1682631020380557915", "participant_name": "clanguml::t20021::tmain()" }, - "name": "b2()", + "name": "b2() const", "return_type": "int", "scope": "normal", "source_location": { @@ -419,8 +419,8 @@ int tmain() "translation_unit": "../../tests/t20021/t20021.cc" }, "to": { - "activity_id": "1387752719733375782", - "activity_name": "clanguml::t20021::B::b2()", + "activity_id": "1561040999276563077", + "activity_name": "clanguml::t20021::B::b2() const", "participant_id": "1849696080443395393" }, "type": "message" diff --git a/docs/test_cases/t20021_sequence.svg b/docs/test_cases/t20021_sequence.svg index 2b5ba40f..e940d862 100644 --- a/docs/test_cases/t20021_sequence.svg +++ b/docs/test_cases/t20021_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,74 +9,74 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + tmain() - + tmain() - - + + C - + C - - + + A - + A - - + + B - + B - - - - - - - - - - - - + + + + + + + + + + + + loop - + [ c4() ] - + @@ -89,7 +89,7 @@ - + a3() @@ -102,7 +102,7 @@ loop - + [ @@ -111,7 +111,7 @@ - + [ @@ -120,7 +120,7 @@ - + [ @@ -129,14 +129,14 @@ - + a1() - + [ @@ -148,17 +148,17 @@ loop - + - b2() + b2() const loop - + [ @@ -167,10 +167,10 @@ - + - b2() + b2() const diff --git a/docs/test_cases/t20022.md b/docs/test_cases/t20022.md index 780f3328..08ef1fda 100644 --- a/docs/test_cases/t20022.md +++ b/docs/test_cases/t20022.md @@ -64,7 +64,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, @@ -107,6 +107,29 @@ int tmain() "sequences": [ { "messages": [ + { + "from": { + "activity_id": "1374011101998494743", + "activity_name": "clanguml::t20022::tmain()", + "participant_id": "1374011101998494743", + "participant_name": "clanguml::t20022::tmain()" + }, + "name": "A(std::unique_ptr)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 7, + "file": "../../tests/t20022/t20022.cc", + "line": 30, + "translation_unit": "../../tests/t20022/t20022.cc" + }, + "to": { + "activity_id": "1226569306557207632", + "activity_name": "clanguml::t20022::A::A(std::unique_ptr)", + "participant_id": "1535467498096081224" + }, + "type": "message" + }, { "from": { "activity_id": "1374011101998494743", diff --git a/docs/test_cases/t20022_sequence.svg b/docs/test_cases/t20022_sequence.svg index ff225930..cd67d4b3 100644 --- a/docs/test_cases/t20022_sequence.svg +++ b/docs/test_cases/t20022_sequence.svg @@ -1,6 +1,6 @@ - + - + @@ -9,42 +9,50 @@ - - - - - - - - + + + + + + + + + tmain() - - tmain() + + tmain() - - - A - - A + + + A + + A - - - B - - B + + + B + + B - - - - - - - a() + + + + + + + + A(std::unique_ptr + ) - - - - b() + + + + a() + + + + + b() diff --git a/docs/test_cases/t20023.md b/docs/test_cases/t20023.md index fcb77777..5e9c8611 100644 --- a/docs/test_cases/t20023.md +++ b/docs/test_cases/t20023.md @@ -67,7 +67,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20023_sequence.svg b/docs/test_cases/t20023_sequence.svg index 20b3b180..437c1d90 100644 --- a/docs/test_cases/t20023_sequence.svg +++ b/docs/test_cases/t20023_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,37 +9,37 @@ - - - - - - - + + + + + + + - - + + tmain() - + tmain() - - + + A - + A - - - - - - - + + + + + + + a() @@ -47,7 +47,7 @@ try - + @@ -60,7 +60,7 @@ [std::runtime_error &] - + @@ -73,7 +73,7 @@ [std::logic_error &] - + @@ -86,7 +86,7 @@ [...] - + diff --git a/docs/test_cases/t20024.md b/docs/test_cases/t20024.md index a7784d71..7df9e52d 100644 --- a/docs/test_cases/t20024.md +++ b/docs/test_cases/t20024.md @@ -92,7 +92,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20024_sequence.svg b/docs/test_cases/t20024_sequence.svg index 2c2d82ff..901ca378 100644 --- a/docs/test_cases/t20024_sequence.svg +++ b/docs/test_cases/t20024_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,23 +9,23 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + @@ -33,36 +33,36 @@ - - + + tmain() - + tmain() - - + + A - + A - - + + B - + B - - - - - - - - - - - - + + + + + + + + + + + + select(enum_a) @@ -72,7 +72,7 @@ switch [zero] - + @@ -85,7 +85,7 @@ [one] - + @@ -98,7 +98,7 @@ [two] - + @@ -111,7 +111,7 @@ [default] - + @@ -124,7 +124,7 @@ - + select(colors) @@ -134,7 +134,7 @@ switch [enum colors::red] - + @@ -143,7 +143,7 @@ [enum colors::orange] - + @@ -152,7 +152,7 @@ [enum colors::green] - + @@ -161,7 +161,7 @@ [default] - + diff --git a/docs/test_cases/t20025.md b/docs/test_cases/t20025.md index 70028d60..46e4b1d2 100644 --- a/docs/test_cases/t20025.md +++ b/docs/test_cases/t20025.md @@ -72,7 +72,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20025_sequence.svg b/docs/test_cases/t20025_sequence.svg index 65346c0f..1a65ec0e 100644 --- a/docs/test_cases/t20025_sequence.svg +++ b/docs/test_cases/t20025_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,41 +9,41 @@ - - - - + + + + - - + + tmain() - + tmain() - - + + A - + A - - + + add(int,int) - + add(int,int) - - - - - + + + + + a() - + @@ -52,7 +52,7 @@ - + diff --git a/docs/test_cases/t20026.md b/docs/test_cases/t20026.md index 852e591b..42ede3c2 100644 --- a/docs/test_cases/t20026.md +++ b/docs/test_cases/t20026.md @@ -52,7 +52,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20026_sequence.svg b/docs/test_cases/t20026_sequence.svg index ee2f1ef3..8dee0a01 100644 --- a/docs/test_cases/t20026_sequence.svg +++ b/docs/test_cases/t20026_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,25 +9,25 @@ - - + + - - + + tmain() - + tmain() - - + + A - + A - - - + + + a() diff --git a/docs/test_cases/t20027.md b/docs/test_cases/t20027.md index 398370ca..0c21d3e8 100644 --- a/docs/test_cases/t20027.md +++ b/docs/test_cases/t20027.md @@ -51,7 +51,7 @@ void tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20027_sequence.svg b/docs/test_cases/t20027_sequence.svg index b92cfce6..ce79fe19 100644 --- a/docs/test_cases/t20027_sequence.svg +++ b/docs/test_cases/t20027_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,25 +9,25 @@ - - + + - - + + tmain() - + tmain() - - + + A - + A - - - + + + a() diff --git a/docs/test_cases/t20028.md b/docs/test_cases/t20028.md index ac0cc4b7..56af312c 100644 --- a/docs/test_cases/t20028.md +++ b/docs/test_cases/t20028.md @@ -61,7 +61,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20028_sequence.svg b/docs/test_cases/t20028_sequence.svg index 31809b0d..4a4b6d54 100644 --- a/docs/test_cases/t20028_sequence.svg +++ b/docs/test_cases/t20028_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,50 +9,50 @@ - - - - - - + + + + + + - - + + tmain() - + tmain() - - + + A - + A - - - - - + + + + + alt - + a() - + b() - + c() @@ -60,7 +60,7 @@ - + d() diff --git a/docs/test_cases/t20029.md b/docs/test_cases/t20029.md index e122a4b9..5cbbb4dd 100644 --- a/docs/test_cases/t20029.md +++ b/docs/test_cases/t20029.md @@ -105,7 +105,7 @@ int tmain() { "diagram_type": "sequence", "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t20029_sequence.svg b/docs/test_cases/t20029_sequence.svg index d5df5821..d05b8aaf 100644 --- a/docs/test_cases/t20029_sequence.svg +++ b/docs/test_cases/t20029_sequence.svg @@ -1,6 +1,6 @@ - + @@ -9,60 +9,60 @@ - - - - - - - - - - - + + + + + + + + + + + - - + + tmain() - + tmain() - - + + Encoder<Retrier<ConnectionPool>> - + Encoder<Retrier<ConnectionPool>> - - + + Retrier<ConnectionPool> - + Retrier<ConnectionPool> - - + + ConnectionPool - + ConnectionPool - - + + encode_b64(std::string &&) - + encode_b64(std::string &&) - - - - - - - - + + + + + + + + connect() @@ -73,21 +73,21 @@ alt - + [ send(std::string &&) ] - + encode(std::string &&) - + @@ -97,7 +97,7 @@ - + send(std::string &&) @@ -108,7 +108,7 @@ alt - + [ diff --git a/docs/test_cases/t20030.md b/docs/test_cases/t20030.md new file mode 100644 index 00000000..67217be1 --- /dev/null +++ b/docs/test_cases/t20030.md @@ -0,0 +1,425 @@ +# t20030 - Constructor and operator call test case +## Config +```yaml +compilation_database_dir: .. +output_directory: puml +diagrams: + t20030_sequence: + type: sequence + glob: + - ../../tests/t20030/t20030.cc + include: + namespaces: + - clanguml::t20030 + using_namespace: + - clanguml::t20030 + start_from: + - function: "clanguml::t20030::tmain(int)" + - function: "clanguml::t20030::tmain(bool,int)" +``` +## Source code +File t20030.cc +```cpp +namespace clanguml { +namespace t20030 { + +int magic() { return 42; } + +class A { +public: + A() { create(); } + + A(int v) { a_ = v; } + + A &operator=(const A &a) + { + set(a.a_); + return *this; + } + + A &operator+=(int a) + { + add(a); + return *this; + } + + int value() const { return a_; } + +private: + void create() { a_ = 0; } + + void add(int a) { a_ += a; } + void set(int a) { a_ = a; } + + int a_; +}; + +void tmain(int a) +{ + A an_a{magic()}; + an_a += 1; +} + +int tmain(bool f, int a) +{ + auto an_a = A(); + auto an_b = A(); + an_a += 2; + an_b = an_a; + return an_b.value(); +}; + +} +} +``` +## Generated UML diagrams +![t20030_sequence](./t20030_sequence.svg "Constructor and operator call test case") +## Generated JSON models +```json +{ + "diagram_type": "sequence", + "metadata": { + "clang_uml_version": "0.3.7-44-ged88fcd", + "llvm_version": "Ubuntu clang version 15.0.6", + "schema_version": 1 + }, + "name": "t20030_sequence", + "participants": [ + { + "id": "1264643561983920529", + "name": "clanguml::t20030::tmain(int)", + "source_location": { + "column": 6, + "file": "../../tests/t20030/t20030.cc", + "line": 35, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "type": "function" + }, + { + "id": "1038740565367213967", + "name": "clanguml::t20030::magic()", + "source_location": { + "column": 5, + "file": "../../tests/t20030/t20030.cc", + "line": 4, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "type": "function" + }, + { + "id": "1081707114848460702", + "name": "clanguml::t20030::A", + "source_location": { + "column": 7, + "file": "../../tests/t20030/t20030.cc", + "line": 6, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "type": "class" + }, + { + "id": "36090614888670483", + "name": "clanguml::t20030::tmain(bool,int)", + "source_location": { + "column": 5, + "file": "../../tests/t20030/t20030.cc", + "line": 41, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "type": "function" + } + ], + "sequences": [ + { + "messages": [ + { + "from": { + "activity_id": "1264643561983920529", + "activity_name": "clanguml::t20030::tmain(int)", + "participant_id": "1264643561983920529", + "participant_name": "clanguml::t20030::tmain(int)" + }, + "name": "", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 12, + "file": "../../tests/t20030/t20030.cc", + "line": 37, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "1038740565367213967", + "activity_name": "clanguml::t20030::magic()", + "participant_id": "1038740565367213967" + }, + "type": "message" + }, + { + "from": { + "activity_id": "1264643561983920529", + "activity_name": "clanguml::t20030::tmain(int)", + "participant_id": "1264643561983920529", + "participant_name": "clanguml::t20030::tmain(int)" + }, + "name": "A(int)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 7, + "file": "../../tests/t20030/t20030.cc", + "line": 37, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "2192298168642377389", + "activity_name": "clanguml::t20030::A::A(int)", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "1264643561983920529", + "activity_name": "clanguml::t20030::tmain(int)", + "participant_id": "1264643561983920529", + "participant_name": "clanguml::t20030::tmain(int)" + }, + "name": "operator+=(int)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 5, + "file": "../../tests/t20030/t20030.cc", + "line": 38, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "2032167997122548080", + "activity_name": "clanguml::t20030::A::operator+=(int)", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "2032167997122548080", + "activity_name": "clanguml::t20030::A::operator+=(int)", + "participant_id": "1081707114848460702" + }, + "name": "add(int)", + "return_type": "void", + "scope": "normal", + "source_location": { + "column": 9, + "file": "../../tests/t20030/t20030.cc", + "line": 20, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "2174827432067616124", + "activity_name": "clanguml::t20030::A::add(int)", + "participant_id": "1081707114848460702" + }, + "type": "message" + } + ], + "start_from": { + "id": 1264643561983920529, + "location": "clanguml::t20030::tmain(int)" + } + }, + { + "messages": [ + { + "from": { + "activity_id": "36090614888670483", + "activity_name": "clanguml::t20030::tmain(bool,int)", + "participant_id": "36090614888670483", + "participant_name": "clanguml::t20030::tmain(bool,int)" + }, + "name": "A()", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 17, + "file": "../../tests/t20030/t20030.cc", + "line": 43, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "32184916294885915", + "activity_name": "clanguml::t20030::A::A()", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "32184916294885915", + "activity_name": "clanguml::t20030::A::A()", + "participant_id": "1081707114848460702" + }, + "name": "create()", + "return_type": "void", + "scope": "normal", + "source_location": { + "column": 11, + "file": "../../tests/t20030/t20030.cc", + "line": 8, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "890578100069139188", + "activity_name": "clanguml::t20030::A::create()", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "36090614888670483", + "activity_name": "clanguml::t20030::tmain(bool,int)", + "participant_id": "36090614888670483", + "participant_name": "clanguml::t20030::tmain(bool,int)" + }, + "name": "A()", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 17, + "file": "../../tests/t20030/t20030.cc", + "line": 44, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "32184916294885915", + "activity_name": "clanguml::t20030::A::A()", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "36090614888670483", + "activity_name": "clanguml::t20030::tmain(bool,int)", + "participant_id": "36090614888670483", + "participant_name": "clanguml::t20030::tmain(bool,int)" + }, + "name": "operator+=(int)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 5, + "file": "../../tests/t20030/t20030.cc", + "line": 45, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "2032167997122548080", + "activity_name": "clanguml::t20030::A::operator+=(int)", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "2032167997122548080", + "activity_name": "clanguml::t20030::A::operator+=(int)", + "participant_id": "1081707114848460702" + }, + "name": "add(int)", + "return_type": "void", + "scope": "normal", + "source_location": { + "column": 9, + "file": "../../tests/t20030/t20030.cc", + "line": 20, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "2174827432067616124", + "activity_name": "clanguml::t20030::A::add(int)", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "36090614888670483", + "activity_name": "clanguml::t20030::tmain(bool,int)", + "participant_id": "36090614888670483", + "participant_name": "clanguml::t20030::tmain(bool,int)" + }, + "name": "operator=(const A &)", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 5, + "file": "../../tests/t20030/t20030.cc", + "line": 46, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "1796303685088700396", + "activity_name": "clanguml::t20030::A::operator=(const A &)", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "1796303685088700396", + "activity_name": "clanguml::t20030::A::operator=(const A &)", + "participant_id": "1081707114848460702" + }, + "name": "set(int)", + "return_type": "void", + "scope": "normal", + "source_location": { + "column": 9, + "file": "../../tests/t20030/t20030.cc", + "line": 14, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "2212978510776223413", + "activity_name": "clanguml::t20030::A::set(int)", + "participant_id": "1081707114848460702" + }, + "type": "message" + }, + { + "from": { + "activity_id": "36090614888670483", + "activity_name": "clanguml::t20030::tmain(bool,int)", + "participant_id": "36090614888670483", + "participant_name": "clanguml::t20030::tmain(bool,int)" + }, + "name": "value() const", + "return_type": "int", + "scope": "normal", + "source_location": { + "column": 12, + "file": "../../tests/t20030/t20030.cc", + "line": 47, + "translation_unit": "../../tests/t20030/t20030.cc" + }, + "to": { + "activity_id": "1754957340376276968", + "activity_name": "clanguml::t20030::A::value() const", + "participant_id": "1081707114848460702" + }, + "type": "message" + } + ], + "start_from": { + "id": 36090614888670483, + "location": "clanguml::t20030::tmain(bool,int)" + } + } + ], + "using_namespace": "clanguml::t20030" +} +``` diff --git a/docs/test_cases/t20030_sequence.svg b/docs/test_cases/t20030_sequence.svg new file mode 100644 index 00000000..afd9b90c --- /dev/null +++ b/docs/test_cases/t20030_sequence.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tmain(int) + + tmain(int) + + + + magic() + + magic() + + + + A + + A + + + + tmain(bool,int) + + tmain(bool,int) + + + + + + + + + + + + + + + + + + + + + + + + + + A(int) + + + + + operator+=(int) + + + + + + + add(int) + + + + + + + A() + + + + + + + create() + + + + + A() + + + + + + + create() + + + + + operator+=(int) + + + + + + + add(int) + + + + + + + operator=(const A &) + + + + + + + set(int) + + + + + + + value() const + + + + + diff --git a/docs/test_cases/t20031.md b/docs/test_cases/t20031.md new file mode 100644 index 00000000..c1d03c94 --- /dev/null +++ b/docs/test_cases/t20031.md @@ -0,0 +1,249 @@ +# t20031 - Callee type sequence diagram filter test case +## Config +```yaml +compilation_database_dir: .. +output_directory: puml +diagrams: + t20031_sequence: + type: sequence + glob: + - ../../tests/t20031/t20031.cc + include: + namespaces: + - clanguml::t20031 + exclude: + callee_types: + - constructor + - operator + - lambda + using_namespace: + - clanguml::t20031 + start_from: + - function: "clanguml::t20031::tmain(int)" + - function: "clanguml::t20031::tmain(bool,int)" +``` +## Source code +File t20031.cc +```cpp +#include + +namespace clanguml { +namespace t20031 { +int magic() { return 42; } +int zero() { return 0; } +int one() { return 1; } +int execute(std::function f) { return f(); } + +class A { +public: + A() { create(); } + + A(int v) { a_ = v; } + + A &operator=(const A &a) + { + set(a.a_); + return *this; + } + + A &operator+=(int a) + { + add(a); + return *this; + } + + int value() const { return a_; } + +private: + void create() { a_ = 0; } + + void add(int a) { a_ += a; } + void set(int a) { a_ = a; } + + int a_; +}; + +void tmain(int a) +{ + A an_a{magic()}; + an_a += 1; +} + +int tmain(bool f, int a) +{ + auto generate_zero = []() { return zero(); }; + auto an_a = A(); + auto an_b = A(); + + an_a += generate_zero(); + + // @todo #168 + an_a += execute([]() { return one(); }); + + an_b = an_a; + + return an_b.value(); +}; + +} +} +``` +## Generated UML diagrams +![t20031_sequence](./t20031_sequence.svg "Callee type sequence diagram filter test case") +## Generated JSON models +```json +{ + "diagram_type": "sequence", + "metadata": { + "clang_uml_version": "0.3.7-44-ged88fcd", + "llvm_version": "Ubuntu clang version 15.0.6", + "schema_version": 1 + }, + "name": "t20031_sequence", + "participants": [ + { + "id": "1045973591033429178", + "name": "clanguml::t20031::tmain(int)", + "source_location": { + "column": 6, + "file": "../../tests/t20031/t20031.cc", + "line": 39, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "type": "function" + }, + { + "id": "2265790048300959619", + "name": "clanguml::t20031::magic()", + "source_location": { + "column": 5, + "file": "../../tests/t20031/t20031.cc", + "line": 5, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "type": "function" + }, + { + "id": "2189754495514350927", + "name": "clanguml::t20031::tmain(bool,int)", + "source_location": { + "column": 5, + "file": "../../tests/t20031/t20031.cc", + "line": 45, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "type": "function" + }, + { + "id": "2230160420908832598", + "name": "clanguml::t20031::execute(std::function)", + "source_location": { + "column": 5, + "file": "../../tests/t20031/t20031.cc", + "line": 8, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "type": "function" + }, + { + "id": "1081580052625775404", + "name": "clanguml::t20031::A", + "source_location": { + "column": 7, + "file": "../../tests/t20031/t20031.cc", + "line": 10, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "type": "class" + } + ], + "sequences": [ + { + "messages": [ + { + "from": { + "activity_id": "1045973591033429178", + "activity_name": "clanguml::t20031::tmain(int)", + "participant_id": "1045973591033429178", + "participant_name": "clanguml::t20031::tmain(int)" + }, + "name": "", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 12, + "file": "../../tests/t20031/t20031.cc", + "line": 41, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "to": { + "activity_id": "2265790048300959619", + "activity_name": "clanguml::t20031::magic()", + "participant_id": "2265790048300959619" + }, + "type": "message" + } + ], + "start_from": { + "id": 1045973591033429178, + "location": "clanguml::t20031::tmain(int)" + } + }, + { + "messages": [ + { + "from": { + "activity_id": "2189754495514350927", + "activity_name": "clanguml::t20031::tmain(bool,int)", + "participant_id": "2189754495514350927", + "participant_name": "clanguml::t20031::tmain(bool,int)" + }, + "name": "", + "return_type": "", + "scope": "normal", + "source_location": { + "column": 13, + "file": "../../tests/t20031/t20031.cc", + "line": 54, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "to": { + "activity_id": "2230160420908832598", + "activity_name": "clanguml::t20031::execute(std::function)", + "participant_id": "2230160420908832598" + }, + "type": "message" + }, + { + "from": { + "activity_id": "2189754495514350927", + "activity_name": "clanguml::t20031::tmain(bool,int)", + "participant_id": "2189754495514350927", + "participant_name": "clanguml::t20031::tmain(bool,int)" + }, + "name": "value() const", + "return_type": "int", + "scope": "normal", + "source_location": { + "column": 12, + "file": "../../tests/t20031/t20031.cc", + "line": 58, + "translation_unit": "../../tests/t20031/t20031.cc" + }, + "to": { + "activity_id": "1089278431155817348", + "activity_name": "clanguml::t20031::A::value() const", + "participant_id": "1081580052625775404" + }, + "type": "message" + } + ], + "start_from": { + "id": 2189754495514350927, + "location": "clanguml::t20031::tmain(bool,int)" + } + } + ], + "using_namespace": "clanguml::t20031" +} +``` diff --git a/docs/test_cases/t20031_sequence.svg b/docs/test_cases/t20031_sequence.svg new file mode 100644 index 00000000..0ce7928b --- /dev/null +++ b/docs/test_cases/t20031_sequence.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + tmain(int) + + tmain(int) + + + + magic() + + magic() + + + + tmain(bool,int) + + tmain(bool,int) + + + + execute(std::function<int ()>) + + execute(std::function<int ()>) + + + + A + + A + + + + + + + + + + + + + + + + + + + + + + value() const + + + + + diff --git a/docs/test_cases/t30001.md b/docs/test_cases/t30001.md index 385aed27..a3322d1e 100644 --- a/docs/test_cases/t30001.md +++ b/docs/test_cases/t30001.md @@ -239,7 +239,7 @@ namespace BB { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30001_package.svg b/docs/test_cases/t30001_package.svg index 39e8083e..407356da 100644 --- a/docs/test_cases/t30001_package.svg +++ b/docs/test_cases/t30001_package.svg @@ -1,6 +1,6 @@ - + @@ -9,63 +9,63 @@ - - + + A - - + + AA - - + + B - - + + AA - - + + AAA - - + + BBB - - + + BB - - + + AAA - - + + BBB - - + + BB - + A AAA note... - + This is namespace AA in namespace A - + This is namespace AA in namespace B diff --git a/docs/test_cases/t30002.md b/docs/test_cases/t30002.md index 2f552081..f0a0d154 100644 --- a/docs/test_cases/t30002.md +++ b/docs/test_cases/t30002.md @@ -487,7 +487,7 @@ template std::map> cm() } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30002_package.svg b/docs/test_cases/t30002_package.svg index 2a36bdef..f9ba79c5 100644 --- a/docs/test_cases/t30002_package.svg +++ b/docs/test_cases/t30002_package.svg @@ -1,6 +1,6 @@ - + @@ -9,118 +9,118 @@ - - + + A - - + + AA - - + + B - - + + BB - - + + A1 - - + + A2 - - + + A3 - - + + A4 - - + + A5 - - + + A6 - - + + A7 - - + + A8 - - + + A9 - - + + A10 - - + + A11 - - + + A12 - - + + A13 - - + + A14 - - + + A15 - - + + A16 - - + + A17 - - + + A18 - - + + BBB diff --git a/docs/test_cases/t30003.md b/docs/test_cases/t30003.md index 8d5a02a6..906e3068 100644 --- a/docs/test_cases/t30003.md +++ b/docs/test_cases/t30003.md @@ -169,7 +169,7 @@ class B : public ns1::ns2::Anon { }; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30003_package.svg b/docs/test_cases/t30003_package.svg index 98ea6beb..ebb879d5 100644 --- a/docs/test_cases/t30003_package.svg +++ b/docs/test_cases/t30003_package.svg @@ -1,6 +1,6 @@ - + @@ -9,35 +9,35 @@ - - + + ns1 - - + + ns3 «deprecated» - - + + ns1 - - + + ns2_v1_0_0 - - + + ns2_v0_9_0 «deprecated» - - + + ns2 diff --git a/docs/test_cases/t30004.md b/docs/test_cases/t30004.md index afeb5830..c55b7a65 100644 --- a/docs/test_cases/t30004.md +++ b/docs/test_cases/t30004.md @@ -180,7 +180,7 @@ namespace CCC { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30004_package.svg b/docs/test_cases/t30004_package.svg index ea1eaddb..a5c27475 100644 --- a/docs/test_cases/t30004_package.svg +++ b/docs/test_cases/t30004_package.svg @@ -1,6 +1,6 @@ - + @@ -9,40 +9,40 @@ - - + + A - + Package AAA. - + Package BBB. - + CCCC package note. - + We skipped DDD. - - + + AAA - - + + BBB - - + + CCC - - + + EEE diff --git a/docs/test_cases/t30005.md b/docs/test_cases/t30005.md index fa132c49..a29bf626 100644 --- a/docs/test_cases/t30005.md +++ b/docs/test_cases/t30005.md @@ -214,7 +214,7 @@ struct C2 { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30005_package.svg b/docs/test_cases/t30005_package.svg index 0b5a2dcb..f424b803 100644 --- a/docs/test_cases/t30005_package.svg +++ b/docs/test_cases/t30005_package.svg @@ -1,6 +1,6 @@ - + @@ -9,48 +9,48 @@ - - + + A - - + + AA - - + + B - - + + BB - - + + C - - + + CC - - + + AAA - - + + BBB - - + + CCC diff --git a/docs/test_cases/t30006.md b/docs/test_cases/t30006.md index 966333e2..24cb71bd 100644 --- a/docs/test_cases/t30006.md +++ b/docs/test_cases/t30006.md @@ -128,7 +128,7 @@ struct A2 { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30006_package.svg b/docs/test_cases/t30006_package.svg index 13fb4263..ecd601fe 100644 --- a/docs/test_cases/t30006_package.svg +++ b/docs/test_cases/t30006_package.svg @@ -1,6 +1,6 @@ - + @@ -9,22 +9,22 @@ - - + + B - - + + A - - + + C - + Top A note. diff --git a/docs/test_cases/t30007.md b/docs/test_cases/t30007.md index 18a6f853..08532c96 100644 --- a/docs/test_cases/t30007.md +++ b/docs/test_cases/t30007.md @@ -151,7 +151,7 @@ struct A2 { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30007_package.svg b/docs/test_cases/t30007_package.svg index f7f66f39..1821941d 100644 --- a/docs/test_cases/t30007_package.svg +++ b/docs/test_cases/t30007_package.svg @@ -1,6 +1,6 @@ - + @@ -9,27 +9,27 @@ - - + + A - - + + B - - + + AA - - + + C - + Compare layout with t30006. diff --git a/docs/test_cases/t30008.md b/docs/test_cases/t30008.md index 371ceea3..3d0c01ae 100644 --- a/docs/test_cases/t30008.md +++ b/docs/test_cases/t30008.md @@ -211,7 +211,7 @@ struct FF { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30008_package.svg b/docs/test_cases/t30008_package.svg index 739654aa..b8b5a12d 100644 --- a/docs/test_cases/t30008_package.svg +++ b/docs/test_cases/t30008_package.svg @@ -1,6 +1,6 @@ - + @@ -9,43 +9,43 @@ - - + + dependants - - + + dependencies - - + + A - - + + B - - + + C - - + + D - - + + E - - + + F diff --git a/docs/test_cases/t30009.md b/docs/test_cases/t30009.md index 09e8176f..39fa58ce 100644 --- a/docs/test_cases/t30009.md +++ b/docs/test_cases/t30009.md @@ -217,7 +217,7 @@ namespace D { } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30009_package.svg b/docs/test_cases/t30009_package.svg index 4b870bf9..82cb82dd 100644 --- a/docs/test_cases/t30009_package.svg +++ b/docs/test_cases/t30009_package.svg @@ -1,6 +1,6 @@ - + @@ -9,53 +9,53 @@ - - + + One - - + + Two - - + + B - - + + D - - + + A - - + + C - - + + A - - + + B - - + + C - - + + D diff --git a/docs/test_cases/t30010.md b/docs/test_cases/t30010.md index c6c96ecc..5ad2803e 100644 --- a/docs/test_cases/t30010.md +++ b/docs/test_cases/t30010.md @@ -85,7 +85,7 @@ App app; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t30011.md b/docs/test_cases/t30011.md index 05504fa4..f3308492 100644 --- a/docs/test_cases/t30011.md +++ b/docs/test_cases/t30011.md @@ -75,7 +75,7 @@ struct t30011_App app; } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t40001.md b/docs/test_cases/t40001.md index b02e6cf5..1788db68 100644 --- a/docs/test_cases/t40001.md +++ b/docs/test_cases/t40001.md @@ -101,7 +101,7 @@ diagrams: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t40001_include.svg b/docs/test_cases/t40001_include.svg index 0a4987a3..a6502281 100644 --- a/docs/test_cases/t40001_include.svg +++ b/docs/test_cases/t40001_include.svg @@ -1,6 +1,6 @@ - + @@ -9,43 +9,43 @@ - + src - + include - + lib1 - - + + t40001.cc - - + + t40001_include1.h - - + + lib1.h - + string - + vector - + yaml-cpp/yaml.h - + This is a lib1 include dir - + This is a t40001_include1.h include file diff --git a/docs/test_cases/t40002.md b/docs/test_cases/t40002.md index 4336e8e8..602ec935 100644 --- a/docs/test_cases/t40002.md +++ b/docs/test_cases/t40002.md @@ -119,7 +119,7 @@ diagrams: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t40002_include.svg b/docs/test_cases/t40002_include.svg index 7d34b7d1..8771ba0d 100644 --- a/docs/test_cases/t40002_include.svg +++ b/docs/test_cases/t40002_include.svg @@ -1,6 +1,6 @@ - + @@ -9,46 +9,46 @@ - + src - + lib1 - + lib2 - + include - + lib1 - + lib2 - - + + t40002.cc - - + + lib1.cc - - + + lib2.cc - - + + lib1.h - - + + lib2.h diff --git a/docs/test_cases/t40003.md b/docs/test_cases/t40003.md index 3929d4f3..4d9ce229 100644 --- a/docs/test_cases/t40003.md +++ b/docs/test_cases/t40003.md @@ -145,7 +145,7 @@ diagrams: } ], "metadata": { - "clang_uml_version": "0.3.7-37-g8d1bac0", + "clang_uml_version": "0.3.7-44-ged88fcd", "llvm_version": "Ubuntu clang version 15.0.6", "schema_version": 1 }, diff --git a/docs/test_cases/t40003_include.svg b/docs/test_cases/t40003_include.svg index b527cb70..67ee88d7 100644 --- a/docs/test_cases/t40003_include.svg +++ b/docs/test_cases/t40003_include.svg @@ -1,6 +1,6 @@ - + @@ -9,66 +9,66 @@ - + src - + dependants - + dependencies - + include - + dependants - + dependencies - - + + t1.cc - - + + t2.cc - - + + t3.h - - + + t2.h - - + + t1.h - - + + t3.h - - + + t2.h - - + + t1.h - - + + t5.h diff --git a/src/common/generators/generators.h b/src/common/generators/generators.h index c8c0c1b2..96d967ce 100644 --- a/src/common/generators/generators.h +++ b/src/common/generators/generators.h @@ -359,6 +359,8 @@ std::unique_ptr generate(const common::compilation_database &db, diagram->set_complete(true); + diagram->finalize(); + return diagram; } diff --git a/src/common/model/diagram.cc b/src/common/model/diagram.cc index 907a3902..22f8e290 100644 --- a/src/common/model/diagram.cc +++ b/src/common/model/diagram.cc @@ -59,6 +59,8 @@ void diagram::set_complete(bool complete) { complete_ = complete; } bool diagram::complete() const { return complete_; } +void diagram::finalize() { } + bool diagram::should_include(const element &e) const { if (filter_.get() == nullptr) diff --git a/src/common/model/diagram.h b/src/common/model/diagram.h index ae78914a..61b10bde 100644 --- a/src/common/model/diagram.h +++ b/src/common/model/diagram.h @@ -124,12 +124,24 @@ public: void set_complete(bool complete); /** - * Whether the diagram is complete. + * @brief Whether the diagram is complete. + * + * This flag is set to true, when all translation units for this diagram + * have been visited. * * @return Diagram completion status. */ bool complete() const; + /** + * @brief Once the diagram is complete, run any final processing. + * + * This method should be overriden by specific diagram models to do some + * final tasks like cleaning up the model (e.g. some filters only work + * on completed diagrams). + */ + virtual void finalize(); + // TODO: refactor to a template method bool should_include(const element &e) const; bool should_include(const namespace_ &ns) const; diff --git a/src/common/model/diagram_filter.cc b/src/common/model/diagram_filter.cc index 7ac1937b..560a427a 100644 --- a/src/common/model/diagram_filter.cc +++ b/src/common/model/diagram_filter.cc @@ -25,6 +25,7 @@ #include "glob/glob.hpp" #include "include_diagram/model/diagram.h" #include "package_diagram/model/diagram.h" +#include "sequence_diagram/model/diagram.h" namespace clanguml::common::model { @@ -140,6 +141,12 @@ tvl::value_t filter_visitor::match( return match(d, m.access()); } +tvl::value_t filter_visitor::match(const diagram & /*d*/, + const sequence_diagram::model::participant & /*p*/) const +{ + return {}; +} + bool filter_visitor::is_inclusive() const { return type_ == filter_t::kInclusive; @@ -166,6 +173,13 @@ tvl::value_t anyof_filter::match( [&d, &e](const auto &f) { return f->match(d, e); }); } +tvl::value_t anyof_filter::match( + const diagram &d, const sequence_diagram::model::participant &p) const +{ + return tvl::any_of(filters_.begin(), filters_.end(), + [&d, &p](const auto &f) { return f->match(d, p); }); +} + tvl::value_t anyof_filter::match( const diagram &d, const common::model::source_file &e) const { @@ -351,6 +365,67 @@ tvl::value_t method_type_filter::match( }); } +callee_filter::callee_filter( + filter_t type, std::vector callee_types) + : filter_visitor{type} + , callee_types_{std::move(callee_types)} +{ +} + +tvl::value_t callee_filter::match( + const diagram &d, const sequence_diagram::model::participant &p) const +{ + using sequence_diagram::model::class_; + using sequence_diagram::model::function; + using sequence_diagram::model::method; + using sequence_diagram::model::participant; + + auto is_lambda = [&d](const method &m) { + auto class_participant = + dynamic_cast(d) + .get_participant(m.class_id()); + if (!class_participant) + return false; + + return class_participant.value().is_lambda(); + }; + + tvl::value_t res = tvl::any_of( + callee_types_.begin(), callee_types_.end(), [&p, is_lambda](auto ct) { + auto is_function = [](const participant *p) { + return dynamic_cast(p) != nullptr; + }; + + switch (ct) { + case config::callee_type::method: + return p.type_name() == "method"; + case config::callee_type::constructor: + return p.type_name() == "method" && + ((method &)p).is_constructor(); + case config::callee_type::assignment: + return p.type_name() == "method" && + ((method &)p).is_assignment(); + case config::callee_type::operator_: + return is_function(&p) && ((function &)p).is_operator(); + case config::callee_type::defaulted: + return p.type_name() == "method" && + ((method &)p).is_defaulted(); + case config::callee_type::static_: + return is_function(&p) && ((function &)p).is_static(); + case config::callee_type::function: + return p.type_name() == "function"; + case config::callee_type::function_template: + return p.type_name() == "function_template"; + case config::callee_type::lambda: + return p.type_name() == "method" && is_lambda((method &)p); + } + + return false; + }); + + return res; +} + subclass_filter::subclass_filter( filter_t type, std::vector roots) : filter_visitor{type} @@ -771,6 +846,10 @@ void diagram_filter::init_filters(const config::diagram &c) filter_t::kInclusive, relationship_t::kDependency, c.include().dependencies, true)); } + else if (c.type() == diagram_t::kSequence) { + element_filters.emplace_back(std::make_unique( + filter_t::kInclusive, c.include().callee_types)); + } else if (c.type() == diagram_t::kPackage) { element_filters.emplace_back( std::make_unique( @@ -878,7 +957,11 @@ void diagram_filter::init_filters(const config::diagram &c) filter_t::kExclusive, relationship_t::kDependency, c.exclude().dependencies, true)); - if (c.type() == diagram_t::kInclude) { + if (c.type() == diagram_t::kSequence) { + add_exclusive_filter(std::make_unique( + filter_t::kExclusive, c.exclude().callee_types)); + } + else if (c.type() == diagram_t::kInclude) { std::vector dependants; std::vector dependencies; diff --git a/src/common/model/diagram_filter.h b/src/common/model/diagram_filter.h index 9cf712f5..c713eaa9 100644 --- a/src/common/model/diagram_filter.h +++ b/src/common/model/diagram_filter.h @@ -28,6 +28,7 @@ #include "config/config.h" #include "diagram.h" #include "include_diagram/model/diagram.h" +#include "sequence_diagram/model/participant.h" #include "source_file.h" #include "tvl.h" @@ -104,6 +105,9 @@ public: virtual tvl::value_t match( const diagram &d, const class_diagram::model::class_member &m) const; + virtual tvl::value_t match( + const diagram &d, const sequence_diagram::model::participant &p) const; + bool is_inclusive() const; bool is_exclusive() const; @@ -122,6 +126,9 @@ struct anyof_filter : public filter_visitor { tvl::value_t match( const diagram &d, const common::model::element &e) const override; + tvl::value_t match(const diagram &d, + const sequence_diagram::model::participant &p) const override; + tvl::value_t match( const diagram &d, const common::model::source_file &e) const override; @@ -192,6 +199,21 @@ private: std::vector method_types_; }; +/** + * Sequence diagram callee type filter. + */ +struct callee_filter : public filter_visitor { + callee_filter(filter_t type, std::vector callee_types); + + ~callee_filter() override = default; + + tvl::value_t match(const diagram &d, + const sequence_diagram::model::participant &p) const override; + +private: + std::vector callee_types_; +}; + /** * Match element based on whether it is a subclass of a set of base classes, * or one of them. diff --git a/src/config/config.cc b/src/config/config.cc index 8481a9e5..e4273c00 100644 --- a/src/config/config.cc +++ b/src/config/config.cc @@ -79,10 +79,37 @@ std::string to_string(method_type mt) return "deleted"; case method_type::static_: return "static"; - default: - assert(false); - return ""; } + + assert(false); + return ""; +} + +std::string to_string(callee_type mt) +{ + switch (mt) { + case callee_type::constructor: + return "constructor"; + case callee_type::assignment: + return "assignment"; + case callee_type::operator_: + return "operator"; + case callee_type::defaulted: + return "defaulted"; + case callee_type::static_: + return "static"; + case callee_type::method: + return "method"; + case callee_type::function: + return "function"; + case callee_type::function_template: + return "function_template"; + case callee_type::lambda: + return "lambda"; + } + + assert(false); + return ""; } std::string to_string(const comment_parser_t cp) diff --git a/src/config/config.h b/src/config/config.h index 5c21e2d0..4bde1ddb 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -63,6 +63,21 @@ enum class method_type { std::string to_string(method_type mt); +/*! Types of call expressions, which can be used in sequence diagram filters */ +enum class callee_type { + constructor, + assignment, + operator_, + defaulted, + static_, + method, + function, + function_template, + lambda +}; + +std::string to_string(callee_type mt); + /*! How packages in diagrams should be generated */ enum class package_type_t { kNamespace, /*!< From namespaces */ @@ -313,6 +328,23 @@ struct filter { * ``` */ std::vector method_types; + + /*! @brief Callee types filter + * + * This filter allows to filter sequence diagram calls by callee types. + * + * @see method_type + * + * Example: + * + * ```yaml + * exclude: + * callee_types: + * - constructor + * - operator + * ``` + */ + std::vector callee_types; }; enum class hint_t { up, down, left, right, together, row, column }; diff --git a/src/config/yaml_decoders.cc b/src/config/yaml_decoders.cc index 54b96eb5..5bfdbe9c 100644 --- a/src/config/yaml_decoders.cc +++ b/src/config/yaml_decoders.cc @@ -24,6 +24,7 @@ using clanguml::common::namespace_or_regex; using clanguml::common::string_or_regex; using clanguml::common::model::access_t; using clanguml::common::model::relationship_t; +using clanguml::config::callee_type; using clanguml::config::class_diagram; using clanguml::config::config; using clanguml::config::diagram_template; @@ -252,6 +253,38 @@ template <> struct convert { } }; +// +// config callee_type decoder +// +template <> struct convert { + static bool decode(const Node &node, callee_type &rhs) + { + const auto &val = node.as(); + if (val == to_string(callee_type::constructor)) + rhs = callee_type::constructor; + else if (val == to_string(callee_type::assignment)) + rhs = callee_type::assignment; + else if (val == to_string(callee_type::operator_)) + rhs = callee_type::operator_; + else if (val == to_string(callee_type::defaulted)) + rhs = callee_type::defaulted; + else if (val == to_string(callee_type::static_)) + rhs = callee_type::static_; + else if (val == to_string(callee_type::function)) + rhs = callee_type::function; + else if (val == to_string(callee_type::function_template)) + rhs = callee_type::function_template; + else if (val == to_string(callee_type::method)) + rhs = callee_type::method; + else if (val == to_string(callee_type::lambda)) + rhs = callee_type::lambda; + else + return false; + + return true; + } +}; + // // config relationship_t decoder // @@ -432,6 +465,10 @@ template <> struct convert { if (node["paths"]) rhs.paths = node["paths"].as(); + if (node["callee_types"]) + rhs.callee_types = + node["callee_types"].as(); + return true; } }; diff --git a/src/config/yaml_emitters.cc b/src/config/yaml_emitters.cc index 28a870de..8b629290 100644 --- a/src/config/yaml_emitters.cc +++ b/src/config/yaml_emitters.cc @@ -82,6 +82,12 @@ YAML::Emitter &operator<<(YAML::Emitter &out, const method_type &m) return out; } +YAML::Emitter &operator<<(YAML::Emitter &out, const callee_type &m) +{ + out << to_string(m); + return out; +} + YAML::Emitter &operator<<(YAML::Emitter &out, const filter &f) { out << YAML::BeginMap; @@ -112,7 +118,8 @@ YAML::Emitter &operator<<(YAML::Emitter &out, const filter &f) out << YAML::Key << "subclasses" << YAML::Value << f.subclasses; if (!f.parents.empty()) out << YAML::Key << "parents" << YAML::Value << f.parents; - + if (!f.method_types.empty()) + out << YAML::Key << "callee_types" << YAML::Value << f.callee_types; out << YAML::EndMap; return out; } diff --git a/src/sequence_diagram/generators/json/sequence_diagram_generator.cc b/src/sequence_diagram/generators/json/sequence_diagram_generator.cc index c44967d3..33f298cb 100644 --- a/src/sequence_diagram/generators/json/sequence_diagram_generator.cc +++ b/src/sequence_diagram/generators/json/sequence_diagram_generator.cc @@ -252,10 +252,6 @@ nlohmann::json &generator::current_block_statement() const void generator::process_call_message(const model::message &m, std::vector &visited) const { - const auto &to = m_model.get_participant(m.to()); - if (!to || to.value().skip()) - return; - visited.push_back(m.from()); LOG_DBG("Generating message {} --> {}", m.from(), m.to()); diff --git a/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc b/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc index b646d373..03b31fb4 100644 --- a/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc +++ b/src/sequence_diagram/generators/plantuml/sequence_diagram_generator.cc @@ -139,12 +139,10 @@ void generator::generate_activity(const activity &a, std::ostream &ostr, if (m.type() == message_t::kCall) { const auto &to = m_model.get_participant(m.to()); - if (!to || to.value().skip()) - continue; visited.push_back(m.from()); - LOG_DBG("Generating message {} --> {}", m.from(), m.to()); + LOG_DBG("Generating message [{}] --> [{}]", m.from(), m.to()); generate_call(m, ostr); diff --git a/src/sequence_diagram/model/diagram.cc b/src/sequence_diagram/model/diagram.cc index e3fde21f..9cb1ed81 100644 --- a/src/sequence_diagram/model/diagram.cc +++ b/src/sequence_diagram/model/diagram.cc @@ -18,6 +18,8 @@ #include "diagram.h" +#include "common/model/diagram_filter.h" + #include #include @@ -171,6 +173,14 @@ std::set &diagram::active_participants() return active_participants_; } +bool diagram::should_include( + const sequence_diagram::model::participant &p) const +{ + return filter().should_include(p) && + filter().should_include( + dynamic_cast(p)); +} + void diagram::print() const { LOG_TRACE(" --- Participants ---"); @@ -238,6 +248,81 @@ void diagram::fold_or_end_block_statement(message &&m, current_messages.emplace_back(std::move(m)); } } + +void diagram::finalize() +{ + // Apply diagram filters and remove any empty block statements + using common::model::message_t; + + // First in each sequence (activity) filter out any remaining + // uninteresting calls + for (auto &[id, act] : sequences_) { + util::erase_if(act.messages(), [this](auto &m) { + if (m.type() != message_t::kCall) + return false; + + const auto &to = get_participant(m.to()); + if (!to || to.value().skip()) + return true; + + if (!should_include(to.value())) { + LOG_DBG("Excluding call from [{}] to {} [{}]", m.from(), + to.value().full_name(false), m.to()); + return true; + } + + return false; + }); + } + + // Now remove any empty block statements, e.g. if/endif + for (auto &[id, act] : sequences_) { + int64_t block_nest_level{0}; + std::vector> block_message_stack; + // Add first stack level - this level will contain the filtered + // message sequence + block_message_stack.emplace_back(); + + // First create a recursive stack from the messages and + // message blocks (e.g. if statements) + for (auto &m : act.messages()) { + if (is_begin_block_message(m.type())) { + block_nest_level++; + block_message_stack.push_back({m}); + } + else if (is_end_block_message(m.type())) { + block_nest_level--; + + block_message_stack.back().push_back(m); + + // Check the last stack for any calls, if yes, collapse it + // on the previous stack + if (std::count_if(block_message_stack.back().begin(), + block_message_stack.back().end(), [](auto &m) { + return m.type() == message_t::kCall; + }) > 0) { + std::copy(block_message_stack.back().begin(), + block_message_stack.back().end(), + std::back_inserter( + block_message_stack.at(block_nest_level))); + } + + block_message_stack.pop_back(); + + assert(block_nest_level >= 0); + } + else { + block_message_stack.back().push_back(m); + } + } + + act.messages().clear(); + + for (auto &m : block_message_stack[0]) { + act.add_message(m); + } + } +} } // namespace clanguml::sequence_diagram::model namespace clanguml::common::model { diff --git a/src/sequence_diagram/model/diagram.h b/src/sequence_diagram/model/diagram.h index f8d6b7e8..d5bf0f20 100644 --- a/src/sequence_diagram/model/diagram.h +++ b/src/sequence_diagram/model/diagram.h @@ -74,7 +74,7 @@ public: */ template common::optional_ref get_participant( - common::model::diagram_element::id_t id) + common::model::diagram_element::id_t id) const { if (participants_.find(id) == participants_.end()) { return {}; @@ -202,6 +202,25 @@ public: */ void print() const; + // Implicitly import should_include overloads from base class + using common::model::diagram::should_include; + + /** + * @brief Convenience `should_include` overload for participant + * @param p Participant model + * @return True, if the participant should be included in the diagram + */ + bool should_include(const sequence_diagram::model::participant &p) const; + + /** + * @brief Once the diagram is complete, run any final processing. + * + * This method should be overriden by specific diagram models to do some + * final tasks like cleaning up the model (e.g. some filters only work + * on completed diagrams). + */ + void finalize() override; + private: /** * This method checks the last messages in sequence (current_messages), @@ -223,6 +242,27 @@ private: common::model::message_t statement_begin, std::vector ¤t_messages) const; + bool is_begin_block_message(common::model::message_t mt) + { + using common::model::message_t; + static std::set block_begin_types{message_t::kIf, + message_t::kWhile, message_t::kDo, message_t::kFor, message_t::kTry, + message_t::kSwitch, message_t::kConditional}; + + return block_begin_types.count(mt) > 0; + }; + + bool is_end_block_message(common::model::message_t mt) + { + using common::model::message_t; + static std::set block_end_types{message_t::kIfEnd, + message_t::kWhileEnd, message_t::kDoEnd, message_t::kForEnd, + message_t::kTryEnd, message_t::kSwitchEnd, + message_t::kConditionalEnd}; + + return block_end_types.count(mt) > 0; + }; + bool started_{false}; std::map sequences_; diff --git a/src/sequence_diagram/model/participant.cc b/src/sequence_diagram/model/participant.cc index 2c9b1083..3772b891 100644 --- a/src/sequence_diagram/model/participant.cc +++ b/src/sequence_diagram/model/participant.cc @@ -143,6 +143,10 @@ bool function::is_static() const { return is_static_; } void function::is_static(bool s) { is_static_ = s; } +bool function::is_operator() const { return is_operator_; } + +void function::is_operator(bool o) { is_operator_ = o; } + void function::add_parameter(const std::string &a) { parameters_.push_back(a); } const std::vector &function::parameters() const @@ -164,6 +168,18 @@ std::string method::alias() const return fmt::format("C_{:022}", class_id_); } +bool method::is_constructor() const { return is_constructor_; } + +void method::is_constructor(bool c) { is_constructor_ = c; } + +bool method::is_defaulted() const { return is_defaulted_; } + +void method::is_defaulted(bool d) { is_defaulted_ = d; } + +bool method::is_assignment() const { return is_assignment_; } + +void method::is_assignment(bool a) { is_assignment_ = a; } + void method::set_method_name(const std::string &name) { method_name_ = name; } void method::set_class_id(diagram_element::id_t id) { class_id_ = id; } diff --git a/src/sequence_diagram/model/participant.h b/src/sequence_diagram/model/participant.h index 0a4c4ff7..7cf80cd1 100644 --- a/src/sequence_diagram/model/participant.h +++ b/src/sequence_diagram/model/participant.h @@ -193,20 +193,6 @@ private: std::string full_name_; }; -/** - * @brief Participant representing a C++ lambda. - */ -struct lambda : public class_ { - using class_::class_; - - /** - * Get the type name of the diagram element. - * - * @return Type name of the diagram element. - */ - std::string type_name() const override { return "lambda"; } -}; - /** * @brief Participant mode representing a free function. */ @@ -291,6 +277,20 @@ struct function : public participant { */ void is_static(bool s); + /** + * @brief Check, if the method is an operator + * + * @return True, if the method is an operator + */ + bool is_operator() const; + + /** + * @brief Set whether the method is an operator + * + * @param v True, if the method is an operator + */ + void is_operator(bool o); + /** * @brief Add a function parameter * @@ -312,6 +312,7 @@ private: bool is_const_{false}; bool is_void_{false}; bool is_static_{false}; + bool is_operator_{false}; std::vector parameters_; }; @@ -401,10 +402,55 @@ struct method : public function { */ std::string to_string() const override; + /** + * @brief Check, if the method is a constructor + * + * @return True, if the method is a constructor + */ + bool is_constructor() const; + + /** + * @brief Set whether the method is a constructor + * + * @param v True, if the method is a constructor + */ + void is_constructor(bool c); + + /** + * @brief Check, if the method is defaulted + * + * @return True, if the method is defaulted + */ + bool is_defaulted() const; + + /** + * @brief Set whether the method is defaulted + * + * @param v True, if the method is defaulted + */ + void is_defaulted(bool c); + + /** + * @brief Check, if the method is an assignment operator + * + * @return True, if the method is an assignment operator + */ + bool is_assignment() const; + + /** + * @brief Set whether the method is an assignment operator + * + * @param v True, if the method is an assignment operator + */ + void is_assignment(bool a); + private: diagram_element::id_t class_id_{}; std::string method_name_; std::string class_full_name_; + bool is_constructor_{false}; + bool is_defaulted_{false}; + bool is_assignment_{false}; }; /** diff --git a/src/sequence_diagram/visitor/call_expression_context.cc b/src/sequence_diagram/visitor/call_expression_context.cc index ea619188..094ca5a0 100644 --- a/src/sequence_diagram/visitor/call_expression_context.cc +++ b/src/sequence_diagram/visitor/call_expression_context.cc @@ -218,10 +218,11 @@ void call_expression_context::leave_loopstmt() return loop_stmt_stack_.pop(); } -clang::CallExpr *call_expression_context::current_callexpr() const +call_expression_context::callexpr_stack_t +call_expression_context::current_callexpr() const { if (call_expr_stack_.empty()) - return nullptr; + return {}; return call_expr_stack_.top(); } @@ -231,6 +232,11 @@ void call_expression_context::enter_callexpr(clang::CallExpr *expr) call_expr_stack_.push(expr); } +void call_expression_context::enter_callexpr(clang::CXXConstructExpr *expr) +{ + call_expr_stack_.push(expr); +} + void call_expression_context::leave_callexpr() { if (!call_expr_stack_.empty()) { diff --git a/src/sequence_diagram/visitor/call_expression_context.h b/src/sequence_diagram/visitor/call_expression_context.h index b65a23e2..05563ab6 100644 --- a/src/sequence_diagram/visitor/call_expression_context.h +++ b/src/sequence_diagram/visitor/call_expression_context.h @@ -37,6 +37,15 @@ namespace clanguml::sequence_diagram::visitor { * e.g. a class method or function. */ struct call_expression_context { + /** + * In Clang, call to a class constructor is represented by + * `clang::CXXConstructExpr`, which does inherit from `clang::CallExpr`. + * So to enable to track calls to constructors, we need to be able + * to add to the call stack either type. + */ + using callexpr_stack_t = std::variant; + call_expression_context(); /** @@ -252,15 +261,22 @@ struct call_expression_context { * * @return Call expression */ - clang::CallExpr *current_callexpr() const; + callexpr_stack_t current_callexpr() const; /** * @brief Enter a call expression * - * @param stmt Call expression + * @param expr Call expression */ void enter_callexpr(clang::CallExpr *expr); + /** + * @brief Enter a constructor call expression + * + * @param expr Constructor call expression + */ + void enter_callexpr(clang::CXXConstructExpr *expr); + /** * @brief Leave call expression */ @@ -302,7 +318,7 @@ private: std::int64_t current_caller_id_{0}; std::stack current_lambda_caller_id_; - std::stack call_expr_stack_; + std::stack call_expr_stack_; std::stack if_stmt_stack_; std::stack elseif_stmt_stack_; diff --git a/src/sequence_diagram/visitor/translation_unit_visitor.cc b/src/sequence_diagram/visitor/translation_unit_visitor.cc index 143a13bb..c295bfea 100644 --- a/src/sequence_diagram/visitor/translation_unit_visitor.cc +++ b/src/sequence_diagram/visitor/translation_unit_visitor.cc @@ -330,6 +330,8 @@ bool translation_unit_visitor::VisitFunctionDecl( function_model_ptr->is_void(declaration->getReturnType()->isVoidType()); + function_model_ptr->is_operator(declaration->isOverloadedOperator()); + context().update(declaration); context().set_caller_id(function_model_ptr->id()); @@ -373,6 +375,9 @@ bool translation_unit_visitor::VisitFunctionTemplateDecl( function_template_model->set_id( common::to_id(function_template_model->full_name(false))); + function_template_model->is_operator( + declaration->getAsFunction()->isOverloadedOperator()); + context().update(declaration); context().set_caller_id(function_template_model->id()); @@ -488,6 +493,41 @@ bool translation_unit_visitor::TraverseCXXOperatorCallExpr( return true; } +bool translation_unit_visitor::TraverseCXXTemporaryObjectExpr( + clang::CXXTemporaryObjectExpr *expr) +{ + context().enter_callexpr(expr); + + RecursiveASTVisitor< + translation_unit_visitor>::TraverseCXXTemporaryObjectExpr(expr); + + translation_unit_visitor::VisitCXXConstructExpr( + clang::dyn_cast(expr)); + + context().leave_callexpr(); + + pop_message_to_diagram(expr); + + return true; +} + +bool translation_unit_visitor::TraverseCXXConstructExpr( + clang::CXXConstructExpr *expr) +{ + context().enter_callexpr(expr); + + RecursiveASTVisitor::TraverseCXXConstructExpr( + expr); + + translation_unit_visitor::VisitCXXConstructExpr(expr); + + context().leave_callexpr(); + + pop_message_to_diagram(expr); + + return true; +} + bool translation_unit_visitor::TraverseCompoundStmt(clang::CompoundStmt *stmt) { using clanguml::common::model::message_t; @@ -862,13 +902,7 @@ bool translation_unit_visitor::VisitCallExpr(clang::CallExpr *expr) // message source rather then enclosing context // Unless the lambda is declared in a function or method call if (context().lambda_caller_id() != 0) { - if (context().current_callexpr() == nullptr) { - m.set_from(context().lambda_caller_id()); - } - else { - LOG_DBG("Current lambda declaration is passed to a method or " - "function - keep the original caller id"); - } + m.set_from(context().lambda_caller_id()); } if (context().is_expr_in_current_control_statement_condition(expr)) { @@ -885,6 +919,7 @@ bool translation_unit_visitor::VisitCallExpr(clang::CallExpr *expr) if (!process_operator_call_expression(m, operator_call_expr)) return true; } + // // Call to a class method // @@ -963,17 +998,66 @@ bool translation_unit_visitor::VisitCallExpr(clang::CallExpr *expr) return true; } +bool translation_unit_visitor::VisitCXXConstructExpr( + clang::CXXConstructExpr *expr) +{ + using clanguml::common::model::message_scope_t; + using clanguml::common::model::message_t; + using clanguml::common::model::namespace_; + using clanguml::sequence_diagram::model::activity; + using clanguml::sequence_diagram::model::message; + + if (expr == nullptr) + return true; + + if (const auto *ctor = expr->getConstructor(); + ctor != nullptr && !should_include(ctor)) + return true; + + LOG_TRACE("Visiting cxx construct expression at {} [caller_id = {}]", + expr->getBeginLoc().printToString(source_manager()), + context().caller_id()); + + message m{message_t::kCall, context().caller_id()}; + + set_source_location(*expr, m); + + if (context().lambda_caller_id() != 0) { + m.set_from(context().lambda_caller_id()); + } + + if (context().is_expr_in_current_control_statement_condition(expr)) { + m.set_message_scope(common::model::message_scope_t::kCondition); + } + + if (!process_construct_expression(m, expr)) + return true; + + if (m.from() > 0 && m.to() > 0) { + if (diagram().sequences().find(m.from()) == + diagram().sequences().end()) { + activity a{m.from()}; + diagram().sequences().insert({m.from(), std::move(a)}); + } + + diagram().add_active_participant(m.from()); + diagram().add_active_participant(m.to()); + + LOG_DBG("Found constructor call {} from {} [{}] to {} [{}] ", + m.message_name(), m.from(), m.from(), m.to(), m.to()); + + push_message(expr, std::move(m)); + } + + return true; +} + bool translation_unit_visitor::process_operator_call_expression( model::message &m, const clang::CXXOperatorCallExpr *operator_call_expr) { if (operator_call_expr->getCalleeDecl() == nullptr) return false; - // For now we only handle call overloaded operators - if (operator_call_expr->getOperator() != - clang::OverloadedOperatorKind::OO_Call) - return false; - LOG_DBG("Operator '{}' call expression to {} at {}", getOperatorSpelling(operator_call_expr->getOperator()), operator_call_expr->getCalleeDecl()->getID(), @@ -993,6 +1077,39 @@ bool translation_unit_visitor::process_operator_call_expression( return true; } +bool translation_unit_visitor::process_construct_expression( + model::message &m, const clang::CXXConstructExpr *construct_expr) +{ + const auto *constructor = construct_expr->getConstructor(); + if (constructor == nullptr) + return false; + + const auto *constructor_parent = constructor->getParent(); + if (constructor_parent == nullptr) + return false; + + LOG_DBG("Constructor '{}' call expression to {} at {}", + construct_expr->getConstructor()->getNameAsString(), + constructor->getID(), + construct_expr->getBeginLoc().printToString(source_manager())); + + auto maybe_id = get_unique_id(constructor->getID()); + if (maybe_id.has_value()) { + m.set_to(maybe_id.value()); + } + else { + m.set_to(constructor->getID()); + } + + m.set_message_name( + fmt::format("{}::{}", constructor_parent->getQualifiedNameAsString(), + constructor_parent->getNameAsString())); + + diagram().add_active_participant(constructor->getID()); + + return true; +} + bool translation_unit_visitor::process_class_method_call_expression( model::message &m, const clang::CXXMemberCallExpr *method_call_expr) { @@ -1305,7 +1422,7 @@ translation_unit_visitor::create_class_model(clang::CXXRecordDecl *cls) c.set_id(common::to_id(c.full_name(false))); // TODO: Check if lambda is declared as an argument passed to a - // function/method call + // function/method call } else { LOG_WARN("Cannot find parent declaration for lambda {}", @@ -2102,6 +2219,12 @@ void translation_unit_visitor::push_message( call_expr_message_map_.emplace(expr, std::move(m)); } +void translation_unit_visitor::push_message( + clang::CXXConstructExpr *expr, model::message &&m) +{ + construct_expr_message_map_.emplace(expr, std::move(m)); +} + void translation_unit_visitor::pop_message_to_diagram(clang::CallExpr *expr) { assert(expr != nullptr); @@ -2119,10 +2242,30 @@ void translation_unit_visitor::pop_message_to_diagram(clang::CallExpr *expr) call_expr_message_map_.erase(expr); } +void translation_unit_visitor::pop_message_to_diagram( + clang::CXXConstructExpr *expr) +{ + assert(expr != nullptr); + + // Skip if no message was generated from this expr + if (construct_expr_message_map_.find(expr) == + construct_expr_message_map_.end()) { + return; + } + + auto msg = std::move(construct_expr_message_map_.at(expr)); + + auto caller_id = msg.from(); + diagram().get_activity(caller_id).add_message(std::move(msg)); + + construct_expr_message_map_.erase(expr); +} + void translation_unit_visitor::finalize() { std::set active_participants_unique; + // Change all active participants AST local ids to diagram global ids for (auto id : diagram().active_participants()) { if (local_ast_id_map_.find(id) != local_ast_id_map_.end()) { active_participants_unique.emplace(local_ast_id_map_.at(id)); @@ -2134,6 +2277,7 @@ void translation_unit_visitor::finalize() diagram().active_participants() = std::move(active_participants_unique); + // Change all message callees AST local ids to diagram global ids for (auto &[id, activity] : diagram().sequences()) { for (auto &m : activity.messages()) { if (local_ast_id_map_.find(m.to()) != local_ast_id_map_.end()) { @@ -2156,6 +2300,16 @@ translation_unit_visitor::create_method_model(clang::CXXMethodDecl *declaration) method_model_ptr->set_name(ns.name()); ns.pop_back(); + method_model_ptr->is_defaulted(declaration->isDefaulted()); + method_model_ptr->is_assignment(declaration->isCopyAssignmentOperator() || + declaration->isMoveAssignmentOperator()); + method_model_ptr->is_const(declaration->isConst()); + method_model_ptr->is_static(declaration->isStatic()); + method_model_ptr->is_static(declaration->isStatic()); + method_model_ptr->is_operator(declaration->isOverloadedOperator()); + method_model_ptr->is_constructor( + clang::dyn_cast(declaration) != nullptr); + clang::Decl *parent_decl = declaration->getParent(); if (context().current_class_template_decl_ != nullptr) diff --git a/src/sequence_diagram/visitor/translation_unit_visitor.h b/src/sequence_diagram/visitor/translation_unit_visitor.h index 0e7ae533..ed314b7b 100644 --- a/src/sequence_diagram/visitor/translation_unit_visitor.h +++ b/src/sequence_diagram/visitor/translation_unit_visitor.h @@ -72,8 +72,11 @@ public: bool TraverseCXXOperatorCallExpr(clang::CXXOperatorCallExpr *expr); - // TODO - // bool TraverseCXXConstructExpr(clang::CXXConstructExpr *expr); + bool VisitCXXConstructExpr(clang::CXXConstructExpr *expr); + + bool TraverseCXXConstructExpr(clang::CXXConstructExpr *expr); + + bool TraverseCXXTemporaryObjectExpr(clang::CXXTemporaryObjectExpr *expr); bool VisitLambdaExpr(clang::LambdaExpr *expr); @@ -249,7 +252,7 @@ public: int64_t local_id) const; /** - * @brief Finalize diagram model + * @brief Finalize diagram model for this translation unit */ void finalize(); @@ -422,7 +425,17 @@ private: const clang::CXXDependentScopeMemberExpr *dependent_member_expr) const; /** - * @brief Handle a operator call expresion + * @brief Handle CXX constructor call + * + * @param m Message model + * @param construct_expr CXX Construct expression + * @return True, if `m` contains a valid constructor call + */ + bool process_construct_expression( + model::message &m, const clang::CXXConstructExpr *construct_expr); + + /** + * @brief Handle a operator call expression * * @param m Message model * @param operator_call_expr Operator call expression @@ -485,6 +498,7 @@ private: * @param m Message model */ void push_message(clang::CallExpr *expr, model::message &&m); + void push_message(clang::CXXConstructExpr *expr, model::message &&m); /** * @brief Move a message model to diagram. @@ -492,6 +506,7 @@ private: * @param expr Call expression */ void pop_message_to_diagram(clang::CallExpr *expr); + void pop_message_to_diagram(clang::CXXConstructExpr *expr); // Reference to the output diagram model clanguml::sequence_diagram::model::diagram &diagram_; @@ -507,6 +522,8 @@ private: * sequence after the visitor leaves the call expression AST node */ std::map call_expr_message_map_; + std::map + construct_expr_message_map_; std::map> diff --git a/tests/t20012/test_case.h b/tests/t20012/test_case.h index 78879afb..e71c2385 100644 --- a/tests/t20012/test_case.h +++ b/tests/t20012/test_case.h @@ -74,7 +74,8 @@ TEST_CASE("t20012", "[test-case][sequence]") HasCall(_A("tmain()::(lambda ../../tests/t20012/t20012.cc:86:9)"), _A("C"), "c()")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("D"), "add5(int)")); + // @todo #168 + // REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("D"), "add5(int)")); save_puml( config.output_directory() + "/" + diagram->name + ".puml", puml); @@ -113,7 +114,9 @@ TEST_CASE("t20012", "[test-case][sequence]") FindMessage(j, "tmain()::(lambda ../../tests/t20012/t20012.cc:86:9)", "C", "c()"), - FindMessage(j, "tmain()", "D", "add5(int)")}; + // @todo #168 + // FindMessage(j, "tmain()", "D", "add5(int)") + }; REQUIRE(std::is_sorted(messages.begin(), messages.end())); diff --git a/tests/t20020/test_case.h b/tests/t20020/test_case.h index 32d66d95..12ebb395 100644 --- a/tests/t20020/test_case.h +++ b/tests/t20020/test_case.h @@ -45,8 +45,11 @@ TEST_CASE("t20020", "[test-case][sequence]") REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b2()")); REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "log()")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("C"), "c1()")); - REQUIRE_THAT(puml, HasCallInControlCondition(_A("C"), _A("C"), "c2()")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("C"), "c1() const")); + REQUIRE_THAT( + puml, HasCallInControlCondition(_A("C"), _A("C"), "c2() const")); + REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "log() const")); + REQUIRE_THAT( puml, HasCallInControlCondition(_A("tmain()"), _A("C"), "c3(int)")); @@ -67,8 +70,9 @@ TEST_CASE("t20020", "[test-case][sequence]") FindMessage(j, "tmain()", "B", "b2()"), FindMessage(j, "tmain()", "A", "a4()"), FindMessage(j, "tmain()", "B", "log()"), - FindMessage(j, "tmain()", "C", "c1()"), - FindMessage(j, "C", "C", "c2()"), FindMessage(j, "C", "C", "log()"), + FindMessage(j, "tmain()", "C", "c1() const"), + FindMessage(j, "C", "C", "c2() const"), + FindMessage(j, "C", "C", "log() const"), FindMessage(j, "tmain()", "D", "d1(int,int)")}; REQUIRE(std::is_sorted(messages.begin(), messages.end())); diff --git a/tests/t20021/test_case.h b/tests/t20021/test_case.h index 789426c7..130bd08a 100644 --- a/tests/t20021/test_case.h +++ b/tests/t20021/test_case.h @@ -76,7 +76,7 @@ TEST_CASE("t20021", "[test-case][sequence]") FindMessage(j, "tmain()", "C", "c2()"), FindMessage(j, "tmain()", "A", "a1()"), FindMessage(j, "tmain()", "C", "c3()"), - FindMessage(j, "tmain()", "B", "b2()"), + FindMessage(j, "tmain()", "B", "b2() const"), FindMessage(j, "tmain()", "C", "contents()") // TODO: Repeated messge gets wrong index // FindMessage(j, "tmain()", "B", "b2()") diff --git a/tests/t20030/.clang-uml b/tests/t20030/.clang-uml new file mode 100644 index 00000000..a8e29397 --- /dev/null +++ b/tests/t20030/.clang-uml @@ -0,0 +1,15 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t20030_sequence: + type: sequence + glob: + - ../../tests/t20030/t20030.cc + include: + namespaces: + - clanguml::t20030 + using_namespace: + - clanguml::t20030 + start_from: + - function: "clanguml::t20030::tmain(int)" + - function: "clanguml::t20030::tmain(bool,int)" \ No newline at end of file diff --git a/tests/t20030/t20030.cc b/tests/t20030/t20030.cc new file mode 100644 index 00000000..ed103fd2 --- /dev/null +++ b/tests/t20030/t20030.cc @@ -0,0 +1,51 @@ +namespace clanguml { +namespace t20030 { + +int magic() { return 42; } + +class A { +public: + A() { create(); } + + A(int v) { a_ = v; } + + A &operator=(const A &a) + { + set(a.a_); + return *this; + } + + A &operator+=(int a) + { + add(a); + return *this; + } + + int value() const { return a_; } + +private: + void create() { a_ = 0; } + + void add(int a) { a_ += a; } + void set(int a) { a_ = a; } + + int a_; +}; + +void tmain(int a) +{ + A an_a{magic()}; + an_a += 1; +} + +int tmain(bool f, int a) +{ + auto an_a = A(); + auto an_b = A(); + an_a += 2; + an_b = an_a; + return an_b.value(); +}; + +} +} \ No newline at end of file diff --git a/tests/t20030/test_case.h b/tests/t20030/test_case.h new file mode 100644 index 00000000..6e7da9f1 --- /dev/null +++ b/tests/t20030/test_case.h @@ -0,0 +1,66 @@ +/** + * tests/t20030/test_case.h + * + * Copyright (c) 2021-2023 Bartek Kryza + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +TEST_CASE("t20030", "[test-case][sequence]") +{ + auto [config, db] = load_config("t20030"); + + auto diagram = config.diagrams["t20030_sequence"]; + + REQUIRE(diagram->name == "t20030_sequence"); + + auto model = generate_sequence_diagram(*db, diagram); + + REQUIRE(model->name() == "t20030_sequence"); + + { + auto puml = generate_sequence_puml(diagram, *model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + + // Check if all calls exist + REQUIRE_THAT(puml, HasCall(_A("tmain(int)"), _A("magic()"), "")); + + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "create()")); + REQUIRE_THAT( + puml, HasCall(_A("tmain(int)"), _A("A"), "operator+=(int)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "add(int)")); + + REQUIRE_THAT(puml, HasCall(_A("tmain(bool,int)"), _A("A"), "A()")); + REQUIRE_THAT( + puml, HasCall(_A("tmain(bool,int)"), _A("A"), "operator+=(int)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "add(int)")); + REQUIRE_THAT(puml, + HasCall(_A("tmain(bool,int)"), _A("A"), "operator=(const A &)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "set(int)")); + REQUIRE_THAT(puml, HasCall(_A("tmain(bool,int)"), _A("A"), "value()")); + + save_puml( + config.output_directory() + "/" + diagram->name + ".puml", puml); + } + + { + auto j = generate_sequence_json(diagram, *model); + + using namespace json; + + save_json(config.output_directory() + "/" + diagram->name + ".json", j); + } +} \ No newline at end of file diff --git a/tests/t20031/.clang-uml b/tests/t20031/.clang-uml new file mode 100644 index 00000000..fc1a5533 --- /dev/null +++ b/tests/t20031/.clang-uml @@ -0,0 +1,20 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t20031_sequence: + type: sequence + glob: + - ../../tests/t20031/t20031.cc + include: + namespaces: + - clanguml::t20031 + exclude: + callee_types: + - constructor + - operator + - lambda + using_namespace: + - clanguml::t20031 + start_from: + - function: "clanguml::t20031::tmain(int)" + - function: "clanguml::t20031::tmain(bool,int)" \ No newline at end of file diff --git a/tests/t20031/t20031.cc b/tests/t20031/t20031.cc new file mode 100644 index 00000000..9e364ae8 --- /dev/null +++ b/tests/t20031/t20031.cc @@ -0,0 +1,62 @@ +#include + +namespace clanguml { +namespace t20031 { +int magic() { return 42; } +int zero() { return 0; } +int one() { return 1; } +int execute(std::function f) { return f(); } + +class A { +public: + A() { create(); } + + A(int v) { a_ = v; } + + A &operator=(const A &a) + { + set(a.a_); + return *this; + } + + A &operator+=(int a) + { + add(a); + return *this; + } + + int value() const { return a_; } + +private: + void create() { a_ = 0; } + + void add(int a) { a_ += a; } + void set(int a) { a_ = a; } + + int a_; +}; + +void tmain(int a) +{ + A an_a{magic()}; + an_a += 1; +} + +int tmain(bool f, int a) +{ + auto generate_zero = []() { return zero(); }; + auto an_a = A(); + auto an_b = A(); + + an_a += generate_zero(); + + // @todo #168 + an_a += execute([]() { return one(); }); + + an_b = an_a; + + return an_b.value(); +}; + +} +} \ No newline at end of file diff --git a/tests/t20031/test_case.h b/tests/t20031/test_case.h new file mode 100644 index 00000000..25e82b48 --- /dev/null +++ b/tests/t20031/test_case.h @@ -0,0 +1,69 @@ +/** + * tests/t20031/test_case.h + * + * Copyright (c) 2021-2023 Bartek Kryza + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +TEST_CASE("t20031", "[test-case][sequence]") +{ + auto [config, db] = load_config("t20031"); + + auto diagram = config.diagrams["t20031_sequence"]; + + REQUIRE(diagram->name == "t20031_sequence"); + + auto model = generate_sequence_diagram(*db, diagram); + + REQUIRE(model->name() == "t20031_sequence"); + + { + auto puml = generate_sequence_puml(diagram, *model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + + REQUIRE_THAT(puml, HasCall(_A("tmain(int)"), _A("magic()"), "")); + + REQUIRE_THAT(puml, !HasCall(_A("A"), _A("A"), "create()")); + REQUIRE_THAT( + puml, !HasCall(_A("tmain(int)"), _A("A"), "operator+=(int)")); + REQUIRE_THAT(puml, !HasCall(_A("A"), _A("A"), "add(int)")); + + REQUIRE_THAT(puml, !HasCall(_A("tmain(bool,int)"), _A("A"), "A()")); + REQUIRE_THAT( + puml, !HasCall(_A("tmain(bool,int)"), _A("A"), "operator+=(int)")); + REQUIRE_THAT(puml, !HasCall(_A("A"), _A("A"), "add(int)")); + REQUIRE_THAT(puml, + !HasCall(_A("tmain(bool,int)"), _A("A"), "operator=(const A &)")); + REQUIRE_THAT(puml, !HasCall(_A("A"), _A("A"), "set(int)")); + REQUIRE_THAT(puml, HasCall(_A("tmain(bool,int)"), _A("A"), "value()")); + REQUIRE_THAT(puml, + !HasCall(_A("tmain(bool,int)::(lambda " + "../../tests/t20031/t20031.cc:47:26)"), + _A("zero()"), "")); + + save_puml( + config.output_directory() + "/" + diagram->name + ".puml", puml); + } + + { + auto j = generate_sequence_json(diagram, *model); + + using namespace json; + + save_json(config.output_directory() + "/" + diagram->name + ".json", j); + } +} \ No newline at end of file diff --git a/tests/test_cases.cc b/tests/test_cases.cc index cfc56a8c..48ce7052 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -343,6 +343,8 @@ using namespace clanguml::test::matchers; #include "t20027/test_case.h" #include "t20028/test_case.h" #include "t20029/test_case.h" +#include "t20030/test_case.h" +#include "t20031/test_case.h" /// /// Package diagram tests diff --git a/tests/test_cases.h b/tests/test_cases.h index 1b825b1f..33e820c6 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -146,6 +146,7 @@ public: util::replace_all(m_message, "*", "\\*"); util::replace_all(m_message, "[", "\\["); util::replace_all(m_message, "]", "\\]"); + util::replace_all(m_message, "+", "\\+"); } bool match(T const &in) const override diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index 97c2b7ad..63415069 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -286,6 +286,12 @@ test_cases: - name: t20029 title: Combined feature sequence diagram test case description: + - name: t20030 + title: Constructor and operator call test case + description: + - name: t20031 + title: Callee type sequence diagram filter test case + description: Package diagrams: - name: t30001 title: Basic package diagram test case diff --git a/tests/test_config_data/filters.yml b/tests/test_config_data/filters.yml index ee179813..363ab5c9 100644 --- a/tests/test_config_data/filters.yml +++ b/tests/test_config_data/filters.yml @@ -87,4 +87,10 @@ diagrams: type: class include: dependants: - - r: 'A|B' \ No newline at end of file + - r: 'A|B' + callee_type_include_test: + type: sequence + include: + callee_types: + - function + - function_template \ No newline at end of file diff --git a/tests/test_filters.cc b/tests/test_filters.cc index 77e3a64f..5d42bd97 100644 --- a/tests/test_filters.cc +++ b/tests/test_filters.cc @@ -26,8 +26,8 @@ #include "common/model/diagram_filter.h" #include "common/model/source_file.h" #include "config/config.h" - #include "include_diagram/model/diagram.h" +#include "sequence_diagram/model/diagram.h" #include @@ -773,6 +773,57 @@ TEST_CASE("Test dependants regexp filter", "[unit-test]") CHECK(!filter.should_include(*diagram.find("C1"))); } +TEST_CASE("Test callee_types filter", "[unit-test]") +{ + using clanguml::common::to_id; + using clanguml::common::model::diagram_filter; + using clanguml::sequence_diagram::model::class_; + using clanguml::sequence_diagram::model::function; + using clanguml::sequence_diagram::model::function_template; + using clanguml::sequence_diagram::model::method; + using clanguml::sequence_diagram::model::participant; + + using namespace std::string_literals; + + auto cfg = clanguml::config::load("./test_config_data/filters.yml"); + + auto &config = *cfg.diagrams["callee_type_include_test"]; + clanguml::sequence_diagram::model::diagram diagram; + + std::unique_ptr p; + + p = std::make_unique(config.using_namespace()); + p->set_name("A"); + p->set_id(to_id("A"s)); + diagram.add_participant(std::move(p)); + + p = std::make_unique(config.using_namespace()); + p->set_name("A1"); + p->set_id(to_id("A1"s)); + diagram.add_participant(std::move(p)); + + p = std::make_unique(config.using_namespace()); + p->set_name("C1"); + p->set_id(to_id("C1"s)); + diagram.add_participant(std::move(p)); + + p = std::make_unique(config.using_namespace()); + p->set_name("M1"); + p->set_id(to_id("M1"s)); + dynamic_cast(p.get())->set_class_id(to_id("C1"s)); + diagram.add_participant(std::move(p)); + + diagram.set_complete(true); + diagram_filter filter(diagram, config); + + CHECK( + filter.should_include(*diagram.get_participant(to_id("A"s)))); + CHECK(filter.should_include( + *diagram.get_participant(to_id("A1"s)))); + CHECK(!filter.should_include( + *diagram.get_participant(to_id("M1"s)))); +} + /// /// Main test function /// diff --git a/uml/sequence/class_diagram_generator_sequence.yml b/uml/sequence/class_diagram_generator_sequence.yml index ffad3a03..6bb3c7a7 100644 --- a/uml/sequence/class_diagram_generator_sequence.yml +++ b/uml/sequence/class_diagram_generator_sequence.yml @@ -10,4 +10,4 @@ plantuml: before: - 'title clang-uml clanguml::class_diagram::generators::plantuml::generator sequence diagram' start_from: - - function: "clanguml::class_diagram::generators::plantuml::generator::generate(std::ostream &)" \ No newline at end of file + - function: "clanguml::class_diagram::generators::plantuml::generator::generate(std::ostream &) const" \ No newline at end of file diff --git a/uml/sequence/cli_handle_options_sequence.yml b/uml/sequence/cli_handle_options_sequence.yml index 8d146175..2aea8c7e 100644 --- a/uml/sequence/cli_handle_options_sequence.yml +++ b/uml/sequence/cli_handle_options_sequence.yml @@ -1,6 +1,7 @@ type: sequence combine_free_functions_into_file_participants: true generate_method_arguments: none +debug_mode: true glob: - src/cli/cli_handler.cc - src/config/config.cc @@ -14,6 +15,8 @@ exclude: - r: "clanguml::config::option.*" paths: - src/util/util.h + callee_types: + - operator using_namespace: - clanguml start_from: diff --git a/uml/sequence/diagram_generate_generic_sequence.yml b/uml/sequence/diagram_generate_generic_sequence.yml index c6950c7c..257c97b7 100644 --- a/uml/sequence/diagram_generate_generic_sequence.yml +++ b/uml/sequence/diagram_generate_generic_sequence.yml @@ -7,12 +7,8 @@ using_namespace: - clanguml include: namespaces: - - clang - clanguml::common::generators exclude: - namespaces: - - clanguml::model::tvl - - clanguml::decorators paths: - src/common/model/source_location.h start_from: