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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 483x 483x 483x 483x 483x 483x 483x 483x 2x 2x 2x 2x 481x 481x 481x 481x 483x 369x 369x 369x 481x 481x 481x 481x 483x 7x 7x 7x 7x 474x 474x 474x 474x 483x 41x 22x 22x 19x 41x 19x 19x 474x 1x | import {StatementNode} from "../../nodes"; 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"; import {SyntaxInput, syntaxIssue} from "../_syntax_input"; export class MethodImplementation implements StatementSyntax { public runSyntax(node: StatementNode, input: SyntaxInput): void { const helper = new ObjectOriented(input.scope); const className = input.scope.getName(); const methodToken = node.findFirstExpression(Expressions.MethodName)!.getFirstToken(); const methodName = methodToken?.getStr(); const classDefinition = input.scope.findClassDefinition(className); if (classDefinition === undefined) { const message = "Class definition for \"" + className + "\" not found"; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return; } const {method: methodDefinition} = helper.searchMethodName(classDefinition, methodName); const start = node.getFirstToken().getStart(); if (methodDefinition?.isStatic() === false) { input.scope.push(ScopeType.MethodInstance, methodName, start, input.filename); input.scope.addList(classDefinition.getAttributes().getInstance()); } input.scope.push(ScopeType.Method, methodName, start, input.filename); // note: the scope must be pushed before returning if (methodDefinition === undefined) { const message = "Method definition \"" + methodName + "\" not found"; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return; } input.scope.addReference(methodToken, methodDefinition, ReferenceType.MethodImplementationReference, input.filename); input.scope.addList(methodDefinition.getParameters().getAll()); for (const i of helper.findInterfaces(classDefinition)) { if (methodName.toUpperCase().startsWith(i.name.toUpperCase() + "~") === false) { continue; } const idef = input.scope.findInterfaceDefinition(i.name); if (idef === undefined) { continue; } input.scope.addReference(methodToken, idef, ReferenceType.ObjectOrientedReference, input.filename); } } } |