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 336x 336x 336x 336x 336x 336x 336x 71x 71x 265x 336x 272x 1716x 1716x 4x 4x 4x 4x 1716x 4x 4x 4x 4x 1712x 1708x 1708x 8x 8x 1716x 272x 265x 265x 265x 1x 1x 4x 4x 4x 4x 4x 4x 4x 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;
}
} |