ts2famix 1.0.10 → 1.0.12

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 (138) hide show
  1. package/.eslintrc.json +24 -24
  2. package/LICENSE +23 -23
  3. package/README.md +109 -109
  4. package/jest.config-old.ts +199 -199
  5. package/package.json +47 -47
  6. package/src/analyze.ts +94 -94
  7. package/src/analyze_functions/processAccesses.ts +57 -50
  8. package/src/analyze_functions/processFiles.ts +669 -660
  9. package/src/analyze_functions/processImportClauses.ts +77 -77
  10. package/src/analyze_functions/processInheritances.ts +84 -84
  11. package/src/analyze_functions/processInvocations.ts +51 -51
  12. package/src/famix2puml.ts +119 -119
  13. package/src/famix_functions/famix_functions.ts +559 -555
  14. package/src/famix_functions/famix_functions_associations.ts +215 -215
  15. package/src/famix_functions/famix_functions_index.ts +44 -44
  16. package/src/famix_functions/famix_functions_types.ts +105 -100
  17. package/src/generate_uml.sh +16 -16
  18. package/src/lib/famix/License.md +22 -22
  19. package/src/lib/famix/package-lock.json +301 -301
  20. package/src/lib/famix/package.json +27 -27
  21. package/src/lib/famix/readme.md +4 -4
  22. package/src/lib/famix/src/famix_JSON_exporter.ts +56 -56
  23. package/src/lib/famix/src/famix_base_element.ts +18 -18
  24. package/src/lib/famix/src/famix_repository.ts +199 -199
  25. package/src/lib/famix/src/index.ts +8 -8
  26. package/src/lib/famix/src/model/famix/access.ts +53 -53
  27. package/src/lib/famix/src/model/famix/accessor.ts +15 -15
  28. package/src/lib/famix/src/model/famix/alias.ts +41 -41
  29. package/src/lib/famix/src/model/famix/association.ts +44 -44
  30. package/src/lib/famix/src/model/famix/behavioral_entity.ts +107 -107
  31. package/src/lib/famix/src/model/famix/c_source_language.ts +15 -15
  32. package/src/lib/famix/src/model/famix/class.ts +86 -86
  33. package/src/lib/famix/src/model/famix/comment.ts +50 -50
  34. package/src/lib/famix/src/model/famix/container_entity.ts +165 -165
  35. package/src/lib/famix/src/model/famix/custom_source_language.ts +27 -27
  36. package/src/lib/famix/src/model/famix/decorator.ts +39 -39
  37. package/src/lib/famix/src/model/famix/entity.ts +15 -15
  38. package/src/lib/famix/src/model/famix/enum.ts +31 -31
  39. package/src/lib/famix/src/model/famix/enum_value.ts +29 -29
  40. package/src/lib/famix/src/model/famix/function.ts +15 -15
  41. package/src/lib/famix/src/model/famix/implicit_variable.ts +15 -15
  42. package/src/lib/famix/src/model/famix/import_clause.ts +53 -53
  43. package/src/lib/famix/src/model/famix/index.ts +42 -42
  44. package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +49 -49
  45. package/src/lib/famix/src/model/famix/inheritance.ts +42 -42
  46. package/src/lib/famix/src/model/famix/interface.ts +75 -75
  47. package/src/lib/famix/src/model/famix/invocation.ts +68 -68
  48. package/src/lib/famix/src/model/famix/method.ts +96 -96
  49. package/src/lib/famix/src/model/famix/module.ts +31 -31
  50. package/src/lib/famix/src/model/famix/named_entity.ts +98 -98
  51. package/src/lib/famix/src/model/famix/namespace.ts +28 -28
  52. package/src/lib/famix/src/model/famix/parameter.ts +29 -29
  53. package/src/lib/famix/src/model/famix/parameterizable_class.ts +31 -31
  54. package/src/lib/famix/src/model/famix/parameterizable_interface.ts +31 -31
  55. package/src/lib/famix/src/model/famix/parameterized_type.ts +40 -40
  56. package/src/lib/famix/src/model/famix/primitive_type.ts +15 -15
  57. package/src/lib/famix/src/model/famix/property.ts +54 -54
  58. package/src/lib/famix/src/model/famix/reference.ts +42 -42
  59. package/src/lib/famix/src/model/famix/scoping_entity.ts +31 -31
  60. package/src/lib/famix/src/model/famix/script_entity.ts +38 -38
  61. package/src/lib/famix/src/model/famix/source_anchor.ts +31 -31
  62. package/src/lib/famix/src/model/famix/source_language.ts +31 -31
  63. package/src/lib/famix/src/model/famix/sourced_entity.ts +70 -70
  64. package/src/lib/famix/src/model/famix/structural_entity.ts +44 -44
  65. package/src/lib/famix/src/model/famix/text_anchor.ts +49 -49
  66. package/src/lib/famix/src/model/famix/type.ts +88 -88
  67. package/src/lib/famix/src/model/famix/type_parameter.ts +33 -33
  68. package/src/lib/famix/src/model/famix/variable.ts +28 -28
  69. package/src/lib/famix/tsconfig.json +26 -26
  70. package/src/lib/famix/tslint.json +14 -14
  71. package/src/lib/ts-complex/cyclomatic-service.ts +85 -85
  72. package/src/ts2famix-cli.ts +39 -39
  73. package/tsconfig.json +69 -69
  74. package/dist/analyze.js +0 -102
  75. package/dist/analyze_functions/processAccesses.js +0 -47
  76. package/dist/analyze_functions/processFiles.js +0 -540
  77. package/dist/analyze_functions/processImportClauses.js +0 -70
  78. package/dist/analyze_functions/processInheritances.js +0 -73
  79. package/dist/analyze_functions/processInvocations.js +0 -49
  80. package/dist/famix2puml.js +0 -125
  81. package/dist/famix_functions/famix_functions.js +0 -513
  82. package/dist/famix_functions/famix_functions_associations.js +0 -205
  83. package/dist/famix_functions/famix_functions_index.js +0 -62
  84. package/dist/famix_functions/famix_functions_types.js +0 -110
  85. package/dist/fqn.js +0 -126
  86. package/dist/fqp_implementation.js +0 -73
  87. package/dist/lib/famix/src/famix_JSON_exporter.js +0 -54
  88. package/dist/lib/famix/src/famix_base_element.js +0 -13
  89. package/dist/lib/famix/src/famix_repository.js +0 -187
  90. package/dist/lib/famix/src/index.js +0 -30
  91. package/dist/lib/famix/src/model/famix/access.js +0 -39
  92. package/dist/lib/famix/src/model/famix/accessor.js +0 -16
  93. package/dist/lib/famix/src/model/famix/alias.js +0 -32
  94. package/dist/lib/famix/src/model/famix/association.js +0 -36
  95. package/dist/lib/famix/src/model/famix/behavioral_entity.js +0 -81
  96. package/dist/lib/famix/src/model/famix/c_source_language.js +0 -16
  97. package/dist/lib/famix/src/model/famix/class.js +0 -70
  98. package/dist/lib/famix/src/model/famix/comment.js +0 -38
  99. package/dist/lib/famix/src/model/famix/container_entity.js +0 -125
  100. package/dist/lib/famix/src/model/famix/custom_source_language.js +0 -23
  101. package/dist/lib/famix/src/model/famix/decorator.js +0 -31
  102. package/dist/lib/famix/src/model/famix/entity.js +0 -16
  103. package/dist/lib/famix/src/model/famix/enum.js +0 -30
  104. package/dist/lib/famix/src/model/famix/enum_value.js +0 -24
  105. package/dist/lib/famix/src/model/famix/function.js +0 -16
  106. package/dist/lib/famix/src/model/famix/implicit_variable.js +0 -16
  107. package/dist/lib/famix/src/model/famix/import_clause.js +0 -39
  108. package/dist/lib/famix/src/model/famix/index.js +0 -87
  109. package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +0 -37
  110. package/dist/lib/famix/src/model/famix/inheritance.js +0 -32
  111. package/dist/lib/famix/src/model/famix/interface.js +0 -63
  112. package/dist/lib/famix/src/model/famix/invocation.js +0 -53
  113. package/dist/lib/famix/src/model/famix/method.js +0 -66
  114. package/dist/lib/famix/src/model/famix/module.js +0 -30
  115. package/dist/lib/famix/src/model/famix/named_entity.js +0 -77
  116. package/dist/lib/famix/src/model/famix/namespace.js +0 -24
  117. package/dist/lib/famix/src/model/famix/parameter.js +0 -24
  118. package/dist/lib/famix/src/model/famix/parameterizable_class.js +0 -30
  119. package/dist/lib/famix/src/model/famix/parameterizable_interface.js +0 -30
  120. package/dist/lib/famix/src/model/famix/parameterized_type.js +0 -36
  121. package/dist/lib/famix/src/model/famix/primitive_type.js +0 -16
  122. package/dist/lib/famix/src/model/famix/property.js +0 -44
  123. package/dist/lib/famix/src/model/famix/reference.js +0 -32
  124. package/dist/lib/famix/src/model/famix/scoping_entity.js +0 -30
  125. package/dist/lib/famix/src/model/famix/script_entity.js +0 -30
  126. package/dist/lib/famix/src/model/famix/source_anchor.js +0 -26
  127. package/dist/lib/famix/src/model/famix/source_language.js +0 -30
  128. package/dist/lib/famix/src/model/famix/sourced_entity.js +0 -55
  129. package/dist/lib/famix/src/model/famix/structural_entity.js +0 -38
  130. package/dist/lib/famix/src/model/famix/text_anchor.js +0 -37
  131. package/dist/lib/famix/src/model/famix/type.js +0 -71
  132. package/dist/lib/famix/src/model/famix/type_parameter.js +0 -24
  133. package/dist/lib/famix/src/model/famix/variable.js +0 -23
  134. package/dist/lib/ts-complex/cyclomatic-service.js +0 -83
  135. package/dist/ts2famix-cli.js +0 -63
  136. package/dist/ts2famix-tsconfig.js +0 -53
  137. package/metrics.ts +0 -23
  138. package/src/fqp_implementation.ts +0 -66
