ts2famix 2.0.0 → 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 (212) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +29 -60
  3. package/dist/analyze.js +1 -1
  4. package/dist/analyze_functions/process_functions.js +49 -43
  5. package/dist/famix_functions/EntityDictionary.js +309 -182
  6. package/dist/famix_functions/helpers_creation.js +36 -5
  7. package/dist/fqn.js +76 -114
  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 -1
  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/{src/model → model}/famix/index.js +6 -10
  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 +2 -2
  55. package/dist/refactorer/refactor-getter-setter.js +142 -0
  56. package/dist/ts2famix-cli-wrapper.js +29 -3
  57. package/dist/ts2famix-cli.js +1 -1
  58. package/doc-uml/famix-typescript-model.puml +390 -341
  59. package/doc-uml/famix-typescript-model.svg +1 -1
  60. package/package.json +8 -7
  61. package/src/analyze.ts +2 -2
  62. package/src/analyze_functions/process_functions.ts +49 -44
  63. package/src/famix_functions/EntityDictionary.ts +345 -216
  64. package/src/famix_functions/helpers_creation.ts +36 -4
  65. package/src/fqn.ts +76 -125
  66. package/src/lib/famix/famix_JSON_exporter.ts +56 -0
  67. package/src/lib/famix/famix_base_element.ts +22 -0
  68. package/src/lib/famix/famix_repository.ts +243 -0
  69. package/src/lib/famix/model/famix/access.ts +50 -0
  70. package/src/lib/famix/model/famix/alias.ts +39 -0
  71. package/src/lib/famix/model/famix/behavioral_entity.ts +97 -0
  72. package/src/lib/famix/model/famix/class.ts +85 -0
  73. package/src/lib/famix/model/famix/comment.ts +47 -0
  74. package/src/lib/famix/model/famix/concretisation.ts +40 -0
  75. package/src/lib/famix/model/famix/container_entity.ts +160 -0
  76. package/src/lib/famix/model/famix/decorator.ts +37 -0
  77. package/src/lib/famix/model/famix/enum.ts +30 -0
  78. package/src/lib/famix/model/famix/enum_value.ts +28 -0
  79. package/src/lib/famix/model/famix/import_clause.ts +51 -0
  80. package/src/lib/famix/{src/model → model}/famix/index.ts +2 -4
  81. package/src/lib/famix/model/famix/indexed_file_anchor.ts +46 -0
  82. package/src/lib/famix/model/famix/inheritance.ts +40 -0
  83. package/src/lib/famix/model/famix/interface.ts +75 -0
  84. package/src/lib/famix/model/famix/invocation.ts +65 -0
  85. package/src/lib/famix/model/famix/method.ts +89 -0
  86. package/src/lib/famix/model/famix/module.ts +71 -0
  87. package/src/lib/famix/model/famix/named_entity.ts +95 -0
  88. package/src/lib/famix/{src/model → model}/famix/parameter.ts +11 -12
  89. package/src/lib/famix/model/famix/parameter_concretisation.ts +51 -0
  90. package/src/lib/famix/model/famix/parameter_type.ts +58 -0
  91. package/src/lib/famix/model/famix/parametric_arrow_function.ts +32 -0
  92. package/src/lib/famix/model/famix/parametric_class.ts +49 -0
  93. package/src/lib/famix/model/famix/parametric_function.ts +32 -0
  94. package/src/lib/famix/model/famix/parametric_interface.ts +49 -0
  95. package/src/lib/famix/model/famix/parametric_method.ts +32 -0
  96. package/src/lib/famix/model/famix/primitive_type.ts +15 -0
  97. package/src/lib/famix/model/famix/property.ts +94 -0
  98. package/src/lib/famix/model/famix/reference.ts +40 -0
  99. package/src/lib/famix/model/famix/scoping_entity.ts +35 -0
  100. package/src/lib/famix/model/famix/script_entity.ts +34 -0
  101. package/src/lib/famix/model/famix/source_anchor.ts +30 -0
  102. package/src/lib/famix/model/famix/source_language.ts +35 -0
  103. package/src/lib/famix/model/famix/sourced_entity.ts +70 -0
  104. package/src/lib/famix/model/famix/structural_entity.ts +43 -0
  105. package/src/lib/famix/model/famix/type.ts +87 -0
  106. package/src/lib/famix/model/famix/variable.ts +27 -0
  107. package/src/lib/famix/package.json +1 -1
  108. package/src/lib/ts-complex/cyclomatic-service.ts +10 -10
  109. package/src/refactorer/refactor-getter-setter.ts +140 -0
  110. package/src/ts2famix-cli-wrapper.ts +6 -2
  111. package/src/ts2famix-cli.ts +1 -1
  112. package/tsconfig.check-tests.json +14 -0
  113. package/tsconfig.json +70 -68
  114. package/dist/famix2puml.js +0 -126
  115. package/dist/lib/famix/src/famix_JSON_exporter.js +0 -55
  116. package/dist/lib/famix/src/famix_base_element.js +0 -18
  117. package/dist/lib/famix/src/famix_repository.js +0 -223
  118. package/dist/lib/famix/src/model/famix/access.js +0 -40
  119. package/dist/lib/famix/src/model/famix/accessor.js +0 -17
  120. package/dist/lib/famix/src/model/famix/alias.js +0 -33
  121. package/dist/lib/famix/src/model/famix/arrowFunction.js +0 -17
  122. package/dist/lib/famix/src/model/famix/behavioral_entity.js +0 -79
  123. package/dist/lib/famix/src/model/famix/class.js +0 -71
  124. package/dist/lib/famix/src/model/famix/comment.js +0 -39
  125. package/dist/lib/famix/src/model/famix/concretisation.js +0 -31
  126. package/dist/lib/famix/src/model/famix/container_entity.js +0 -126
  127. package/dist/lib/famix/src/model/famix/decorator.js +0 -32
  128. package/dist/lib/famix/src/model/famix/entity.js +0 -17
  129. package/dist/lib/famix/src/model/famix/enum.js +0 -31
  130. package/dist/lib/famix/src/model/famix/enum_value.js +0 -25
  131. package/dist/lib/famix/src/model/famix/function.js +0 -17
  132. package/dist/lib/famix/src/model/famix/implicit_variable.js +0 -17
  133. package/dist/lib/famix/src/model/famix/import_clause.js +0 -41
  134. package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +0 -52
  135. package/dist/lib/famix/src/model/famix/inheritance.js +0 -33
  136. package/dist/lib/famix/src/model/famix/interface.js +0 -64
  137. package/dist/lib/famix/src/model/famix/invocation.js +0 -54
  138. package/dist/lib/famix/src/model/famix/method.js +0 -67
  139. package/dist/lib/famix/src/model/famix/module.js +0 -84
  140. package/dist/lib/famix/src/model/famix/named_entity.js +0 -78
  141. package/dist/lib/famix/src/model/famix/parameter.js +0 -25
  142. package/dist/lib/famix/src/model/famix/parameterConcretisation.js +0 -44
  143. package/dist/lib/famix/src/model/famix/parameter_type.js +0 -45
  144. package/dist/lib/famix/src/model/famix/parametric_arrow_function.js +0 -31
  145. package/dist/lib/famix/src/model/famix/parametric_class.js +0 -44
  146. package/dist/lib/famix/src/model/famix/parametric_function.js +0 -31
  147. package/dist/lib/famix/src/model/famix/parametric_interface.js +0 -44
  148. package/dist/lib/famix/src/model/famix/parametric_method.js +0 -31
  149. package/dist/lib/famix/src/model/famix/primitive_type.js +0 -17
  150. package/dist/lib/famix/src/model/famix/property.js +0 -126
  151. package/dist/lib/famix/src/model/famix/reference.js +0 -33
  152. package/dist/lib/famix/src/model/famix/scoping_entity.js +0 -37
  153. package/dist/lib/famix/src/model/famix/script_entity.js +0 -29
  154. package/dist/lib/famix/src/model/famix/source_anchor.js +0 -27
  155. package/dist/lib/famix/src/model/famix/source_language.js +0 -35
  156. package/dist/lib/famix/src/model/famix/sourced_entity.js +0 -60
  157. package/dist/lib/famix/src/model/famix/structural_entity.js +0 -39
  158. package/dist/lib/famix/src/model/famix/text_anchor.js +0 -38
  159. package/dist/lib/famix/src/model/famix/type.js +0 -73
  160. package/dist/lib/famix/src/model/famix/variable.js +0 -24
  161. package/jest.config-old.ts +0 -199
  162. package/src/famix2puml.ts +0 -119
  163. package/src/lib/famix/package-lock.json +0 -301
  164. package/src/lib/famix/readme.md +0 -5
  165. package/src/lib/famix/src/famix_JSON_exporter.ts +0 -56
  166. package/src/lib/famix/src/famix_base_element.ts +0 -22
  167. package/src/lib/famix/src/famix_repository.ts +0 -243
  168. package/src/lib/famix/src/model/famix/access.ts +0 -53
  169. package/src/lib/famix/src/model/famix/alias.ts +0 -41
  170. package/src/lib/famix/src/model/famix/behavioral_entity.ts +0 -100
  171. package/src/lib/famix/src/model/famix/class.ts +0 -86
  172. package/src/lib/famix/src/model/famix/comment.ts +0 -50
  173. package/src/lib/famix/src/model/famix/concretisation.ts +0 -42
  174. package/src/lib/famix/src/model/famix/container_entity.ts +0 -165
  175. package/src/lib/famix/src/model/famix/decorator.ts +0 -39
  176. package/src/lib/famix/src/model/famix/enum.ts +0 -31
  177. package/src/lib/famix/src/model/famix/enum_value.ts +0 -29
  178. package/src/lib/famix/src/model/famix/implicit_variable.ts +0 -15
  179. package/src/lib/famix/src/model/famix/import_clause.ts +0 -54
  180. package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +0 -71
  181. package/src/lib/famix/src/model/famix/inheritance.ts +0 -41
  182. package/src/lib/famix/src/model/famix/interface.ts +0 -75
  183. package/src/lib/famix/src/model/famix/invocation.ts +0 -68
  184. package/src/lib/famix/src/model/famix/method.ts +0 -96
  185. package/src/lib/famix/src/model/famix/module.ts +0 -97
  186. package/src/lib/famix/src/model/famix/named_entity.ts +0 -98
  187. package/src/lib/famix/src/model/famix/parameterConcretisation.ts +0 -54
  188. package/src/lib/famix/src/model/famix/parameter_type.ts +0 -60
  189. package/src/lib/famix/src/model/famix/parametric_arrow_function.ts +0 -32
  190. package/src/lib/famix/src/model/famix/parametric_class.ts +0 -49
  191. package/src/lib/famix/src/model/famix/parametric_function.ts +0 -32
  192. package/src/lib/famix/src/model/famix/parametric_interface.ts +0 -49
  193. package/src/lib/famix/src/model/famix/parametric_method.ts +0 -32
  194. package/src/lib/famix/src/model/famix/primitive_type.ts +0 -15
  195. package/src/lib/famix/src/model/famix/property.ts +0 -152
  196. package/src/lib/famix/src/model/famix/reference.ts +0 -42
  197. package/src/lib/famix/src/model/famix/scoping_entity.ts +0 -36
  198. package/src/lib/famix/src/model/famix/script_entity.ts +0 -36
  199. package/src/lib/famix/src/model/famix/source_anchor.ts +0 -31
  200. package/src/lib/famix/src/model/famix/source_language.ts +0 -36
  201. package/src/lib/famix/src/model/famix/sourced_entity.ts +0 -73
  202. package/src/lib/famix/src/model/famix/structural_entity.ts +0 -44
  203. package/src/lib/famix/src/model/famix/text_anchor.ts +0 -49
  204. package/src/lib/famix/src/model/famix/type.ts +0 -89
  205. package/src/lib/famix/src/model/famix/variable.ts +0 -28
  206. package/src/lib/famix/tsconfig.json +0 -27
  207. package/src/lib/famix/tslint.json +0 -15
  208. /package/src/lib/famix/{src/index.ts → index.ts} +0 -0
  209. /package/src/lib/famix/{src/model → model}/famix/accessor.ts +0 -0
  210. /package/src/lib/famix/{src/model/famix/arrowFunction.ts → model/famix/arrow_function.ts} +0 -0
  211. /package/src/lib/famix/{src/model → model}/famix/entity.ts +0 -0
  212. /package/src/lib/famix/{src/model → model}/famix/function.ts +0 -0
