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 325x 325x 325x 325x 325x 325x 325x 66x 66x 259x 325x 266x 266x 1662x 1662x 67x 67x 67x 67x 1662x 124x 1595x 68x 67x 68x 1x 1x 67x 1471x 1403x 1403x 212x 212x 1662x 266x 259x 259x 259x 1x 1x 67x 67x 67x 67x 67x 67x 67x 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;
}
} |