@@ -1,77 +1,77 @@
1
- import { ImportDeclaration, SourceFile, ExportedDeclarations } from "ts-morph";
2
- import { FamixFunctions } from "../famix_functions/famix_functions";
3
-
4
- /**
5
- * This class is used to build a Famix model for the import clauses
6
- */
7
- export class ProcessImportClauses {
8
-
9
- private famixFunctions: FamixFunctions; // FamixFunctions object, it contains all the functions needed to create Famix entities
10
-
11
- /**
12
- * Initializes the ProcessImportClauses object
13
- * @param famixFunctions FamixFunctions object, it contains all the functions needed to create Famix entities
14
- */
15
- constructor(famixFunctions: FamixFunctions) {
16
- this.famixFunctions = famixFunctions;
17
- }
18
-
19
- /**
20
- * Builds a Famix model for the import clauses of the source files which are modules
21
- * @param modules An array of modules
22
- * @param exports An array of maps of exported declarations
23
- */
24
- public processImportClauses(modules: Array<SourceFile>, exports: Array<ReadonlyMap<string, ExportedDeclarations[]>>): void {
25
- console.info(`processImportClauses: Creating import clauses:`);
26
- modules.forEach(f => {
27
- f.getImportDeclarations().forEach(i => {
28
- const path = this.getModulePath(i);
29
-
30
- i.getNamedImports().forEach(ni => {
31
- console.info(`processImportClauses: Importing (named) ${ni.getName()} from ${i.getModuleSpecifierValue()}`);
32
- const importedEntityName = ni.getName();
33
- let bool = false;
34
- exports.forEach(e => {
35
- if (e.has(importedEntityName)) {
36
- bool = true;
37
- }
38
- });
39
- this.famixFunctions.createFamixImportClause(f, i.getModuleSpecifierValue(), path, ni, bool, false);
40
- });
41
-
42
- const defaultImport = i.getDefaultImport();
43
- if (defaultImport !== undefined) {
44
- console.info(`processImportClauses: Importing (default) ${defaultImport.getText()} from ${i.getModuleSpecifierValue()}`);
45
- this.famixFunctions.createFamixImportClause(f, i.getModuleSpecifierValue(), path, defaultImport, false, true);
46
- }
47
-
48
- const namespaceImport = i.getNamespaceImport();
49
- if (namespaceImport !== undefined) {
50
- console.info(`processImportClauses: Importing (namespace) ${namespaceImport.getText()} from ${i.getModuleSpecifierValue()}`);
51
- this.famixFunctions.createFamixImportClause(f, i.getModuleSpecifierValue(), path, namespaceImport, false, false);
52
- }
53
- });
54
- });
55
- }
56
-
57
- /**
58
- * Gets the path of a module to be imported
59
- * @param i An import declaration
60
- * @returns The path of the module to be imported
61
- */
62
- private getModulePath(i: ImportDeclaration): string {
63
- let path: string;
64
- if (i.getModuleSpecifierSourceFile() === undefined) {
65
- if (i.getModuleSpecifierValue().substring(i.getModuleSpecifierValue().length - 3) === ".ts") {
66
- path = i.getModuleSpecifierValue();
67
- }
68
- else {
69
- path = i.getModuleSpecifierValue() + ".ts";
70
- }
71
- }
72
- else {
73
- path = i.getModuleSpecifierSourceFile().getFilePath();
74
- }
75
- return path;
76
- }
77
- }
1
+ import { ImportDeclaration, SourceFile, ExportedDeclarations } from "ts-morph";
2
+ import { FamixFunctions } from "../famix_functions/famix_functions";
3
+
4
+ /**
5
+ * This class is used to build a Famix model for the import clauses
6
+ */
7
+ export class ProcessImportClauses {
8
+
9
+ private famixFunctions: FamixFunctions; // FamixFunctions object, it contains all the functions needed to create Famix entities
10
+
11
+ /**
12
+ * Initializes the ProcessImportClauses object
13
+ * @param famixFunctions FamixFunctions object, it contains all the functions needed to create Famix entities
14
+ */
15
+ constructor(famixFunctions: FamixFunctions) {
16
+ this.famixFunctions = famixFunctions;
17
+ }
18
+
19
+ /**
20
+ * Builds a Famix model for the import clauses of the source files which are modules
21
+ * @param modules An array of modules
22
+ * @param exports An array of maps of exported declarations
23
+ */
24
+ public processImportClauses(modules: Array<SourceFile>, exports: Array<ReadonlyMap<string, ExportedDeclarations[]>>): void {
25
+ console.info(`processImportClauses: Creating import clauses:`);
26
+ modules.forEach(f => {
27
+ f.getImportDeclarations().forEach(i => {
28
+ const path = this.getModulePath(i);
29
+
30
+ i.getNamedImports().forEach(ni => {
31
+ console.info(`processImportClauses: Importing (named) ${ni.getName()} from ${i.getModuleSpecifierValue()}`);
32
+ const importedEntityName = ni.getName();
33
+ let bool = false;
34
+ exports.forEach(e => {
35
+ if (e.has(importedEntityName)) {
36
+ bool = true;
37
+ }
38
+ });
39
+ this.famixFunctions.createFamixImportClause(f, i.getModuleSpecifierValue(), path, ni, bool, false);
40
+ });
41
+
42
+ const defaultImport = i.getDefaultImport();
43
+ if (defaultImport !== undefined) {
44
+ console.info(`processImportClauses: Importing (default) ${defaultImport.getText()} from ${i.getModuleSpecifierValue()}`);
45
+ this.famixFunctions.createFamixImportClause(f, i.getModuleSpecifierValue(), path, defaultImport, false, true);
46
+ }
47
+
48
+ const namespaceImport = i.getNamespaceImport();
49
+ if (namespaceImport !== undefined) {
50
+ console.info(`processImportClauses: Importing (namespace) ${namespaceImport.getText()} from ${i.getModuleSpecifierValue()}`);
51
+ this.famixFunctions.createFamixImportClause(f, i.getModuleSpecifierValue(), path, namespaceImport, false, false);
52
+ }
53
+ });
54
+ });
55
+ }
56
+
57
+ /**
58
+ * Gets the path of a module to be imported
59
+ * @param i An import declaration
60
+ * @returns The path of the module to be imported
61
+ */
62
+ private getModulePath(i: ImportDeclaration): string {
63
+ let path: string;
64
+ if (i.getModuleSpecifierSourceFile() === undefined) {
65
+ if (i.getModuleSpecifierValue().substring(i.getModuleSpecifierValue().length - 3) === ".ts") {
66
+ path = i.getModuleSpecifierValue();
67
+ }
68
+ else {
69
+ path = i.getModuleSpecifierValue() + ".ts";
70
+ }
71
+ }
72
+ else {
73
+ path = i.getModuleSpecifierSourceFile().getFilePath();
74
+ }
75
+ return path;
76
+ }
77
+ }
@@ -1,84 +1,84 @@
1
- import { ClassDeclaration, InterfaceDeclaration, ExpressionWithTypeArguments } from "ts-morph";
2
- import { FamixFunctions } from "../famix_functions/famix_functions";
3
-
4
- /**
5
- * This class is used to build a Famix model for the inheritances
6
- */
7
- export class ProcessInheritances {
8
-
9
- private famixFunctions: FamixFunctions; // FamixFunctions object, it contains all the functions needed to create Famix entities
10
-
11
- /**
12
- * Initializes the ProcessInheritances object
13
- * @param famixFunctions FamixFunctions object, it contains all the functions needed to create Famix entities
14
- */
15
- constructor(famixFunctions: FamixFunctions) {
16
- this.famixFunctions = famixFunctions;
17
- }
18
-
19
- /**
20
- * Builds a Famix model for the inheritances of the classes and interfaces of the source files
21
- * @param classes An array of classes
22
- * @param interfaces An array of interfaces
23
- */
24
- public processInheritances(classes: ClassDeclaration[], interfaces: InterfaceDeclaration[]): void {
25
- console.info(`processInheritances: Creating inheritances:`);
26
- classes.forEach(cls => {
27
- console.info(`processInheritances: Checking class inheritance for ${cls.getName()}`);
28
- const extClass = cls.getBaseClass();
29
- if (extClass !== undefined) {
30
- this.famixFunctions.createFamixInheritance(cls, extClass);
31
-
32
- console.info(`processInheritances: class: ${cls.getName()}, (${cls.getType().getText()}), extClass: ${extClass.getName()}, (${extClass.getType().getText()})`);
33
- }
34
-
35
- console.info(`processInheritances: Checking interface inheritance for ${cls.getName()}`);
36
- const implementedInterfaces = this.getImplementedOrExtendedInterfaces(interfaces, cls);
37
- implementedInterfaces.forEach(impInter => {
38
- this.famixFunctions.createFamixInheritance(cls, impInter);
39
-
40
- console.info(`processInheritances: class: ${cls.getName()}, (${cls.getType().getText()}), impInter: ${(impInter instanceof InterfaceDeclaration) ? impInter.getName() : impInter.getExpression().getText()}, (${(impInter instanceof InterfaceDeclaration) ? impInter.getType().getText() : impInter.getExpression().getText()})`);
41
- });
42
- });
43
-
44
- interfaces.forEach(inter => {
45
- console.info(`processInheritances: Checking interface inheritance for ${inter.getName()}`);
46
- const extendedInterfaces = this.getImplementedOrExtendedInterfaces(interfaces, inter);
47
- extendedInterfaces.forEach(extInter => {
48
- this.famixFunctions.createFamixInheritance(inter, extInter);
49
-
50
- console.info(`processInheritances: inter: ${inter.getName()}, (${inter.getType().getText()}), extInter: ${(extInter instanceof InterfaceDeclaration) ? extInter.getName() : extInter.getExpression().getText()}, (${(extInter instanceof InterfaceDeclaration) ? extInter.getType().getText() : extInter.getExpression().getText()})`);
51
- });
52
- });
53
- }
54
-
55
- /**
56
- * Gets the interfaces implemented or extended by a class or an interface
57
- * @param interfaces An array of interfaces
58
- * @param subClass A class or an interface
59
- * @returns An array of InterfaceDeclaration and ExpressionWithTypeArguments containing the interfaces implemented or extended by the subClass
60
- */
61
- private getImplementedOrExtendedInterfaces(interfaces: Array<InterfaceDeclaration>, subClass: ClassDeclaration | InterfaceDeclaration): Array<InterfaceDeclaration | ExpressionWithTypeArguments> {
62
- let impOrExtInterfaces: Array<ExpressionWithTypeArguments>;
63
- if (subClass instanceof ClassDeclaration) {
64
- impOrExtInterfaces = subClass.getImplements();
65
- }
66
- else {
67
- impOrExtInterfaces = subClass.getExtends();
68
- }
69
-
70
- const interfacesNames = interfaces.map(i => i.getName());
71
- const implementedOrExtendedInterfaces = new Array<InterfaceDeclaration | ExpressionWithTypeArguments>();
72
-
73
- impOrExtInterfaces.forEach(i => {
74
- if (interfacesNames.includes(i.getExpression().getText())) {
75
- implementedOrExtendedInterfaces.push(interfaces[interfacesNames.indexOf(i.getExpression().getText())]);
76
- }
77
- else {
78
- implementedOrExtendedInterfaces.push(i);
79
- }
80
- });
81
-
82
- return implementedOrExtendedInterfaces;
83
- }
84
- }
1
+ import { ClassDeclaration, InterfaceDeclaration, ExpressionWithTypeArguments } from "ts-morph";
2
+ import { FamixFunctions } from "../famix_functions/famix_functions";
3
+
4
+ /**
5
+ * This class is used to build a Famix model for the inheritances
6
+ */
7
+ export class ProcessInheritances {
8
+
9
+ private famixFunctions: FamixFunctions; // FamixFunctions object, it contains all the functions needed to create Famix entities
10
+
11
+ /**
12
+ * Initializes the ProcessInheritances object
13
+ * @param famixFunctions FamixFunctions object, it contains all the functions needed to create Famix entities
14
+ */
15
+ constructor(famixFunctions: FamixFunctions) {
16
+ this.famixFunctions = famixFunctions;
17
+ }
18
+
19
+ /**
20
+ * Builds a Famix model for the inheritances of the classes and interfaces of the source files
21
+ * @param classes An array of classes
22
+ * @param interfaces An array of interfaces
23
+ */
24
+ public processInheritances(classes: ClassDeclaration[], interfaces: InterfaceDeclaration[]): void {
25
+ console.info(`processInheritances: Creating inheritances:`);
26
+ classes.forEach(cls => {
27
+ console.info(`processInheritances: Checking class inheritance for ${cls.getName()}`);
28
+ const extClass = cls.getBaseClass();
29
+ if (extClass !== undefined) {
30
+ this.famixFunctions.createFamixInheritance(cls, extClass);
31
+
32
+ console.info(`processInheritances: class: ${cls.getName()}, (${cls.getType().getText()}), extClass: ${extClass.getName()}, (${extClass.getType().getText()})`);
33
+ }
34
+
35
+ console.info(`processInheritances: Checking interface inheritance for ${cls.getName()}`);
36
+ const implementedInterfaces = this.getImplementedOrExtendedInterfaces(interfaces, cls);
37
+ implementedInterfaces.forEach(impInter => {
38
+ this.famixFunctions.createFamixInheritance(cls, impInter);
39
+
40
+ console.info(`processInheritances: class: ${cls.getName()}, (${cls.getType().getText()}), impInter: ${(impInter instanceof InterfaceDeclaration) ? impInter.getName() : impInter.getExpression().getText()}, (${(impInter instanceof InterfaceDeclaration) ? impInter.getType().getText() : impInter.getExpression().getText()})`);
41
+ });
42
+ });
43
+
44
+ interfaces.forEach(inter => {
45
+ console.info(`processInheritances: Checking interface inheritance for ${inter.getName()}`);
46
+ const extendedInterfaces = this.getImplementedOrExtendedInterfaces(interfaces, inter);
47
+ extendedInterfaces.forEach(extInter => {
48
+ this.famixFunctions.createFamixInheritance(inter, extInter);
49
+
50
+ console.info(`processInheritances: inter: ${inter.getName()}, (${inter.getType().getText()}), extInter: ${(extInter instanceof InterfaceDeclaration) ? extInter.getName() : extInter.getExpression().getText()}, (${(extInter instanceof InterfaceDeclaration) ? extInter.getType().getText() : extInter.getExpression().getText()})`);
51
+ });
52
+ });
53
+ }
54
+
55
+ /**
56
+ * Gets the interfaces implemented or extended by a class or an interface
57
+ * @param interfaces An array of interfaces
58
+ * @param subClass A class or an interface
59
+ * @returns An array of InterfaceDeclaration and ExpressionWithTypeArguments containing the interfaces implemented or extended by the subClass
60
+ */
61
+ private getImplementedOrExtendedInterfaces(interfaces: Array<InterfaceDeclaration>, subClass: ClassDeclaration | InterfaceDeclaration): Array<InterfaceDeclaration | ExpressionWithTypeArguments> {
62
+ let impOrExtInterfaces: Array<ExpressionWithTypeArguments>;
63
+ if (subClass instanceof ClassDeclaration) {
64
+ impOrExtInterfaces = subClass.getImplements();
65
+ }
66
+ else {
67
+ impOrExtInterfaces = subClass.getExtends();
68
+ }
69
+
70
+ const interfacesNames = interfaces.map(i => i.getName());
71
+ const implementedOrExtendedInterfaces = new Array<InterfaceDeclaration | ExpressionWithTypeArguments>();
72
+
73
+ impOrExtInterfaces.forEach(i => {
74
+ if (interfacesNames.includes(i.getExpression().getText())) {
75
+ implementedOrExtendedInterfaces.push(interfaces[interfacesNames.indexOf(i.getExpression().getText())]);
76
+ }
77
+ else {
78
+ implementedOrExtendedInterfaces.push(i);
79
+ }
80
+ });
81
+
82
+ return implementedOrExtendedInterfaces;
83
+ }
84
+ }
@@ -1,51 +1,51 @@
1
- import { MethodDeclaration, FunctionDeclaration, Identifier, ConstructorDeclaration, GetAccessorDeclaration, SetAccessorDeclaration, FunctionExpression } from "ts-morph";
2
- import { FamixFunctions } from "../famix_functions/famix_functions";
3
-
4
- /**
5
- * This class is used to build a Famix model for the invocations
6
- */
7
- export class ProcessInvocations {
8
-
9
- private famixFunctions: FamixFunctions; // FamixFunctions object, it contains all the functions needed to create Famix entities
10
-
11
- /**
12
- * Initializes the ProcessInvocations object
13
- * @param famixFunctions FamixFunctions object, it contains all the functions needed to create Famix entities
14
- */
15
- constructor(famixFunctions: FamixFunctions) {
16
- this.famixFunctions = famixFunctions;
17
- }
18
-
19
- /**
20
- * Builds a Famix model for the invocations of the methods and functions of the source files
21
- * @param methodsAndFunctionsWithId A map of methods and functions with their id
22
- */
23
- public processInvocations(methodsAndFunctionsWithId: Map<number, MethodDeclaration | ConstructorDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | FunctionDeclaration | FunctionExpression>): void {
24
- console.info(`Creating invocations:`);
25
- methodsAndFunctionsWithId.forEach((m, id) => {
26
- console.info(`Invocations to ${(m instanceof MethodDeclaration || m instanceof GetAccessorDeclaration || m instanceof SetAccessorDeclaration || m instanceof FunctionDeclaration) ? m.getName() : ((m instanceof ConstructorDeclaration) ? 'constructor' : (m.getName() ? m.getName() : 'anonymous'))}`);
27
- try {
28
- const temp_nodes = m.findReferencesAsNodes() as Array<Identifier>;
29
- temp_nodes.forEach(node => this.processNodeForInvocations(node, m, id));
30
- } catch (error) {
31
- console.error(`> WARNING: got exception ${error}. Continuing...`);
32
- }
33
- });
34
- }
35
-
36
- /**
37
- * Builds a Famix model for an invocation of a method or a function
38
- * @param n A node
39
- * @param m A method or a function
40
- * @param id The id of the method or the function
41
- */
42
- private processNodeForInvocations(n: Identifier, m: MethodDeclaration | ConstructorDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | FunctionDeclaration | FunctionExpression, id: number): void {
43
- try {
44
- this.famixFunctions.createFamixInvocation(n, m, id);
45
-
46
- console.info(`node: node, (${n.getType().getText()})`);
47
- } catch (error) {
48
- console.error(`> WARNING: got exception ${error}. ScopeDeclaration invalid for ${n.getSymbol().getFullyQualifiedName()}. Continuing...`);
49
- }
50
- }
51
- }
1
+ import { MethodDeclaration, FunctionDeclaration, Identifier, ConstructorDeclaration, GetAccessorDeclaration, SetAccessorDeclaration, FunctionExpression } from "ts-morph";
2
+ import { FamixFunctions } from "../famix_functions/famix_functions";
3
+
4
+ /**
5
+ * This class is used to build a Famix model for the invocations
6
+ */
7
+ export class ProcessInvocations {
8
+
9
+ private famixFunctions: FamixFunctions; // FamixFunctions object, it contains all the functions needed to create Famix entities
10
+
11
+ /**
12
+ * Initializes the ProcessInvocations object
13
+ * @param famixFunctions FamixFunctions object, it contains all the functions needed to create Famix entities
14
+ */
15
+ constructor(famixFunctions: FamixFunctions) {
16
+ this.famixFunctions = famixFunctions;
17
+ }
18
+
19
+ /**
20
+ * Builds a Famix model for the invocations of the methods and functions of the source files
21
+ * @param methodsAndFunctionsWithId A map of methods and functions with their id
22
+ */
23
+ public processInvocations(methodsAndFunctionsWithId: Map<number, MethodDeclaration | ConstructorDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | FunctionDeclaration | FunctionExpression>): void {
24
+ console.info(`Creating invocations:`);
25
+ methodsAndFunctionsWithId.forEach((m, id) => {
26
+ console.info(`Invocations to ${(m instanceof MethodDeclaration || m instanceof GetAccessorDeclaration || m instanceof SetAccessorDeclaration || m instanceof FunctionDeclaration) ? m.getName() : ((m instanceof ConstructorDeclaration) ? 'constructor' : (m.getName() ? m.getName() : 'anonymous'))}`);
27
+ try {
28
+ const temp_nodes = m.findReferencesAsNodes() as Array<Identifier>;
29
+ temp_nodes.forEach(node => this.processNodeForInvocations(node, m, id));
30
+ } catch (error) {
31
+ console.error(`> WARNING: got exception ${error}. Continuing...`);
32
+ }
33
+ });
34
+ }
35
+
36
+ /**
37
+ * Builds a Famix model for an invocation of a method or a function
38
+ * @param n A node
39
+ * @param m A method or a function
40
+ * @param id The id of the method or the function
41
+ */
42
+ private processNodeForInvocations(n: Identifier, m: MethodDeclaration | ConstructorDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | FunctionDeclaration | FunctionExpression, id: number): void {
43
+ try {
44
+ this.famixFunctions.createFamixInvocation(n, m, id);
45
+
46
+ console.info(`node: node, (${n.getType().getText()})`);
47
+ } catch (error) {
48
+ console.error(`> WARNING: got exception ${error}. ScopeDeclaration invalid for ${n.getSymbol().getFullyQualifiedName()}. Continuing...`);
49
+ }
50
+ }
51
+ }