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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 333x 333x 333x 333x 333x 333x 333x 62x 62x 271x 333x 278x 278x 1739x 1739x 64x 64x 64x 64x 1739x 120x 1675x 65x 64x 65x 1x 1x 64x 1555x 1490x 1490x 208x 208x 1739x 278x 271x 271x 271x 1x 1x 64x 64x 64x 64x 64x 64x 64x 1x | import * as Statements from "../abap/2_statements/statements"; import * as Expressions from "../abap/2_statements/expressions"; import {Position} from "../position"; import {MethodName} from "../abap/2_statements/expressions"; import {StatementNode} from "../abap/nodes"; import {IObject} from "../objects/_iobject"; import {ABAPObject} from "../objects/_abap_object"; import {Empty, Comment} from "../abap/2_statements/statements/_statement"; import {ABAPFile} from "../abap/abap_file"; export interface IMethodLengthResult { className: string; name: string; count: number; file: ABAPFile; pos: Position; } export class MethodLengthStats { public static run(obj: IObject): IMethodLengthResult[] { const res: IMethodLengthResult[] = []; let pos: Position | undefined = undefined; let methodName: string = ""; let count = 0; let method: boolean = false; if (!(obj instanceof ABAPObject)) { return []; } for (const file of obj.getABAPFiles()) { let className = ""; for (const stat of file.getStatements()) { const type = stat.get(); if (type instanceof Statements.MethodImplementation) { pos = stat.getFirstToken().getStart(); methodName = this.findName(stat); method = true; count = 0; } else if (type instanceof Statements.ClassImplementation) { className = stat.findFirstExpression(Expressions.ClassName)?.concatTokens() || "INTERNAL_ERROR"; } else if (type instanceof Statements.EndMethod) { if (pos) { res.push({name: methodName, className, count, file, pos}); } else { continue; } method = false; } else if (method === true && !(type instanceof Comment) && !(type instanceof Empty)) { count = count + 1; } } } return res; } private static findName(stat: StatementNode): string { let name: string = ""; const nameExpr = stat.findFirstExpression(MethodName); if (nameExpr) { name = nameExpr.getFirstToken().getStr(); } else { throw new Error("MethodLength, findName, expected MethodName"); } return name; } } |