diff --git a/demos/classchart.html b/demos/classchart.html
index 736c2e001..98162697e 100644
--- a/demos/classchart.html
+++ b/demos/classchart.html
@@ -43,7 +43,7 @@
}
class Zebra{
+bool is_wild
- +run()
+ +run(List~T~, List~OT~)
}
diff --git a/packages/mermaid/src/diagrams/class/classTypes.spec.ts b/packages/mermaid/src/diagrams/class/classTypes.spec.ts
index 7ae6ae831..4a3493e0a 100644
--- a/packages/mermaid/src/diagrams/class/classTypes.spec.ts
+++ b/packages/mermaid/src/diagrams/class/classTypes.spec.ts
@@ -377,6 +377,59 @@ describe('given text representing a method, ', function () {
});
});
+ describe('when method parameter contains two generic', function () {
+ it('should parse correctly', function () {
+ const str = `getTimes(List~T~, List~OT~)`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List');
+ });
+
+ it('should handle public visibility', function () {
+ const str = `+getTimes(List~T~, List~OT~)`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('+getTimes(List, List');
+ });
+
+ it('should handle private visibility', function () {
+ const str = `-getTimes(List~T~, List~OT~)`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('-getTimes(List, List');
+ });
+
+ it('should handle protected visibility', function () {
+ const str = `#getTimes(List~T~, List~OT~)`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('#getTimes(List, List');
+ });
+
+ it('should handle internal visibility', function () {
+ const str = `~getTimes(List~T~, List~OT~)`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('~getTimes(List, List');
+ });
+
+ it('should return correct css for static classifier', function () {
+ const str = `getTimes(List~T~, List~OT~)$`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List');
+ expect(classMember.getDisplayDetails().cssStyle).toBe(staticCssStyle);
+ });
+
+ it('should return correct css for abstract classifier', function () {
+ const str = `getTimes(List~T~, List~OT~)*`;
+
+ const classMember = new ClassMember(str, 'method');
+ expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List)');
+ expect(classMember.getDisplayDetails().cssStyle).toBe(abstractCssStyle);
+ });
+ });
+
describe('when method parameter is a nested generic', function () {
it('should parse correctly', function () {
const str = `getTimetableList(List~List~T~~)`;
diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts
index cf6f8cb32..d2792b3f4 100644
--- a/packages/mermaid/src/diagrams/common/common.ts
+++ b/packages/mermaid/src/diagrams/common/common.ts
@@ -189,7 +189,7 @@ export const parseGenericTypes = function (text: string): string {
do {
cleanedText = newCleanedText;
- newCleanedText = cleanedText.replace(/~([^:;]+)~/, '<$1>');
+ newCleanedText = cleanedText.replace(/~([^\s:;]+)~/, '<$1>');
} while (newCleanedText != cleanedText);
return parseGenericTypes(newCleanedText);