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 11313x 11313x 11313x 11313x 11313x 33762x 33762x 33762x 33762x 33762x 33762x 33762x 11313x 11313x 10814x 10814x 11313x 11313x 232x 232x 11313x 11313x 251x 251x 251x 123x 123x 56x 56x 55x 56x 1x 1x 1x 56x 123x 251x 251x 125x 125x 50x 50x 48x 50x 2x 2x 2x 50x 125x 251x 251x 58x 58x 14x 14x 13x 14x 1x 1x 1x 14x 58x 251x 251x 251x 11313x 11313x | 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;
}
} |