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 11659x 11659x 11659x 11659x 11659x 45945x 45945x 45945x 45945x 45945x 45945x 45945x 11659x 11659x 11146x 11146x 11659x 11659x 239x 239x 11659x 11659x 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 11659x 11659x | 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;
}
} |