ts2famix 1.4.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +30 -61
  3. package/dist/analyze.js +4 -2
  4. package/dist/analyze_functions/process_functions.js +285 -131
  5. package/dist/famix_functions/EntityDictionary.js +864 -231
  6. package/dist/famix_functions/helpers_creation.js +61 -10
  7. package/dist/fqn.js +160 -111
  8. package/dist/lib/famix/famix_JSON_exporter.js +55 -0
  9. package/dist/lib/famix/famix_base_element.js +18 -0
  10. package/dist/lib/famix/famix_repository.js +224 -0
  11. package/dist/lib/famix/{src/index.js → index.js} +1 -0
  12. package/dist/lib/famix/model/famix/access.js +40 -0
  13. package/dist/lib/famix/model/famix/accessor.js +17 -0
  14. package/dist/lib/famix/model/famix/alias.js +33 -0
  15. package/dist/lib/famix/model/famix/arrow_function.js +17 -0
  16. package/dist/lib/famix/model/famix/behavioral_entity.js +79 -0
  17. package/dist/lib/famix/model/famix/class.js +71 -0
  18. package/dist/lib/famix/model/famix/comment.js +39 -0
  19. package/dist/lib/famix/model/famix/concretisation.js +31 -0
  20. package/dist/lib/famix/model/famix/container_entity.js +126 -0
  21. package/dist/lib/famix/model/famix/decorator.js +32 -0
  22. package/dist/lib/famix/model/famix/entity.js +17 -0
  23. package/dist/lib/famix/model/famix/enum.js +31 -0
  24. package/dist/lib/famix/model/famix/enum_value.js +25 -0
  25. package/dist/lib/famix/model/famix/function.js +17 -0
  26. package/dist/lib/famix/model/famix/import_clause.js +41 -0
  27. package/dist/lib/famix/model/famix/index.js +86 -0
  28. package/dist/lib/famix/model/famix/indexed_file_anchor.js +38 -0
  29. package/dist/lib/famix/model/famix/inheritance.js +33 -0
  30. package/dist/lib/famix/model/famix/interface.js +64 -0
  31. package/dist/lib/famix/model/famix/invocation.js +54 -0
  32. package/dist/lib/famix/model/famix/method.js +67 -0
  33. package/dist/lib/famix/model/famix/module.js +60 -0
  34. package/dist/lib/famix/model/famix/named_entity.js +78 -0
  35. package/dist/lib/famix/model/famix/parameter.js +25 -0
  36. package/dist/lib/famix/model/famix/parameter_concretisation.js +44 -0
  37. package/dist/lib/famix/model/famix/parameter_type.js +45 -0
  38. package/dist/lib/famix/model/famix/parametric_arrow_function.js +31 -0
  39. package/dist/lib/famix/model/famix/parametric_class.js +44 -0
  40. package/dist/lib/famix/model/famix/parametric_function.js +31 -0
  41. package/dist/lib/famix/model/famix/parametric_interface.js +44 -0
  42. package/dist/lib/famix/model/famix/parametric_method.js +31 -0
  43. package/dist/lib/famix/model/famix/primitive_type.js +17 -0
  44. package/dist/lib/famix/model/famix/property.js +73 -0
  45. package/dist/lib/famix/model/famix/reference.js +33 -0
  46. package/dist/lib/famix/model/famix/scoping_entity.js +36 -0
  47. package/dist/lib/famix/model/famix/script_entity.js +29 -0
  48. package/dist/lib/famix/model/famix/source_anchor.js +27 -0
  49. package/dist/lib/famix/model/famix/source_language.js +35 -0
  50. package/dist/lib/famix/model/famix/sourced_entity.js +60 -0
  51. package/dist/lib/famix/model/famix/structural_entity.js +39 -0
  52. package/dist/lib/famix/model/famix/type.js +73 -0
  53. package/dist/lib/famix/model/famix/variable.js +24 -0
  54. package/dist/lib/ts-complex/cyclomatic-service.js +3 -3
  55. package/dist/refactorer/refactor-getter-setter.js +142 -0
  56. package/dist/ts2famix-cli-wrapper.js +42 -0
  57. package/dist/ts2famix-cli.js +8 -1
  58. package/dist/ts2famix-tsconfig.js +1 -0
  59. package/doc-uml/famix-typescript-model.puml +608 -0
  60. package/doc-uml/famix-typescript-model.svg +1 -0
  61. package/jest.config.json +2 -1
  62. package/package.json +13 -12
  63. package/src/analyze.ts +24 -23
  64. package/src/analyze_functions/process_functions.ts +310 -129
  65. package/src/famix_functions/EntityDictionary.ts +949 -271
  66. package/src/famix_functions/helpers_creation.ts +64 -6
  67. package/src/fqn.ts +169 -96
  68. package/{dist/lib/famix/src/famix_JSON_exporter.js → src/lib/famix/famix_JSON_exporter.ts} +16 -14
  69. package/src/lib/famix/famix_base_element.ts +22 -0
  70. package/{dist/lib/famix/src/famix_repository.js → src/lib/famix/famix_repository.ts} +96 -75
  71. package/src/lib/famix/model/famix/access.ts +50 -0
  72. package/src/lib/famix/model/famix/alias.ts +39 -0
  73. package/src/lib/famix/{src/model/famix/implicit_variable.ts → model/famix/arrow_function.ts} +3 -3
  74. package/src/lib/famix/model/famix/behavioral_entity.ts +97 -0
  75. package/src/lib/famix/model/famix/class.ts +85 -0
  76. package/src/lib/famix/model/famix/comment.ts +47 -0
  77. package/src/lib/famix/model/famix/concretisation.ts +40 -0
  78. package/src/lib/famix/model/famix/container_entity.ts +160 -0
  79. package/src/lib/famix/model/famix/decorator.ts +37 -0
  80. package/src/lib/famix/model/famix/enum.ts +30 -0
  81. package/src/lib/famix/model/famix/enum_value.ts +28 -0
  82. package/src/lib/famix/model/famix/import_clause.ts +51 -0
  83. package/src/lib/famix/{src/model → model}/famix/index.ts +8 -7
  84. package/src/lib/famix/model/famix/indexed_file_anchor.ts +46 -0
  85. package/src/lib/famix/model/famix/inheritance.ts +40 -0
  86. package/src/lib/famix/model/famix/interface.ts +75 -0
  87. package/src/lib/famix/model/famix/invocation.ts +65 -0
  88. package/src/lib/famix/model/famix/method.ts +89 -0
  89. package/src/lib/famix/model/famix/module.ts +71 -0
  90. package/src/lib/famix/model/famix/named_entity.ts +95 -0
  91. package/src/lib/famix/{src/model → model}/famix/parameter.ts +11 -12
  92. package/src/lib/famix/model/famix/parameter_concretisation.ts +51 -0
  93. package/src/lib/famix/model/famix/parameter_type.ts +58 -0
  94. package/src/lib/famix/model/famix/parametric_arrow_function.ts +32 -0
  95. package/src/lib/famix/model/famix/parametric_class.ts +49 -0
  96. package/src/lib/famix/model/famix/parametric_function.ts +32 -0
  97. package/src/lib/famix/model/famix/parametric_interface.ts +49 -0
  98. package/src/lib/famix/model/famix/parametric_method.ts +32 -0
  99. package/src/lib/famix/model/famix/primitive_type.ts +15 -0
  100. package/src/lib/famix/model/famix/property.ts +94 -0
  101. package/src/lib/famix/model/famix/reference.ts +40 -0
  102. package/src/lib/famix/model/famix/scoping_entity.ts +35 -0
  103. package/src/lib/famix/model/famix/script_entity.ts +34 -0
  104. package/src/lib/famix/model/famix/source_anchor.ts +30 -0
  105. package/src/lib/famix/model/famix/source_language.ts +35 -0
  106. package/src/lib/famix/model/famix/sourced_entity.ts +70 -0
  107. package/src/lib/famix/model/famix/structural_entity.ts +43 -0
  108. package/src/lib/famix/model/famix/type.ts +87 -0
  109. package/src/lib/famix/model/famix/variable.ts +27 -0
  110. package/src/lib/famix/package.json +1 -1
  111. package/src/lib/ts-complex/cyclomatic-service.ts +10 -10
  112. package/src/refactorer/refactor-getter-setter.ts +140 -0
  113. package/src/ts2famix-cli-wrapper.ts +21 -0
  114. package/src/ts2famix-cli.ts +8 -2
  115. package/tsconfig.check-tests.json +14 -0
  116. package/tsconfig.json +71 -69
  117. package/dist/famix2puml.js +0 -125
  118. package/dist/lib/famix/src/famix_base_element.js +0 -17
  119. package/dist/lib/famix/src/model/famix/access.js +0 -39
  120. package/dist/lib/famix/src/model/famix/accessor.js +0 -16
  121. package/dist/lib/famix/src/model/famix/alias.js +0 -32
  122. package/dist/lib/famix/src/model/famix/association.js +0 -36
  123. package/dist/lib/famix/src/model/famix/behavioral_entity.js +0 -81
  124. package/dist/lib/famix/src/model/famix/class.js +0 -70
  125. package/dist/lib/famix/src/model/famix/comment.js +0 -38
  126. package/dist/lib/famix/src/model/famix/container_entity.js +0 -125
  127. package/dist/lib/famix/src/model/famix/decorator.js +0 -31
  128. package/dist/lib/famix/src/model/famix/entity.js +0 -16
  129. package/dist/lib/famix/src/model/famix/enum.js +0 -30
  130. package/dist/lib/famix/src/model/famix/enum_value.js +0 -24
  131. package/dist/lib/famix/src/model/famix/function.js +0 -16
  132. package/dist/lib/famix/src/model/famix/implicit_variable.js +0 -16
  133. package/dist/lib/famix/src/model/famix/import_clause.js +0 -39
  134. package/dist/lib/famix/src/model/famix/index.js +0 -83
  135. package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +0 -51
  136. package/dist/lib/famix/src/model/famix/inheritance.js +0 -32
  137. package/dist/lib/famix/src/model/famix/interface.js +0 -63
  138. package/dist/lib/famix/src/model/famix/invocation.js +0 -53
  139. package/dist/lib/famix/src/model/famix/method.js +0 -66
  140. package/dist/lib/famix/src/model/famix/module.js +0 -31
  141. package/dist/lib/famix/src/model/famix/named_entity.js +0 -77
  142. package/dist/lib/famix/src/model/famix/namespace.js +0 -24
  143. package/dist/lib/famix/src/model/famix/parameter.js +0 -24
  144. package/dist/lib/famix/src/model/famix/parameter_type.js +0 -24
  145. package/dist/lib/famix/src/model/famix/parameterizable_class.js +0 -30
  146. package/dist/lib/famix/src/model/famix/parameterizable_interface.js +0 -30
  147. package/dist/lib/famix/src/model/famix/parameterized_type.js +0 -36
  148. package/dist/lib/famix/src/model/famix/primitive_type.js +0 -16
  149. package/dist/lib/famix/src/model/famix/property.js +0 -44
  150. package/dist/lib/famix/src/model/famix/reference.js +0 -32
  151. package/dist/lib/famix/src/model/famix/scoping_entity.js +0 -35
  152. package/dist/lib/famix/src/model/famix/script_entity.js +0 -30
  153. package/dist/lib/famix/src/model/famix/source_anchor.js +0 -26
  154. package/dist/lib/famix/src/model/famix/source_language.js +0 -35
  155. package/dist/lib/famix/src/model/famix/sourced_entity.js +0 -59
  156. package/dist/lib/famix/src/model/famix/structural_entity.js +0 -38
  157. package/dist/lib/famix/src/model/famix/text_anchor.js +0 -37
  158. package/dist/lib/famix/src/model/famix/type.js +0 -71
  159. package/dist/lib/famix/src/model/famix/variable.js +0 -23
  160. package/doc-uml/metamodel-full.svg +0 -1
  161. package/doc-uml/metamodel.svg +0 -1
  162. package/jest.config-old.ts +0 -199
  163. package/plantuml.jar +0 -0
  164. package/src/famix2puml.ts +0 -119
  165. package/src/lib/famix/package-lock.json +0 -301
  166. package/src/lib/famix/readme.md +0 -5
  167. package/src/lib/famix/src/famix_JSON_exporter.ts +0 -56
  168. package/src/lib/famix/src/famix_base_element.ts +0 -22
  169. package/src/lib/famix/src/famix_repository.ts +0 -243
  170. package/src/lib/famix/src/model/famix/access.ts +0 -53
  171. package/src/lib/famix/src/model/famix/alias.ts +0 -41
  172. package/src/lib/famix/src/model/famix/association.ts +0 -44
  173. package/src/lib/famix/src/model/famix/behavioral_entity.ts +0 -107
  174. package/src/lib/famix/src/model/famix/class.ts +0 -86
  175. package/src/lib/famix/src/model/famix/comment.ts +0 -50
  176. package/src/lib/famix/src/model/famix/container_entity.ts +0 -165
  177. package/src/lib/famix/src/model/famix/decorator.ts +0 -39
  178. package/src/lib/famix/src/model/famix/enum.ts +0 -31
  179. package/src/lib/famix/src/model/famix/enum_value.ts +0 -29
  180. package/src/lib/famix/src/model/famix/import_clause.ts +0 -53
  181. package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +0 -71
  182. package/src/lib/famix/src/model/famix/inheritance.ts +0 -42
  183. package/src/lib/famix/src/model/famix/interface.ts +0 -75
  184. package/src/lib/famix/src/model/famix/invocation.ts +0 -68
  185. package/src/lib/famix/src/model/famix/method.ts +0 -96
  186. package/src/lib/famix/src/model/famix/module.ts +0 -31
  187. package/src/lib/famix/src/model/famix/named_entity.ts +0 -98
  188. package/src/lib/famix/src/model/famix/namespace.ts +0 -28
  189. package/src/lib/famix/src/model/famix/parameter_type.ts +0 -33
  190. package/src/lib/famix/src/model/famix/parameterizable_class.ts +0 -31
  191. package/src/lib/famix/src/model/famix/parameterizable_interface.ts +0 -31
  192. package/src/lib/famix/src/model/famix/parameterized_type.ts +0 -40
  193. package/src/lib/famix/src/model/famix/primitive_type.ts +0 -15
  194. package/src/lib/famix/src/model/famix/property.ts +0 -54
  195. package/src/lib/famix/src/model/famix/reference.ts +0 -42
  196. package/src/lib/famix/src/model/famix/scoping_entity.ts +0 -35
  197. package/src/lib/famix/src/model/famix/script_entity.ts +0 -38
  198. package/src/lib/famix/src/model/famix/source_anchor.ts +0 -31
  199. package/src/lib/famix/src/model/famix/source_language.ts +0 -37
  200. package/src/lib/famix/src/model/famix/sourced_entity.ts +0 -73
  201. package/src/lib/famix/src/model/famix/structural_entity.ts +0 -44
  202. package/src/lib/famix/src/model/famix/text_anchor.ts +0 -49
  203. package/src/lib/famix/src/model/famix/type.ts +0 -88
  204. package/src/lib/famix/src/model/famix/variable.ts +0 -28
  205. package/src/lib/famix/tsconfig.json +0 -27
  206. package/src/lib/famix/tslint.json +0 -15
  207. /package/src/lib/famix/{src/index.ts → index.ts} +0 -0
  208. /package/src/lib/famix/{src/model → model}/famix/accessor.ts +0 -0
  209. /package/src/lib/famix/{src/model → model}/famix/entity.ts +0 -0
  210. /package/src/lib/famix/{src/model → model}/famix/function.ts +0 -0
