ts2famix 1.0.11 → 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.
- package/.eslintrc.json +24 -24
- package/LICENSE +23 -23
- package/README.md +109 -109
- package/jest.config-old.ts +199 -199
- package/package.json +47 -47
- package/src/analyze.ts +94 -94
- package/src/analyze_functions/processAccesses.ts +57 -57
- package/src/analyze_functions/processFiles.ts +669 -661
- package/src/analyze_functions/processImportClauses.ts +77 -77
- package/src/analyze_functions/processInheritances.ts +84 -84
- package/src/analyze_functions/processInvocations.ts +51 -51
- package/src/famix2puml.ts +119 -119
- package/src/famix_functions/famix_functions.ts +559 -555
- package/src/famix_functions/famix_functions_associations.ts +215 -215
- package/src/famix_functions/famix_functions_index.ts +44 -44
- package/src/famix_functions/famix_functions_types.ts +105 -100
- package/src/generate_uml.sh +16 -16
- package/src/lib/famix/License.md +22 -22
- package/src/lib/famix/package-lock.json +301 -301
- package/src/lib/famix/package.json +27 -27
- package/src/lib/famix/readme.md +4 -4
- package/src/lib/famix/src/famix_JSON_exporter.ts +56 -56
- package/src/lib/famix/src/famix_base_element.ts +18 -18
- package/src/lib/famix/src/famix_repository.ts +199 -199
- package/src/lib/famix/src/index.ts +8 -8
- package/src/lib/famix/src/model/famix/access.ts +53 -53
- package/src/lib/famix/src/model/famix/accessor.ts +15 -15
- package/src/lib/famix/src/model/famix/alias.ts +41 -41
- package/src/lib/famix/src/model/famix/association.ts +44 -44
- package/src/lib/famix/src/model/famix/behavioral_entity.ts +107 -107
- package/src/lib/famix/src/model/famix/c_source_language.ts +15 -15
- package/src/lib/famix/src/model/famix/class.ts +86 -86
- package/src/lib/famix/src/model/famix/comment.ts +50 -50
- package/src/lib/famix/src/model/famix/container_entity.ts +165 -165
- package/src/lib/famix/src/model/famix/custom_source_language.ts +27 -27
- package/src/lib/famix/src/model/famix/decorator.ts +39 -39
- package/src/lib/famix/src/model/famix/entity.ts +15 -15
- package/src/lib/famix/src/model/famix/enum.ts +31 -31
- package/src/lib/famix/src/model/famix/enum_value.ts +29 -29
- package/src/lib/famix/src/model/famix/function.ts +15 -15
- package/src/lib/famix/src/model/famix/implicit_variable.ts +15 -15
- package/src/lib/famix/src/model/famix/import_clause.ts +53 -53
- package/src/lib/famix/src/model/famix/index.ts +42 -42
- package/src/lib/famix/src/model/famix/indexed_file_anchor.ts +49 -49
- package/src/lib/famix/src/model/famix/inheritance.ts +42 -42
- package/src/lib/famix/src/model/famix/interface.ts +75 -75
- package/src/lib/famix/src/model/famix/invocation.ts +68 -68
- package/src/lib/famix/src/model/famix/method.ts +96 -96
- package/src/lib/famix/src/model/famix/module.ts +31 -31
- package/src/lib/famix/src/model/famix/named_entity.ts +98 -98
- package/src/lib/famix/src/model/famix/namespace.ts +28 -28
- package/src/lib/famix/src/model/famix/parameter.ts +29 -29
- package/src/lib/famix/src/model/famix/parameterizable_class.ts +31 -31
- package/src/lib/famix/src/model/famix/parameterizable_interface.ts +31 -31
- package/src/lib/famix/src/model/famix/parameterized_type.ts +40 -40
- package/src/lib/famix/src/model/famix/primitive_type.ts +15 -15
- package/src/lib/famix/src/model/famix/property.ts +54 -54
- package/src/lib/famix/src/model/famix/reference.ts +42 -42
- package/src/lib/famix/src/model/famix/scoping_entity.ts +31 -31
- package/src/lib/famix/src/model/famix/script_entity.ts +38 -38
- package/src/lib/famix/src/model/famix/source_anchor.ts +31 -31
- package/src/lib/famix/src/model/famix/source_language.ts +31 -31
- package/src/lib/famix/src/model/famix/sourced_entity.ts +70 -70
- package/src/lib/famix/src/model/famix/structural_entity.ts +44 -44
- package/src/lib/famix/src/model/famix/text_anchor.ts +49 -49
- package/src/lib/famix/src/model/famix/type.ts +88 -88
- package/src/lib/famix/src/model/famix/type_parameter.ts +33 -33
- package/src/lib/famix/src/model/famix/variable.ts +28 -28
- package/src/lib/famix/tsconfig.json +26 -26
- package/src/lib/famix/tslint.json +14 -14
- package/src/lib/ts-complex/cyclomatic-service.ts +85 -85
- package/src/ts2famix-cli.ts +39 -39
- package/tsconfig.json +69 -69
- package/dist/analyze.js +0 -102
- package/dist/analyze_functions/processAccesses.js +0 -47
- package/dist/analyze_functions/processFiles.js +0 -540
- package/dist/analyze_functions/processImportClauses.js +0 -70
- package/dist/analyze_functions/processInheritances.js +0 -73
- package/dist/analyze_functions/processInvocations.js +0 -49
- package/dist/famix2puml.js +0 -125
- package/dist/famix_functions/famix_functions.js +0 -513
- package/dist/famix_functions/famix_functions_associations.js +0 -205
- package/dist/famix_functions/famix_functions_index.js +0 -62
- package/dist/famix_functions/famix_functions_types.js +0 -110
- package/dist/fqn.js +0 -126
- package/dist/fqp_implementation.js +0 -73
- package/dist/lib/famix/src/famix_JSON_exporter.js +0 -54
- package/dist/lib/famix/src/famix_base_element.js +0 -13
- package/dist/lib/famix/src/famix_repository.js +0 -187
- package/dist/lib/famix/src/index.js +0 -30
- package/dist/lib/famix/src/model/famix/access.js +0 -39
- package/dist/lib/famix/src/model/famix/accessor.js +0 -16
- package/dist/lib/famix/src/model/famix/alias.js +0 -32
- package/dist/lib/famix/src/model/famix/association.js +0 -36
- package/dist/lib/famix/src/model/famix/behavioral_entity.js +0 -81
- package/dist/lib/famix/src/model/famix/c_source_language.js +0 -16
- package/dist/lib/famix/src/model/famix/class.js +0 -70
- package/dist/lib/famix/src/model/famix/comment.js +0 -38
- package/dist/lib/famix/src/model/famix/container_entity.js +0 -125
- package/dist/lib/famix/src/model/famix/custom_source_language.js +0 -23
- package/dist/lib/famix/src/model/famix/decorator.js +0 -31
- package/dist/lib/famix/src/model/famix/entity.js +0 -16
- package/dist/lib/famix/src/model/famix/enum.js +0 -30
- package/dist/lib/famix/src/model/famix/enum_value.js +0 -24
- package/dist/lib/famix/src/model/famix/function.js +0 -16
- package/dist/lib/famix/src/model/famix/implicit_variable.js +0 -16
- package/dist/lib/famix/src/model/famix/import_clause.js +0 -39
- package/dist/lib/famix/src/model/famix/index.js +0 -87
- package/dist/lib/famix/src/model/famix/indexed_file_anchor.js +0 -37
- package/dist/lib/famix/src/model/famix/inheritance.js +0 -32
- package/dist/lib/famix/src/model/famix/interface.js +0 -63
- package/dist/lib/famix/src/model/famix/invocation.js +0 -53
- package/dist/lib/famix/src/model/famix/method.js +0 -66
- package/dist/lib/famix/src/model/famix/module.js +0 -30
- package/dist/lib/famix/src/model/famix/named_entity.js +0 -77
- package/dist/lib/famix/src/model/famix/namespace.js +0 -24
- package/dist/lib/famix/src/model/famix/parameter.js +0 -24
- package/dist/lib/famix/src/model/famix/parameterizable_class.js +0 -30
- package/dist/lib/famix/src/model/famix/parameterizable_interface.js +0 -30
- package/dist/lib/famix/src/model/famix/parameterized_type.js +0 -36
- package/dist/lib/famix/src/model/famix/primitive_type.js +0 -16
- package/dist/lib/famix/src/model/famix/property.js +0 -44
- package/dist/lib/famix/src/model/famix/reference.js +0 -32
- package/dist/lib/famix/src/model/famix/scoping_entity.js +0 -30
- package/dist/lib/famix/src/model/famix/script_entity.js +0 -30
- package/dist/lib/famix/src/model/famix/source_anchor.js +0 -26
- package/dist/lib/famix/src/model/famix/source_language.js +0 -30
- package/dist/lib/famix/src/model/famix/sourced_entity.js +0 -55
- package/dist/lib/famix/src/model/famix/structural_entity.js +0 -38
- package/dist/lib/famix/src/model/famix/text_anchor.js +0 -37
- package/dist/lib/famix/src/model/famix/type.js +0 -71
- package/dist/lib/famix/src/model/famix/type_parameter.js +0 -24
- package/dist/lib/famix/src/model/famix/variable.js +0 -23
- package/dist/lib/ts-complex/cyclomatic-service.js +0 -83
- package/dist/ts2famix-cli.js +0 -63
- package/dist/ts2famix-tsconfig.js +0 -53
- package/metrics.ts +0 -23
- package/output.debug.txt +0 -1351
- 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
|
+
}
|