@abaplint/core
Version:
abaplint - Core API
61 lines (60 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConstructorVisibilityPublic = exports.ConstructorVisibilityPublicConf = void 0;
const issue_1 = require("../issue");
const _basic_rule_config_1 = require("./_basic_rule_config");
const _irule_1 = require("./_irule");
const objects_1 = require("../objects");
const visibility_1 = require("../abap/4_file_information/visibility");
class ConstructorVisibilityPublicConf extends _basic_rule_config_1.BasicRuleConfig {
}
exports.ConstructorVisibilityPublicConf = ConstructorVisibilityPublicConf;
class ConstructorVisibilityPublic {
constructor() {
this.conf = new ConstructorVisibilityPublicConf();
}
getMetadata() {
return {
key: "constructor_visibility_public",
title: "Check constructor visibility is public",
shortDescription: `Constructor must be placed in the public section, even if the class is not CREATE PUBLIC.`,
extendedInformation: `
This only applies to global classes.
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#if-your-global-class-is-create-private-leave-the-constructor-public
https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abeninstance_constructor_guidl.htm`,
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
};
}
getMessage() {
return "Constructor visibility should be public";
}
getConfig() {
return this.conf;
}
initialize(_reg) {
return this;
}
setConfig(conf) {
this.conf = conf;
}
run(obj) {
const issues = [];
if (!(obj instanceof objects_1.Class)) {
return [];
}
const def = obj.getClassDefinition();
if (def === undefined) {
return [];
}
for (const method of def.methods) {
if (method.name.toUpperCase() === "CONSTRUCTOR"
&& method.visibility !== visibility_1.Visibility.Public) {
const issue = issue_1.Issue.atIdentifier(method.identifier, this.getMessage(), this.getMetadata().key, this.conf.severity);
issues.push(issue);
}
}
return issues;
}
}
exports.ConstructorVisibilityPublic = ConstructorVisibilityPublic;
//# sourceMappingURL=constructor_visibility_public.js.map