UNPKG

@abaplint/core

Version:
61 lines (60 loc) 2.38 kB
"use strict"; 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