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 356x 356x 356x 356x 356x 356x 356x 63x 63x 293x 356x 300x 300x 1867x 1867x 68x 68x 68x 68x 1867x 124x 1799x 69x 68x 69x 1x 1x 68x 1675x 1606x 1606x 213x 213x 1867x 300x 293x 293x 293x 1x 1x 68x 68x 68x 68x 68x 68x 68x 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; } } |