ts2famix 1.0.12 → 1.0.14

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 (135) hide show
  1. package/.eslintrc.json +24 -24
  2. package/LICENSE +23 -23
  3. package/README.md +109 -109
  4. package/dist/analyze.js +107 -0
  5. package/dist/analyze_functions/processAccesses.js +55 -0
  6. package/dist/analyze_functions/processFiles.js +554 -0
  7. package/dist/analyze_functions/processImportClauses.js +70 -0
  8. package/dist/analyze_functions/processInheritances.js +73 -0
  9. package/dist/analyze_functions/processInvocations.js +49 -0
  10. package/dist/famix2puml.js +125 -0
  11. package/dist/famix_functions/famix_functions.js +520 -0
  12. package/dist/famix_functions/famix_functions_associations.js +213 -0
  13. package/dist/famix_functions/famix_functions_index.js +62 -0
  14. package/dist/famix_functions/famix_functions_types.js +114 -0
  15. package/dist/fqn.js +126 -0
  16. package/dist/lib/famix/src/famix_JSON_exporter.js +54 -0
  17. package/dist/lib/famix/src/famix_base_element.js +13 -0
  18. package/dist/lib/famix/src/famix_repository.js +187 -0
  19. package/dist/lib/famix/src/index.js +30 -0
  20. package/dist/lib/famix/src/model/famix/access.js +39 -0
  21. package/dist/lib/famix/src/model/famix/accessor.js +16 -0
  22. package/dist/lib/famix/src/model/famix/alias.js +32 -0
  23. package/dist/lib/famix/src/model/famix/association.js +36 -0
  24. package/dist/lib/famix/src/model/famix/behavioral_entity.js +81 -0
  25. package/dist/lib/famix/src/model/famix/c_source_language.js +16 -0
  26. package/dist/lib/famix/src/model/famix/class.js +70 -0
  27. package/dist/lib/famix/src/model/famix/comment.js +38 -0
  28. package/dist/lib/famix/src/model/famix/container_entity.js +125 -0
  29. package/dist/lib/famix/src/model/famix/custom_source_language.js +23 -0
  30. package/dist/lib/famix/src/model/famix/decorator.js +31 -0
  31. package/dist/lib/famix/src/model/famix/entity.js +16 -0
  32. package/dist/lib/famix/src/model/famix/enum.js +30 -0
  33. package/dist/lib/famix/src/model/famix/enum_value.js +24 -0
  34. package/dist/lib/famix/src/model/famix/function.js +16 -0
  35. package/dist/lib/famix/src/model/famix/implicit_variable.js +16 -0
  36. package/dist/lib/famix/src/model/famix/import_clause.js +39 -0
  37. package/dist/lib/famix/src/model/famix/index.js +87 -0
  38. package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +37 -0
  39. package/dist/lib/famix/src/model/famix/inheritance.js +32 -0
  40. package/dist/lib/famix/src/model/famix/interface.js +63 -0
  41. package/dist/lib/famix/src/model/famix/invocation.js +53 -0
  42. package/dist/lib/famix/src/model/famix/method.js +66 -0
  43. package/dist/lib/famix/src/model/famix/module.js +30 -0
  44. package/dist/lib/famix/src/model/famix/named_entity.js +77 -0
  45. package/dist/lib/famix/src/model/famix/namespace.js +24 -0
  46. package/dist/lib/famix/src/model/famix/parameter.js +24 -0
  47. package/dist/lib/famix/src/model/famix/parameterizable_class.js +30 -0
  48. package/dist/lib/famix/src/model/famix/parameterizable_interface.js +30 -0
  49. package/dist/lib/famix/src/model/famix/parameterized_type.js +36 -0
  50. package/dist/lib/famix/src/model/famix/primitive_type.js +16 -0
  51. package/dist/lib/famix/src/model/famix/property.js +44 -0
  52. package/dist/lib/famix/src/model/famix/reference.js +32 -0
  53. package/dist/lib/famix/src/model/famix/scoping_entity.js +30 -0
  54. package/dist/lib/famix/src/model/famix/script_entity.js +30 -0
  55. package/dist/lib/famix/src/model/famix/source_anchor.js +26 -0
  56. package/dist/lib/famix/src/model/famix/source_language.js +30 -0
  57. package/dist/lib/famix/src/model/famix/sourced_entity.js +55 -0
  58. package/dist/lib/famix/src/model/famix/structural_entity.js +38 -0
  59. package/dist/lib/famix/src/model/famix/text_anchor.js +37 -0
  60. package/dist/lib/famix/src/model/famix/type.js +71 -0
  61. package/dist/lib/famix/src/model/famix/type_parameter.js +24 -0
  62. package/dist/lib/famix/src/model/famix/variable.js +23 -0
  63. package/dist/lib/ts-complex/cyclomatic-service.js +83 -0
  64. package/dist/ts2famix-cli.js +63 -0
  65. package/dist/ts2famix-tsconfig.js +53 -0
  66. package/jest.config-old.ts +199 -199
  67. package/package.json +47 -47
  68. package/src/analyze.ts +94 -94
  69. package/src/analyze_functions/processAccesses.ts +57 -57
  70. package/src/analyze_functions/processFiles.ts +669 -669
  71. package/src/analyze_functions/processImportClauses.ts +77 -77
  72. package/src/analyze_functions/processInheritances.ts +84 -84
  73. package/src/analyze_functions/processInvocations.ts +51 -51
  74. package/src/famix2puml.ts +119 -119
  75. package/src/famix_functions/famix_functions.ts +559 -559
  76. package/src/famix_functions/famix_functions_associations.ts +215 -215
  77. package/src/famix_functions/famix_functions_index.ts +44 -44
  78. package/src/famix_functions/famix_functions_types.ts +105 -105
  79. package/src/generate_uml.sh +16 -16
  80. package/src/lib/famix/License.md +22 -22
  81. package/src/lib/famix/package-lock.json +301 -301
  82. package/src/lib/famix/package.json +27 -27
  83. package/src/lib/famix/readme.md +4 -4
  84. package/src/lib/famix/src/famix_JSON_exporter.ts +56 -56
  85. package/src/lib/famix/src/famix_base_element.ts +18 -18
  86. package/src/lib/famix/src/famix_repository.ts +199 -199
  87. package/src/lib/famix/src/index.ts +8 -8
  88. package/src/lib/famix/src/model/famix/access.ts +53 -53
  89. package/src/lib/famix/src/model/famix/accessor.ts +15 -15
  90. package/src/lib/famix/src/model/famix/alias.ts +41 -41
  91. package/src/lib/famix/src/model/famix/association.ts +44 -44
  92. package/src/lib/famix/src/model/famix/behavioral_entity.ts +107 -107
  93. package/src/lib/famix/src/model/famix/c_source_language.ts +15 -15
  94. package/src/lib/famix/src/model/famix/class.ts +86 -86
  95. package/src/lib/famix/src/model/famix/comment.ts +50 -50
  96. package/src/lib/famix/src/model/famix/container_entity.ts +165 -165
  97. package/src/lib/famix/src/model/famix/custom_source_language.ts +27 -27
  98. package/src/lib/famix/src/model/famix/decorator.ts +39 -39
  99. package/src/lib/famix/src/model/famix/entity.ts +15 -15
  100. package/src/lib/famix/src/model/famix/enum.ts +31 -31
  101. package/src/lib/famix/src/model/famix/enum_value.ts +29 -29
  102. package/src/lib/famix/src/model/famix/function.ts +15 -15
  103. package/src/lib/famix/src/model/famix/implicit_variable.ts +15 -15
  104. package/src/lib/famix/src/model/famix/import_clause.ts +53 -53
  105. package/src/lib/famix/src/model/famix/index.ts +42 -42
  106. package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +49 -49
  107. package/src/lib/famix/src/model/famix/inheritance.ts +42 -42
  108. package/src/lib/famix/src/model/famix/interface.ts +75 -75
  109. package/src/lib/famix/src/model/famix/invocation.ts +68 -68
  110. package/src/lib/famix/src/model/famix/method.ts +96 -96
  111. package/src/lib/famix/src/model/famix/module.ts +31 -31
  112. package/src/lib/famix/src/model/famix/named_entity.ts +98 -98
  113. package/src/lib/famix/src/model/famix/namespace.ts +28 -28
  114. package/src/lib/famix/src/model/famix/parameter.ts +29 -29
  115. package/src/lib/famix/src/model/famix/parameterizable_class.ts +31 -31
  116. package/src/lib/famix/src/model/famix/parameterizable_interface.ts +31 -31
  117. package/src/lib/famix/src/model/famix/parameterized_type.ts +40 -40
  118. package/src/lib/famix/src/model/famix/primitive_type.ts +15 -15
  119. package/src/lib/famix/src/model/famix/property.ts +54 -54
  120. package/src/lib/famix/src/model/famix/reference.ts +42 -42
  121. package/src/lib/famix/src/model/famix/scoping_entity.ts +31 -31
  122. package/src/lib/famix/src/model/famix/script_entity.ts +38 -38
  123. package/src/lib/famix/src/model/famix/source_anchor.ts +31 -31
  124. package/src/lib/famix/src/model/famix/source_language.ts +31 -31
  125. package/src/lib/famix/src/model/famix/sourced_entity.ts +70 -70
  126. package/src/lib/famix/src/model/famix/structural_entity.ts +44 -44
  127. package/src/lib/famix/src/model/famix/text_anchor.ts +49 -49
  128. package/src/lib/famix/src/model/famix/type.ts +88 -88
  129. package/src/lib/famix/src/model/famix/type_parameter.ts +33 -33
  130. package/src/lib/famix/src/model/famix/variable.ts +28 -28
  131. package/src/lib/famix/tsconfig.json +26 -26
  132. package/src/lib/famix/tslint.json +14 -14
  133. package/src/lib/ts-complex/cyclomatic-service.ts +85 -85
  134. package/src/ts2famix-cli.ts +39 -39
  135. package/tsconfig.json +69 -69
@@ -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
+ }