@@ -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
+ }
@@ -0,0 +1,94 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Class } from "./class";
3
+ import { Interface } from "./interface";
4
+ import { StructuralEntity } from "./structural_entity";
5
+
6
+ export type VisibilityTypes = "public" | "private" | "protected" | "";
7
+
8
+ export class Property extends StructuralEntity {
9
+
10
+ private _isClassSide: boolean = false;
11
+
12
+ public get readOnly() {
13
+ return this._readOnly;
14
+ }
15
+
16
+ public set readOnly(value: boolean) {
17
+ this._readOnly = value;
18
+ }
19
+ private _readOnly: boolean = false;
20
+ private _parentEntity!: Class | Interface;
21
+
22
+ public get isDefinitelyAssigned() {
23
+ return this._isDefinitelyAssigned;
24
+ }
25
+
26
+ public set isDefinitelyAssigned(value: boolean) {
27
+ this._isDefinitelyAssigned = value;
28
+ }
29
+
30
+ public get isOptional() {
31
+ return this._isOptional;
32
+ }
33
+
34
+ public set isOptional(value: boolean) {
35
+ this._isOptional = value;
36
+ }
37
+
38
+ public get isJavaScriptPrivate() {
39
+ return this._isJavaScriptPrivate;
40
+ }
41
+
42
+ public set isJavaScriptPrivate(value: boolean) {
43
+ this._isJavaScriptPrivate = value;
44
+ }
45
+ private _isDefinitelyAssigned!: boolean;
46
+
47
+ private _isOptional!: boolean;
48
+
49
+ private _isJavaScriptPrivate!: boolean;
50
+
51
+ public get visibility() {
52
+ return this._visibility;
53
+ }
54
+
55
+ public set visibility(value: VisibilityTypes) {
56
+ this._visibility = value;
57
+ }
58
+
59
+ private _visibility: VisibilityTypes = "";
60
+
61
+ public getJSON(): string {
62
+ const json: FamixJSONExporter = new FamixJSONExporter("Property", this);
63
+ this.addPropertiesToExporter(json);
64
+ return json.getJSON();
65
+ }
66
+
67
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
68
+ super.addPropertiesToExporter(exporter);
69
+ exporter.addProperty("readOnly", this.readOnly);
70
+ exporter.addProperty("isClassSide", this.isClassSide);
71
+ exporter.addProperty("parentType", this.parentEntity);
72
+ exporter.addProperty("visibility", this.visibility);
73
+ exporter.addProperty("isDefinitelyAssigned", this.isDefinitelyAssigned);
74
+ exporter.addProperty("isOptional", this.isOptional);
75
+ exporter.addProperty("isJavaScriptPrivate", this.isJavaScriptPrivate);
76
+ }
77
+
78
+ get isClassSide() {
79
+ return this._isClassSide;
80
+ }
81
+
82
+ set isClassSide(isClassSide: boolean) {
83
+ this._isClassSide = isClassSide;
84
+ }
85
+
86
+ get parentEntity() {
87
+ return this._parentEntity;
88
+ }
89
+
90
+ set parentEntity(parentEntity: Class | Interface) {
91
+ this._parentEntity = parentEntity;
92
+ parentEntity.addProperty(this);
93
+ }
94
+ }
@@ -0,0 +1,40 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Type } from "./type";
3
+ import { ContainerEntity } from "./container_entity";
4
+ import { Entity } from "./entity";
5
+
6
+ export class Reference extends Entity {
7
+
8
+ private _source!: ContainerEntity;
9
+ private _target!: Type;
10
+
11
+ public getJSON(): string {
12
+ const json: FamixJSONExporter = new FamixJSONExporter("Reference", this);
13
+ this.addPropertiesToExporter(json);
14
+ return json.getJSON();
15
+ }
16
+
17
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
18
+ super.addPropertiesToExporter(exporter);
19
+ exporter.addProperty("source", this.source);
20
+ exporter.addProperty("target", this.target);
21
+ }
22
+
23
+ get source() {
24
+ return this._source;
25
+ }
26
+
27
+ set source(source: ContainerEntity) {
28
+ this._source = source;
29
+ source.addOutgoingReference(this);
30
+ }
31
+
32
+ get target() {
33
+ return this._target;
34
+ }
35
+
36
+ set target(target: Type) {
37
+ this._target = target;
38
+ target.addIncomingReference(this);
39
+ }
40
+ }
@@ -0,0 +1,35 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { ContainerEntity } from "./container_entity";
3
+ import { logger } from "../../../../analyze";
4
+ import { Module } from "./module";
5
+
6
+ export class ScopingEntity extends ContainerEntity {
7
+
8
+ private _modules: Set<Module> = new Set();
9
+
10
+ public addModule(childModule: Module): void {
11
+ if (!this._modules.has(childModule)) {
12
+ logger.debug("Adding module " + childModule.name + " to " + this.name);
13
+ this._modules.add(childModule);
14
+ childModule.parentScope = this;
15
+ } else {
16
+ logger.debug("Module " + childModule.name + " already added to " + this.name);
17
+ }
18
+ }
19
+
20
+
21
+ public getJSON(): string {
22
+ const json: FamixJSONExporter = new FamixJSONExporter("ScopingEntity", this);
23
+ this.addPropertiesToExporter(json);
24
+ return json.getJSON();
25
+ }
26
+
27
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
28
+ super.addPropertiesToExporter(exporter);
29
+ // exporter.addProperty("namespaces", this.getModules());
30
+ }
31
+
32
+ get modules() {
33
+ return this._modules;
34
+ }
35
+ }
@@ -0,0 +1,34 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { ScopingEntity } from "./scoping_entity";
3
+
4
+ export class ScriptEntity extends ScopingEntity {
5
+
6
+ private _numberOfLinesOfText!: number;
7
+ private _numberOfCharacters!: number;
8
+
9
+ public getJSON(): string {
10
+ const json: FamixJSONExporter = new FamixJSONExporter("ScriptEntity", this);
11
+ this.addPropertiesToExporter(json);
12
+ return json.getJSON();
13
+ }
14
+
15
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
16
+ super.addPropertiesToExporter(exporter);
17
+ }
18
+
19
+ get numberOfLinesOfText() {
20
+ return this._numberOfLinesOfText;
21
+ }
22
+
23
+ set numberOfLinesOfText(numberOfLinesOfText: number) {
24
+ this._numberOfLinesOfText = numberOfLinesOfText;
25
+ }
26
+
27
+ get numberOfCharacters() {
28
+ return this._numberOfCharacters;
29
+ }
30
+
31
+ set numberOfCharacters(numberOfCharacters: number) {
32
+ this._numberOfCharacters = numberOfCharacters;
33
+ }
34
+ }
@@ -0,0 +1,30 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Entity } from "./entity";
3
+ import { SourcedEntity } from "./sourced_entity";
4
+
5
+ export class SourceAnchor extends Entity {
6
+
7
+ private _element!: SourcedEntity;
8
+
9
+ public getJSON(): string {
10
+ const json: FamixJSONExporter = new FamixJSONExporter("SourceAnchor", this);
11
+ this.addPropertiesToExporter(json);
12
+ return json.getJSON();
13
+ }
14
+
15
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
16
+ super.addPropertiesToExporter(exporter);
17
+ exporter.addProperty("element", this.element);
18
+ }
19
+
20
+ get element() {
21
+ return this._element;
22
+ }
23
+
24
+ set element(element: SourcedEntity) {
25
+ if (this._element === undefined) {
26
+ this._element = element;
27
+ element.sourceAnchor = this;
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,35 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Entity } from "./entity";
3
+ import { SourcedEntity } from "./sourced_entity";
4
+
5
+ export class SourceLanguage extends Entity {
6
+
7
+ private _sourcedEntities: Set<SourcedEntity> = new Set();
8
+
9
+ // name of the source language
10
+ get name(): string {
11
+ return "TypeScript";
12
+ }
13
+
14
+ public addSourcedEntity(sourcedEntity: SourcedEntity): void {
15
+ if (!this._sourcedEntities.has(sourcedEntity)) {
16
+ this._sourcedEntities.add(sourcedEntity);
17
+ sourcedEntity.declaredSourceLanguage = this;
18
+ }
19
+ }
20
+
21
+ public getJSON(): string {
22
+ const json: FamixJSONExporter = new FamixJSONExporter("SourceLanguage", this);
23
+ this.addPropertiesToExporter(json);
24
+ return json.getJSON();
25
+ }
26
+
27
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
28
+ super.addPropertiesToExporter(exporter);
29
+ exporter.addProperty("sourcedEntities", this.sourcedEntities);
30
+ }
31
+
32
+ get sourcedEntities() {
33
+ return this._sourcedEntities;
34
+ }
35
+ }
@@ -0,0 +1,70 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { SourceLanguage } from "./source_language";
3
+ import { Entity } from "./entity";
4
+ import { Comment } from "./comment";
5
+ import { SourceAnchor } from "./source_anchor";
6
+ import { logger } from "../../../../analyze";
7
+
8
+ export class SourcedEntity extends Entity {
9
+
10
+ private _isStub!: boolean;
11
+ private _sourceAnchor!: SourceAnchor;
12
+ private _comments: Set<Comment> = new Set();
13
+
14
+ public addComment(comment: Comment): void {
15
+ if (!this._comments.has(comment)) {
16
+ this._comments.add(comment);
17
+ comment.container = this;
18
+ } else {
19
+ logger.debug("Adding comment that is already in comments: " + comment.getJSON() + " to " + this.getJSON());
20
+ }
21
+ }
22
+
23
+ private _declaredSourceLanguage!: SourceLanguage;
24
+
25
+ public getJSON(): string {
26
+ const json: FamixJSONExporter = new FamixJSONExporter("SourcedEntity", this);
27
+ this.addPropertiesToExporter(json);
28
+ return json.getJSON();
29
+ }
30
+
31
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
32
+ super.addPropertiesToExporter(exporter);
33
+ exporter.addProperty("isStub", this.isStub);
34
+ exporter.addProperty("sourceAnchor", this.sourceAnchor);
35
+ exporter.addProperty("comments", this.comments);
36
+ exporter.addProperty("declaredSourceLanguage", this.declaredSourceLanguage);
37
+ }
38
+
39
+ get isStub() {
40
+ return this._isStub;
41
+ }
42
+
43
+ set isStub(isStub: boolean) {
44
+ this._isStub = isStub;
45
+ }
46
+
47
+ get sourceAnchor() {
48
+ return this._sourceAnchor;
49
+ }
50
+
51
+ set sourceAnchor(sourceAnchor: SourceAnchor) {
52
+ if (this._sourceAnchor === undefined) {
53
+ this._sourceAnchor = sourceAnchor;
54
+ sourceAnchor.element = this;
55
+ }
56
+ }
57
+
58
+ get comments() {
59
+ return this._comments;
60
+ }
61
+
62
+ get declaredSourceLanguage() {
63
+ return this._declaredSourceLanguage;
64
+ }
65
+
66
+ set declaredSourceLanguage(declaredSourceLanguage: SourceLanguage) {
67
+ this._declaredSourceLanguage = declaredSourceLanguage;
68
+ declaredSourceLanguage.addSourcedEntity(this);
69
+ }
70
+ }
@@ -0,0 +1,43 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { Type } from "./type";
3
+ import { Access } from "./access";
4
+ import { NamedEntity } from "./named_entity";
5
+
6
+ export class StructuralEntity extends NamedEntity {
7
+
8
+ private _incomingAccesses: Set<Access> = new Set();
9
+
10
+ public addIncomingAccess(incomingAccess: Access): void {
11
+ if (!this._incomingAccesses.has(incomingAccess)) {
12
+ this._incomingAccesses.add(incomingAccess);
13
+ incomingAccess.variable = this;
14
+ }
15
+ }
16
+
17
+ private _declaredType!: Type;
18
+
19
+ public getJSON(): string {
20
+ const json: FamixJSONExporter = new FamixJSONExporter("StructuralEntity", this);
21
+ this.addPropertiesToExporter(json);
22
+ return json.getJSON();
23
+ }
24
+
25
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
26
+ super.addPropertiesToExporter(exporter);
27
+ exporter.addProperty("incomingAccesses", this.incomingAccesses);
28
+ exporter.addProperty("declaredType", this.declaredType);
29
+ }
30
+
31
+ get incomingAccesses() {
32
+ return this._incomingAccesses;
33
+ }
34
+
35
+ get declaredType() {
36
+ return this._declaredType;
37
+ }
38
+
39
+ set declaredType(declaredType: Type) {
40
+ this._declaredType = declaredType;
41
+ declaredType.addStructureWithDeclaredType(this);
42
+ }
43
+ }
@@ -0,0 +1,87 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { StructuralEntity } from "./structural_entity";
3
+ import { ContainerEntity } from "./container_entity";
4
+ import { Reference } from "./reference";
5
+ import { BehavioralEntity } from "./behavioral_entity";
6
+ import { Alias } from "./alias";
7
+
8
+ export class Type extends ContainerEntity {
9
+
10
+ private _container!: ContainerEntity;
11
+ private _typeAliases: Set<Alias> = new Set();
12
+
13
+ public addTypeAlias(typeAlias: Alias): void {
14
+ if (!this._typeAliases.has(typeAlias)) {
15
+ this._typeAliases.add(typeAlias);
16
+ typeAlias.aliasedEntity = this;
17
+ }
18
+ }
19
+
20
+ private _structuresWithDeclaredType: Set<StructuralEntity> = new Set();
21
+
22
+ public addStructureWithDeclaredType(structureWithDeclaredType: StructuralEntity): void {
23
+ if (!this._structuresWithDeclaredType.has(structureWithDeclaredType)) {
24
+ this._structuresWithDeclaredType.add(structureWithDeclaredType);
25
+ structureWithDeclaredType.declaredType = this;
26
+ }
27
+ }
28
+
29
+ private _behavioralEntitiesWithDeclaredType: Set<BehavioralEntity> = new Set();
30
+
31
+ public addBehavioralEntityWithDeclaredType(behavioralEntityWithDeclaredType: BehavioralEntity): void {
32
+ if (!this._behavioralEntitiesWithDeclaredType.has(behavioralEntityWithDeclaredType)) {
33
+ this._behavioralEntitiesWithDeclaredType.add(behavioralEntityWithDeclaredType);
34
+ behavioralEntityWithDeclaredType.declaredType = this;
35
+ }
36
+ }
37
+
38
+ private _incomingReferences: Set<Reference> = new Set();
39
+
40
+ public addIncomingReference(incomingReference: Reference): void {
41
+ if (!this._incomingReferences.has(incomingReference)) {
42
+ this._incomingReferences.add(incomingReference);
43
+ incomingReference.target = this;
44
+ }
45
+ }
46
+
47
+ public getJSON(): string {
48
+ const json: FamixJSONExporter = new FamixJSONExporter("Type", this);
49
+ this.addPropertiesToExporter(json);
50
+ return json.getJSON();
51
+ }
52
+
53
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
54
+ super.addPropertiesToExporter(exporter);
55
+ exporter.addProperty("typeContainer", this.container);
56
+ /* unsupported properties in MM so far */
57
+ // exporter.addProperty("typeAliases", this.getTypeAliases());
58
+ // exporter.addProperty("structuresWithDeclaredType", this.getStructuresWithDeclaredType());
59
+ // exporter.addProperty("behavioralEntitiesWithDeclaredType", this.getBehavioralEntitiesWithDeclaredType());
60
+ exporter.addProperty("incomingReferences", this.incomingReferences);
61
+ }
62
+
63
+ get container() {
64
+ return this._container;
65
+ }
66
+
67
+ set container(container: ContainerEntity) {
68
+ this._container = container;
69
+ container.addType(this);
70
+ }
71
+
72
+ get typeAliases() {
73
+ return this._typeAliases;
74
+ }
75
+
76
+ get structuresWithDeclaredType() {
77
+ return this._structuresWithDeclaredType;
78
+ }
79
+
80
+ get behavioralEntitiesWithDeclaredType() {
81
+ return this._behavioralEntitiesWithDeclaredType;
82
+ }
83
+
84
+ get incomingReferences() {
85
+ return this._incomingReferences;
86
+ }
87
+ }
@@ -0,0 +1,27 @@
1
+ import { FamixJSONExporter } from "../../famix_JSON_exporter";
2
+ import { ContainerEntity } from "./container_entity";
3
+ import { StructuralEntity } from "./structural_entity";
4
+
5
+ export class Variable extends StructuralEntity {
6
+
7
+ private _parentContainerEntity!: ContainerEntity;
8
+
9
+ public getJSON(): string {
10
+ const json: FamixJSONExporter = new FamixJSONExporter("Variable", this);
11
+ this.addPropertiesToExporter(json);
12
+ return json.getJSON();
13
+ }
14
+
15
+ public addPropertiesToExporter(exporter: FamixJSONExporter): void {
16
+ super.addPropertiesToExporter(exporter);
17
+ exporter.addProperty("parentBehaviouralEntity", this.parentContainerEntity);
18
+ }
19
+
20
+ get parentContainerEntity() {
21
+ return this._parentContainerEntity;
22
+ }
23
+
24
+ set parentContainerEntity(parentContainerEntity: ContainerEntity) {
25
+ this._parentContainerEntity = parentContainerEntity;
26
+ }
27
+ }