@@ -0,0 +1,89 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { BehavioralEntity } from "./behavioral_entity";
3
+ import { Class } from "./class";
4
+ import { Interface } from "./interface";
5
+
6
+ export class Method extends BehavioralEntity {
7
+
8
+ private _parentEntity!: Class | Interface;
9
+ private _kind!: string;
10
+ private _isAbstract!: boolean;
11
+ private _isClassSide!: boolean;
12
+ private _isPrivate!: boolean;
13
+ private _isPublic!: boolean;
14
+ private _isProtected!: boolean;
15
+
16
+ public getJSON(): string {
17
+ const json: FamixJSONExporter = new FamixJSONExporter("Method", this);
18
+ this.addPropertiesToExporter(json);
19
+ return json.getJSON();
20
+ }
21
+
22
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
23
+ super.addPropertiesToExporter(exporter);
24
+ exporter.addProperty("parentType", this.parentEntity);
25
+ exporter.addProperty("kind", this.kind);
26
+ exporter.addProperty("isAbstract", this.isAbstract);
27
+ exporter.addProperty("isClassSide", this.isClassSide);
28
+ exporter.addProperty("isPrivate", this.isPrivate);
29
+ exporter.addProperty("isPublic", this.isPublic);
30
+ exporter.addProperty("isProtected", this.isProtected);
31
+ }
32
+
33
+ get parentEntity() {
34
+ return this._parentEntity;
35
+ }
36
+
37
+ set parentEntity(parentEntity: Class | Interface) {
38
+ this._parentEntity = parentEntity;
39
+ parentEntity.addMethod(this);
40
+ }
41
+
42
+ get kind() {
43
+ return this._kind;
44
+ }
45
+
46
+ set kind(kind: string) {
47
+ this._kind = kind;
48
+ }
49
+
50
+ get isAbstract() {
51
+ return this._isAbstract;
52
+ }
53
+
54
+ set isAbstract(isAbstract: boolean) {
55
+ this._isAbstract = isAbstract;
56
+ }
57
+
58
+ get isClassSide() {
59
+ return this._isClassSide;
60
+ }
61
+
62
+ set isClassSide(isClassSide: boolean) {
63
+ this._isClassSide = isClassSide;
64
+ }
65
+
66
+ get isPrivate() {
67
+ return this._isPrivate;
68
+ }
69
+
70
+ set isPrivate(isPrivate: boolean) {
71
+ this._isPrivate = isPrivate;
72
+ }
73
+
74
+ get isPublic() {
75
+ return this._isPublic;
76
+ }
77
+
78
+ set isPublic(isPublic: boolean) {
79
+ this._isPublic = isPublic;
80
+ }
81
+
82
+ get isProtected() {
83
+ return this._isProtected;
84
+ }
85
+
86
+ set isProtected(isProtected: boolean) {
87
+ this._isProtected = isProtected;
88
+ }
89
+ }
@@ -0,0 +1,71 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { ImportClause } from "./import_clause";
3
+ import { ScopingEntity } from "./scoping_entity";
4
+ import { ScriptEntity } from "./script_entity";
5
+
6
+ export class Module extends ScriptEntity {
7
+
8
+ public get isAmbient() {
9
+ return this._isAmbient;
10
+ }
11
+
12
+ public set isAmbient(value: boolean) {
13
+ this._isAmbient = value;
14
+ }
15
+
16
+ private _isAmbient: boolean = false;
17
+
18
+ public get isNamespace() {
19
+ return this._isNamespace;
20
+ }
21
+
22
+ public set isNamespace(value: boolean) {
23
+ this._isNamespace = value;
24
+ }
25
+ private _isNamespace: boolean = false;
26
+
27
+ public get isModule() {
28
+ return this._isModule;
29
+ }
30
+
31
+ public set isModule(value: boolean) {
32
+ this._isModule = value;
33
+ }
34
+
35
+ private _isModule: boolean = true;
36
+
37
+ private _parentScope!: ScopingEntity;
38
+ // incomingImports are in NamedEntity
39
+ private _outgoingImports: Set<ImportClause> = new Set();
40
+
41
+ addOutgoingImport(importClause: ImportClause) {
42
+ if (!this._outgoingImports.has(importClause)) {
43
+ this._outgoingImports.add(importClause);
44
+ importClause.importingEntity = this; // opposite
45
+ }
46
+ }
47
+
48
+ public getJSON(): string {
49
+ const json: FamixJSONExporter = new FamixJSONExporter("Module", this);
50
+ this.addPropertiesToExporter(json);
51
+ return json.getJSON();
52
+ }
53
+
54
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
55
+ super.addPropertiesToExporter(exporter);
56
+ exporter.addProperty("outgoingImports", this.outgoingImports);
57
+ }
58
+
59
+ get parentScope() {
60
+ return this._parentScope;
61
+ }
62
+
63
+ set parentScope(parentScope: ScopingEntity) {
64
+ this._parentScope = parentScope;
65
+ parentScope.addModule(this);
66
+ }
67
+
68
+ get outgoingImports() {
69
+ return this._outgoingImports;
70
+ }
71
+ }
@@ -0,0 +1,95 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { SourcedEntity } from "./sourced_entity";
3
+ import { Invocation } from "./invocation";
4
+ import { ImportClause } from "./import_clause";
5
+ import { Alias } from "./alias";
6
+ import { Decorator } from "./decorator";
7
+
8
+ export class NamedEntity extends SourcedEntity {
9
+
10
+ private _fullyQualifiedName!: string;
11
+ private _receivedInvocations: Set<Invocation> = new Set();
12
+
13
+ public addReceivedInvocation(receivedInvocation: Invocation): void {
14
+ if (!this._receivedInvocations.has(receivedInvocation)) {
15
+ this._receivedInvocations.add(receivedInvocation);
16
+ receivedInvocation.receiver = this;
17
+ }
18
+ }
19
+
20
+ private _incomingImports: Set<ImportClause> = new Set();
21
+
22
+ public addIncomingImport(anImport: ImportClause): void {
23
+ if (!this._incomingImports.has(anImport)) {
24
+ this._incomingImports.add(anImport);
25
+ anImport.importedEntity = this; // opposite
26
+ }
27
+ }
28
+
29
+ private _name!: string;
30
+ private _aliases: Set<Alias> = new Set();
31
+
32
+ public addAlias(alias: Alias): void {
33
+ if (!this._aliases.has(alias)) {
34
+ this._aliases.add(alias);
35
+ alias.parentEntity = this;
36
+ }
37
+ }
38
+
39
+ private _decorators: Set<Decorator> = new Set();
40
+
41
+ public addDecorator(decorator: Decorator): void {
42
+ if (!this._decorators.has(decorator)) {
43
+ this._decorators.add(decorator);
44
+ decorator.decoratedEntity = this;
45
+ }
46
+ }
47
+
48
+ public getJSON(): string {
49
+ const json: FamixJSONExporter = new FamixJSONExporter("NamedEntity", this);
50
+ this.addPropertiesToExporter(json);
51
+ return json.getJSON();
52
+ }
53
+
54
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
55
+ super.addPropertiesToExporter(exporter);
56
+ // exporter.addProperty("fullyQualifiedName", this.getFullyQualifiedName());
57
+ // exporter.addProperty("incomingInvocations", this.getReceivedInvocations());
58
+ exporter.addProperty("incomingImports", this.incomingImports);
59
+ exporter.addProperty("name", this.name);
60
+ // exporter.addProperty("aliases", this.getAliases()); /* since these generate Unknown property messages */
61
+ exporter.addProperty("decorators", this.decorators);
62
+ }
63
+
64
+ get fullyQualifiedName() {
65
+ return this._fullyQualifiedName;
66
+ }
67
+
68
+ set fullyQualifiedName(fullyQualifiedName: string) {
69
+ this._fullyQualifiedName = fullyQualifiedName;
70
+ }
71
+
72
+ get receivedInvocations() {
73
+ return this._receivedInvocations;
74
+ }
75
+
76
+ get incomingImports() {
77
+ return this._incomingImports;
78
+ }
79
+
80
+ get name() {
81
+ return this._name;
82
+ }
83
+
84
+ set name(name: string) {
85
+ this._name = name;
86
+ }
87
+
88
+ get aliases() {
89
+ return this._aliases;
90
+ }
91
+
92
+ get decorators() {
93
+ return this._decorators;
94
+ }
95
+ }
@@ -4,17 +4,7 @@ import { BehavioralEntity } from "./behavioral_entity";
4
4
 
