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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 458x 458x 458x 458x 458x 458x 458x 458x 458x 458x 458x 5x 5x 453x 453x 458x 351x 351x 351x 453x 453x 453x 453x 453x 453x 458x 38x 19x 19x 19x 38x 19x 19x 453x 1x | import {StatementNode} from "../../nodes"; import {CurrentScope} from "../_current_scope"; import * as Expressions from "../../2_statements/expressions"; import {ObjectOriented} from "../_object_oriented"; import {ScopeType} from "../_scope_type"; import {ReferenceType} from "../_reference"; import {StatementSyntax} from "../_statement_syntax"; export class MethodImplementation implements StatementSyntax { public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void { const helper = new ObjectOriented(scope); const className = scope.getName(); const methodToken = node.findFirstExpression(Expressions.MethodName)!.getFirstToken(); const methodName = methodToken?.getStr(); const classDefinition = scope.findClassDefinition(className); if (classDefinition === undefined) { throw new Error("Class definition for \"" + className + "\" not found"); } const {method: methodDefinition} = helper.searchMethodName(classDefinition, methodName); if (methodDefinition === undefined) { throw new Error("Method definition \"" + methodName + "\" not found"); } const start = node.getFirstToken().getStart(); if (methodDefinition.isStatic() === false) { scope.push(ScopeType.MethodInstance, methodName, start, filename); scope.addList(classDefinition.getAttributes().getInstance()); } scope.push(ScopeType.Method, methodName, start, filename); scope.addReference(methodToken, methodDefinition, ReferenceType.MethodImplementationReference, filename); scope.addList(methodDefinition.getParameters().getAll()); for (const i of helper.findInterfaces(classDefinition)) { if (methodName.toUpperCase().startsWith(i.name.toUpperCase() + "~") === false) { continue; } const idef = scope.findInterfaceDefinition(i.name); if (idef === undefined) { continue; } scope.addReference(methodToken, idef, ReferenceType.ObjectOrientedReference, filename); } } } |