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 11401x 11401x 11401x 11401x 11401x 34025x 34025x 34025x 34025x 34025x 34025x 34025x 11401x 11401x 10900x 10900x 11401x 11401x 233x 233x 11401x 11401x 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 11401x 11401x | 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;
}
} |