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 1463x 1463x 1463x 1x 1x 4712x 2339x 1588x 3961x 1x 1x 305x 305x 305x 305x 1x 1x 1x 1x 275x 275x 81x 81x 81x 275x 1x 1x 1463x 1463x 275x 275x 1188x 1188x 1463x 1188x 1188x 1463x 48x 48x 48x 1188x 1188x 1463x 11x 11x 11x 1188x 1188x 1463x 522x 522x 522x 1188x 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;
}
}
} |