Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1443x 1443x 1443x 1x 1x 4637x 2317x 1568x 3888x 1x 1x 303x 303x 303x 303x 1x 1x 1x 1x 273x 273x 79x 79x 79x 273x 1x 1x 1443x 1443x 273x 273x 1170x 1170x 1443x 1170x 1170x 1443x 48x 48x 48x 1170x 1170x 1443x 11x 11x 11x 1170x 1170x 1443x 516x 516x 516x 1170x 1x 1x | import {MethodDefinition} from "./method_definition";
import {StructureNode} from "../nodes";
import * as Structures from "../3_structures/structures";
import {MethodDef} from "../2_statements/statements";
import {Visibility} from "../4_file_information/visibility";
import {IMethodDefinitions} from "./_method_definitions";
import {IMethodDefinition} from "./_method_definition";
import {SyntaxInput} from "../5_syntax/_syntax_input";
export class MethodDefinitions implements IMethodDefinitions {
private readonly all: {[index: string]: IMethodDefinition} = {};
public constructor(node: StructureNode, input: SyntaxInput) {
this.all = {};
this.parse(node, input);
}
public* getAll(): Generator<IMethodDefinition, void, undefined> {
for (const a in this.all) {
yield this.all[a];
}
}
public getByName(name: string | undefined): IMethodDefinition | undefined {
if (name === undefined) {
return undefined;
}
return this.all[name.toUpperCase()];
}
///////////////////////
private parseInterface(node: StructureNode, input: SyntaxInput) {
const defs = node.findAllStatements(MethodDef);
for (const def of defs) {
const m = new MethodDefinition(def, Visibility.Public, input);
this.all[m.getName().toUpperCase()] = m;
}
}
private parse(node: StructureNode, input: SyntaxInput) {
const idef = node.findDirectStructure(Structures.Interface);
if (idef) {
return this.parseInterface(node, input);
}
const cdef = node.findDirectStructure(Structures.ClassDefinition);
if (!cdef) {
throw new Error("MethodDefinitions, expected ClassDefinition as part of input node");
}
const pri = cdef.findDirectStructure(Structures.PrivateSection);
for (const def of pri?.findAllStatements(MethodDef) || []) {
const m = new MethodDefinition(def, Visibility.Private, input);
this.all[m.getName().toUpperCase()] = m;
}
const pro = node.findDirectStructure(Structures.ProtectedSection);
for (const def of pro?.findAllStatements(MethodDef) || []) {
const m = new MethodDefinition(def, Visibility.Protected, input);
this.all[m.getName().toUpperCase()] = m;
}
const pub = node.findDirectStructure(Structures.PublicSection);
for (const def of pub?.findAllStatements(MethodDef) || []) {
const m = new MethodDefinition(def, Visibility.Public, input);
this.all[m.getName().toUpperCase()] = m;
}
}
} |