5
5
  export class Parameter extends StructuralEntity {
6
6
 
7
- private parentEntity: BehavioralEntity;
8
-
9
- public getParentEntity(): BehavioralEntity {
10
- return this.parentEntity;
11
- }
12
-
13
- public setParentEntity(parentEntity: BehavioralEntity): void {
14
- this.parentEntity = parentEntity;
15
- parentEntity.addParameter(this);
16
- }
17
-
7
+ private _parentEntity!: BehavioralEntity;
18
8
 
19
9
  public getJSON(): string {
20
10
  const json: FamixJSONExporter = new FamixJSONExporter("Parameter", this);
@@ -24,6 +14,15 @@ export class Parameter extends StructuralEntity {
24
14
 
25
15
  public addPropertiesToExporter(exporter: FamixJSONExporter): void {
26
16
  super.addPropertiesToExporter(exporter);
27
- exporter.addProperty("parentEntity", this.getParentEntity());
17
+ exporter.addProperty("parentBehaviouralEntity", this.parentEntity);
28
18
  }
19
+
20
+ get parentEntity() {
21
+ return this._parentEntity;
22
+ }
23
+
24
+ set parentEntity(parentEntity: BehavioralEntity) {
25
+ this._parentEntity = parentEntity;
26
+ parentEntity.addParameter(this);
27
+ }
29
28
  }
@@ -0,0 +1,51 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Concretisation } from "./concretisation";
3
+ import { Entity } from "./entity";
4
+ import { ParameterType } from "./parameter_type";
5
+ import { PrimitiveType } from "./primitive_type";
6
+
7
+ export class ParameterConcretisation extends Entity {
8
+
9
+ private _genericParameter!: ParameterType;
10
+ private _concreteParameter!: PrimitiveType;
11
+ private _concretisations: Set<Concretisation> = new Set();
12
+
13
+ public addConcretisation(concretisation: Concretisation): void {
14
+ if (!this._concretisations.has(concretisation)) {
15
+ this._concretisations.add(concretisation);
16
+ }
17
+ }
18
+
19
+ public getJSON(): string {
20
+ const json: FamixJSONExporter = new FamixJSONExporter("ParameterConcretisation", this);
21
+ this.addPropertiesToExporter(json);
22
+ return json.getJSON();
23
+ }
24
+
25
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
26
+ super.addPropertiesToExporter(exporter);
27
+ exporter.addProperty("genericEntity", this.genericParameter);
28
+ exporter.addProperty("concreteEntity", this.concreteParameter);
29
+ exporter.addProperty("concretisations", this.concretisations);
30
+ }
31
+
32
+ get genericParameter() {
33
+ return this._genericParameter;
34
+ }
35
+
36
+ set genericParameter(genericEntity: ParameterType) {
37
+ this._genericParameter = genericEntity;
38
+ }
39
+
40
+ get concreteParameter() {
41
+ return this._concreteParameter;
42
+ }
43
+
44
+ set concreteParameter(concreteParameter: PrimitiveType) {
45
+ this._concreteParameter = concreteParameter;
46
+ }
47
+
48
+ get concretisations() {
49
+ return this._concretisations;
50
+ }
51
+ }
@@ -0,0 +1,58 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Type } from "./type";
3
+ import { ParametricClass } from "./parametric_class";
4
+ import { ParametricInterface } from "./parametric_interface";
5
+ import { Method } from "./method";
6
+ import { Function as FamixFunction } from "./function";
7
+ import { Accessor } from "./accessor";
8
+ import { ParametricMethod } from "./parametric_method";
9
+ import { ParametricFunction } from "./parametric_function";
10
+ import { ArrowFunction } from "./arrow_function";
11
+ import { ParametricArrowFunction } from "./parametric_arrow_function";
12
+
13
+ export class ParameterType extends Type {
14
+
15
+ private _parentGeneric!: ParametricClass | ParametricInterface | Method | ParametricMethod | Accessor | FamixFunction | ParametricFunction | ArrowFunction | ParametricArrowFunction;
16
+ private _baseType!: Type;
17
+ private _arguments: Set<Type> = new Set();
18
+
19
+ public addArgument(argument: Type): void {
20
+ if (!this._arguments.has(argument)) {
21
+ this._arguments.add(argument);
22
+ }
23
+ }
24
+
25
+ public getJSON(): string {
26
+ const json: FamixJSONExporter = new FamixJSONExporter("ParameterType", this);
27
+ this.addPropertiesToExporter(json);
28
+ return json.getJSON();
29
+ }
30
+
31
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
32
+ super.addPropertiesToExporter(exporter);
33
+ exporter.addProperty("parentGeneric", this.parentGeneric);
34
+ exporter.addProperty("baseType", this.baseType);
35
+ exporter.addProperty("arguments", this.arguments);
36
+ }
37
+
38
+ get parentGeneric() {
39
+ return this._parentGeneric;
40
+ }
41
+
42
+ set parentGeneric(parentGeneric: ParametricClass | ParametricInterface | Method | ParametricMethod | Accessor | FamixFunction | ParametricFunction | ArrowFunction | ParametricArrowFunction) {
43
+ this._parentGeneric = parentGeneric;
44
+ parentGeneric.addGenericParameter(this);
45
+ }
46
+
47
+ get baseType() {
48
+ return this._baseType;
49
+ }
50
+
51
+ set baseType(baseType: Type) {
52
+ this._baseType = baseType;
53
+ }
54
+
55
+ get arguments() {
56
+ return this._arguments;
57
+ }
58
+ }
@@ -0,0 +1,32 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { ArrowFunction } from "./arrow_function";
3
+ import { Class } from "./class";
4
+ import { Interface } from "./interface";
5
+ import { PrimitiveType } from "./primitive_type";
6
+
7
+ export class ParametricArrowFunction extends ArrowFunction {
8
+
9
+ private _concreteParameters: Set<PrimitiveType | Class | Interface> = new Set();
10
+
11
+ public addConcreteParameter(concreteParameter: PrimitiveType | Class | Interface): void {
12
+ if (!this._concreteParameters.has(concreteParameter)) {
13
+ this._concreteParameters.add(concreteParameter);
14
+ }
15
+ }
16
+
17
+ public getJSON(): string {
18
+ const json: FamixJSONExporter = new FamixJSONExporter("ParametricArrowFunction", this);
19
+ this.addPropertiesToExporter(json);
20
+ return json.getJSON();
21
+ }
22
+
23
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
24
+ super.addPropertiesToExporter(exporter);
25
+ exporter.addProperty("genericParameters", this.genericParameters);
26
+ exporter.addProperty("concreteParameters", this.concreteParameters);
27
+ }
28
+
29
+ get concreteParameters() {
30
+ return this._concreteParameters;
31
+ }
32
+ }
@@ -0,0 +1,49 @@
1
+ import { Interface } from "./interface";
2
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
3
+ import { Class } from "./class";
4
+ import { ParameterType } from "./parameter_type";
5
+ import { PrimitiveType } from "./primitive_type";
6
+
7
+ export class ParametricClass extends Class {
8
+
9
+ private _genericParameters: Set<ParameterType> = new Set();
10
+
11
+ public addGenericParameter(genericParameter: ParameterType): void {
12
+ if (!this._genericParameters.has(genericParameter)) {
13
+ this._genericParameters.add(genericParameter);
14
+ genericParameter.parentGeneric = this;
15
+ }
16
+ }
17
+
18
+ clearGenericParameters(): void {
19
+ this._genericParameters.clear();
20
+ }
21
+
22
+ private _concreteParameters: Set<PrimitiveType | Class | Interface> = new Set();
23
+
24
+ public addConcreteParameter(concreteParameter: PrimitiveType | Class | Interface): void {
25
+ if (!this._concreteParameters.has(concreteParameter)) {
26
+ this._concreteParameters.add(concreteParameter);
27
+ }
28
+ }
29
+
30
+ public getJSON(): string {
31
+ const json: FamixJSONExporter = new FamixJSONExporter("ParametricClass", this);
32
+ this.addPropertiesToExporter(json);
33
+ return json.getJSON();
34
+ }
35
+
36
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
37
+ super.addPropertiesToExporter(exporter);
38
+ exporter.addProperty("genericParameters", this.genericParameters);
39
+ exporter.addProperty("concreteParameters", this.concreteParameters);
40
+ }
41
+
42
+ get genericParameters(): Set<ParameterType> {
43
+ return this._genericParameters;
44
+ }
45
+
46
+ get concreteParameters(): Set<PrimitiveType | Class | Interface> {
47
+ return this._concreteParameters;
48
+ }
49
+ }
@@ -0,0 +1,32 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Class } from "./class";
3
+ import { Function } from "./function";
4
+ import { Interface } from "./interface";
5
+ import { PrimitiveType } from "./primitive_type";
6
+
7
+ export class ParametricFunction extends Function {
8
+
9
+ private _concreteParameters: Set<PrimitiveType | Class | Interface> = new Set();
10
+
11
+ public addConcreteParameter(concreteParameter: PrimitiveType | Class | Interface): void {
12
+ if (!this._concreteParameters.has(concreteParameter)) {
13
+ this._concreteParameters.add(concreteParameter);
14
+ }
15
+ }
16
+
17
+ public getJSON(): string {
18
+ const json: FamixJSONExporter = new FamixJSONExporter("ParametricFunction", this);
19
+ this.addPropertiesToExporter(json);
20
+ return json.getJSON();
21
+ }
22
+
23
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
24
+ super.addPropertiesToExporter(exporter);
25
+ exporter.addProperty("genericParameters", this.genericParameters);
26
+ exporter.addProperty("concreteParameters", this.concreteParameters);
27
+ }
28
+
29
+ get concreteParameters(): Set<PrimitiveType | Class | Interface> {
30
+ return this._concreteParameters;
31
+ }
32
+ }
@@ -0,0 +1,49 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Class } from "./class";
3
+ import { Interface } from "./interface";
4
+ import { ParameterType } from "./parameter_type";
5
+ import { PrimitiveType } from "./primitive_type";
6
+
7
+ export class ParametricInterface extends Interface {
8
+
9
+ private _genericParameters: Set<ParameterType> = new Set();
10
+
11
+ public addGenericParameter(genericParameter: ParameterType): void {
12
+ if (!this._genericParameters.has(genericParameter)) {
13
+ this._genericParameters.add(genericParameter);
14
+ genericParameter.parentGeneric = this;
15
+ }
16
+ }
17
+
18
+ clearGenericParameters(): void {
19
+ this._genericParameters.clear();
20
+ }
21
+
22
+ private _concreteParameters: Set<PrimitiveType | Class | Interface> = new Set();
23
+
24
+ public addConcreteParameter(concreteParameter: PrimitiveType | Class | Interface): void {
25
+ if (!this._concreteParameters.has(concreteParameter)) {
26
+ this._concreteParameters.add(concreteParameter);
27
+ }
28
+ }
29
+
30
+ public getJSON(): string {
31
+ const json: FamixJSONExporter = new FamixJSONExporter("ParametricInterface", this);
32
+ this.addPropertiesToExporter(json);
33
+ return json.getJSON();
34
+ }
35
+
36
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
37
+ super.addPropertiesToExporter(exporter);
38
+ exporter.addProperty("genericParameters", this.genericParameters);
39
+ exporter.addProperty("concreteParameters", this.concreteParameters);
40
+ }
41
+
42
+ get genericParameters(): Set<ParameterType> {
43
+ return this._genericParameters;
44
+ }
45
+
46
+ get concreteParameters(): Set<PrimitiveType | Class | Interface> {
47
+ return this._concreteParameters;
48
+ }
49
+ }
@@ -0,0 +1,32 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Class } from "./class";
3
+ import { Interface } from "./interface";
4
+ import { Method } from "./method";
5
+ import { PrimitiveType } from "./primitive_type";
6
+
7
+ export class ParametricMethod extends Method {
8
+
9
+ private _concreteParameters: Set<PrimitiveType | Class | Interface> = new Set();
10
+
11
+ public addConcreteParameter(concreteParameter: PrimitiveType | Class | Interface): void {
12
+ if (!this._concreteParameters.has(concreteParameter)) {
13
+ this._concreteParameters.add(concreteParameter);
14
+ }
15
+ }
16
+
17
+ public getJSON(): string {
18
+ const json: FamixJSONExporter = new FamixJSONExporter("ParametricMethod", this);
19
+ this.addPropertiesToExporter(json);
20
+ return json.getJSON();
21
+ }
22
+
23
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
24
+ super.addPropertiesToExporter(exporter);
25
+ exporter.addProperty("genericParameters", this.genericParameters);
26
+ exporter.addProperty("concreteParameters", this.concreteParameters);
27
+ }
28
+
29
+ get concreteParameters(): Set<PrimitiveType | Class | Interface> {
30
+ return this._concreteParameters;
31
+ }
32
+ }
@@ -0,0 +1,15 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Type } from "./type";
3
+
4
+ export class PrimitiveType extends Type {
5
+
6
+ public getJSON(): string {
7
+ const json: FamixJSONExporter = new FamixJSONExporter("PrimitiveType", this);
8
+ this.addPropertiesToExporter(json);
9
+ return json.getJSON();
10
+ }
11
+
12
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
13
+ super.addPropertiesToExporter(exporter);
14
+ }
15
+ }