Thomas Jansen
2018-08-20 16:08:10 UTC
https://bugs.kde.org/show_bug.cgi?id=397664
Bug ID: 397664
Summary: C++ importer does not correctly detect generalization
in template classes
Product: umbrello
Version: Git
Platform: Other
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: NOR
Component: general
Assignee: umbrello-***@kde.org
Reporter: ***@mithi.net
Target Milestone: ---
Created attachment 114517
--> https://bugs.kde.org/attachment.cgi?id=114517&action=edit
Initial patch
Umbrello does not correctly parse existing C++ code that uses template classes
when trying to detect a generalization. I debugged the code and found that in
CppTree2Uml::parseBaseClause the baseName contains the template parameters as
part of the name which does not match the name of the class (that has only the
name of the class without any template parameters).
By stripping the template parameters from baseName the generalization is
detected.
The attached patch works for my needs and can be used as a starting point.
Test Cases:
Generalization detection works when not using template classes:
class u1 {
public:
u1() {}
~u1() {}
};
class u2: public u1 {
public:
u2() {}
~u2() {}
};
It does not work when using template classes:
template <class T>
class t1 {
public:
t1() {}
~t1() {}
};
template <class T>
class t2: public t1<T> {
public:
t2() {}
~t2() {}
};
Bug ID: 397664
Summary: C++ importer does not correctly detect generalization
in template classes
Product: umbrello
Version: Git
Platform: Other
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: NOR
Component: general
Assignee: umbrello-***@kde.org
Reporter: ***@mithi.net
Target Milestone: ---
Created attachment 114517
--> https://bugs.kde.org/attachment.cgi?id=114517&action=edit
Initial patch
Umbrello does not correctly parse existing C++ code that uses template classes
when trying to detect a generalization. I debugged the code and found that in
CppTree2Uml::parseBaseClause the baseName contains the template parameters as
part of the name which does not match the name of the class (that has only the
name of the class without any template parameters).
By stripping the template parameters from baseName the generalization is
detected.
The attached patch works for my needs and can be used as a starting point.
Test Cases:
Generalization detection works when not using template classes:
class u1 {
public:
u1() {}
~u1() {}
};
class u2: public u1 {
public:
u2() {}
~u2() {}
};
It does not work when using template classes:
template <class T>
class t1 {
public:
t1() {}
~t1() {}
};
template <class T>
class t2: public t1<T> {
public:
t2() {}
~t2() {}
};
--
You are receiving this mail because:
You are the assignee for the bug.
You are receiving this mail because:
You are the assignee for the bug.