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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import {Identifier} from "../4_file_information/_identifier";
import {StructureNode} from "../nodes";
import * as Structures from "../3_structures/structures";
import * as Statements from "../2_statements/statements";
import * as Expressions from "../2_statements/expressions";
import {MethodImplementation} from "./method_implementation";
import {IClassImplementation} from "./_class_implementation";
export class ClassImplementation extends Identifier implements IClassImplementation {
private readonly node: StructureNode;
public constructor(node: StructureNode, filename: string) {
if (!(node.get() instanceof Structures.ClassImplementation)) {
throw new Error("ClassImplementation, unexpected node type");
}
const name = node.findFirstStatement(Statements.ClassImplementation)!.findFirstExpression(Expressions.ClassName)!.getFirstToken();
super(name, filename);
this.node = node;
}
public getMethodImplementations(): MethodImplementation[] {
const ret: MethodImplementation[] = [];
for (const method of this.node.findAllStructures(Structures.Method)) {
ret.push(new MethodImplementation(method, this.filename));
}
return ret;
}
public getMethodImplementation(name: string): MethodImplementation | undefined {
for (const impl of this.getMethodImplementations()) {
if (impl.getName().toUpperCase() === name.toUpperCase()) {
return impl;
}
}
return undefined;
}
} |