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 71 72 73 74 75 76 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 11758x 11758x 11758x 11758x 11758x 46341x 46341x 46341x 46341x 46341x 46341x 46341x 11758x 11758x 11245x 11245x 11758x 11758x 239x 239x 11758x 11758x 258x 258x 258x 128x 128x 62x 62x 61x 62x 1x 1x 1x 62x 128x 258x 258x 130x 130x 56x 56x 54x 56x 2x 2x 2x 56x 130x 258x 258x 58x 58x 14x 14x 13x 14x 1x 1x 1x 14x 58x 258x 258x 258x 11758x 11758x | import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {Issue} from "../issue";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
export class MethodImplementedTwiceConf extends BasicRuleConfig {
}
export class MethodImplementedTwice extends ABAPRule {
private conf = new MethodImplementedTwiceConf();
public getMetadata(): IRuleMetadata {
return {
key: "method_implemented_twice",
title: "Method implemented twice",
shortDescription: `Reports an error if a method is implemented or defined twice`,
tags: [RuleTag.SingleFile, RuleTag.Syntax],
};
}
public getConfig() {
return this.conf;
}
public setConfig(conf: MethodImplementedTwiceConf): void {
this.conf = conf;
}
public runParsed(file: ABAPFile) {
const issues: Issue[] = [];
for (const classDef of file.getInfo().listClassImplementations()) {
const names: {[index: string]: boolean} = {};
for (const m of classDef.methods) {
const name = m.getName().toUpperCase();
if (names[name] === undefined) {
names[name] = true;
} else {
const message = `Method ${name} implemented twice`;
issues.push(Issue.atToken(file, m.getToken(), message, this.getMetadata().key, this.getConfig().severity));
}
}
}
for (const classDef of file.getInfo().listClassDefinitions()) {
const names: {[index: string]: boolean} = {};
for (const m of classDef.methods) {
const name = m.name.toUpperCase();
if (names[name] === undefined) {
names[name] = true;
} else {
const message = `Method ${name} defined twice`;
issues.push(Issue.atToken(file, m.identifier.getToken(), message, this.getMetadata().key, this.getConfig().severity));
}
}
}
for (const iDef of file.getInfo().listInterfaceDefinitions()) {
const names: {[index: string]: boolean} = {};
for (const m of iDef.methods) {
const name = m.name.toUpperCase();
if (names[name] === undefined) {
names[name] = true;
} else {
const message = `Method ${name} implemented twice`;
issues.push(Issue.atIdentifier(m.identifier, message, this.getMetadata().key, this.getConfig().severity));
}
}
}
return issues;
}
} |