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 333x 333x 333x 333x 333x 333x 333x 62x 62x 271x 333x 278x 1752x 1752x 35x 35x 35x 35x 1752x 35x 35x 35x 35x 1717x 1682x 1682x 126x 126x 1752x 278x 271x 271x 271x 1x 1x 35x 35x 35x 35x 35x 35x 35x 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; } } |