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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 342x 342x 342x 342x 342x 342x 342x 63x 63x 279x 342x 286x 1795x 1795x 41x 41x 41x 41x 1795x 41x 41x 41x 41x 1754x 1713x 1713x 146x 146x 1795x 286x 279x 279x 279x 1x 1x 41x 41x 41x 41x 41x 41x 41x 1x | import * as Statements from "../abap/2_statements/statements"; import {Position} from "../position"; import {FormName} 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 {IMethodLengthResult} from "./method_length_stats"; export class FormLengthStats { public static run(obj: IObject): IMethodLengthResult[] { const res: IMethodLengthResult[] = []; let pos: Position | undefined = undefined; let name: string = ""; let count = 0; let form: boolean = false; if (!(obj instanceof ABAPObject)) { return []; } for (const file of obj.getABAPFiles()) { for (const stat of file.getStatements()) { const type = stat.get(); if (type instanceof Statements.Form) { pos = stat.getFirstToken().getStart(); name = this.findName(stat); form = true; count = 0; } else if (type instanceof Statements.EndForm) { if (pos) { res.push({name: name, className: "", count, file, pos}); } else { continue; } form = false; } else if (form === 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(FormName); if (nameExpr) { name = nameExpr.getFirstToken().getStr(); } else { throw new Error("FormLength, findName, expected FormName"); } return name; } } |