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 293x 293x 293x 293x 293x 293x 293x 53x 53x 240x 293x 247x 1601x 1601x 33x 33x 33x 33x 1601x 33x 33x 33x 33x 1568x 1535x 1535x 123x 123x 1601x 247x 240x 240x 240x 1x 1x 33x 33x 33x 33x 33x 33x 33x 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, 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; } } |