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 359x 359x 359x 359x 359x 359x 359x 71x 71x 288x 359x 295x 295x 1811x 1811x 73x 73x 73x 73x 1811x 130x 1738x 74x 73x 74x 1x 1x 73x 1608x 1534x 1534x 212x 212x 1811x 295x 288x 288x 288x 1x 1x 73x 73x 73x 73x 73x 73x 73x 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;
}
} |