@abaplint/transpiler-cli 2.13.96 → 2.13.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/build/bundle.js +697 -762
  2. package/package.json +3 -3
package/build/bundle.js CHANGED
@@ -8119,7 +8119,9 @@ class Source extends combi_1.Expression {
8119
8119
  const comp = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.Dash), _1.ComponentChain);
8120
8120
  const attr = (0, combi_1.seq)(_1.Arrow, attribute_chain_1.AttributeChain);
8121
8121
  const deref = (0, combi_1.optPrio)((0, combi_1.ver)(version_1.Release.v756, dereference_1.Dereference));
8122
- const dynChain = (0, combi_1.star)((0, combi_1.altPrio)((0, _dynamic_access_1.dynAttr)(), (0, _dynamic_access_1.dynComp)(), dereference_1.Dereference));
8122
+ // below v756 "->*" directly after a functional method call is a syntax error, CAST can be dereferenced
8123
+ const dynChain = (0, combi_1.star)((0, combi_1.seq)((0, combi_1.altPrio)((0, _dynamic_access_1.dynAttr)(), (0, _dynamic_access_1.dynComp)()), (0, combi_1.optPrio)(dereference_1.Dereference)));
8124
+ const castDeref = (0, combi_1.seq)(_1.Cast, dereference_1.Dereference);
8123
8125
  const method = (0, combi_1.seq)(_1.MethodCallChain, (0, combi_1.optPrio)((0, combi_1.altPrio)(attr, comp)), deref, dynChain);
8124
8126
  const rparen = (0, combi_1.tok)(tokens_1.WParenRightW);
8125
8127
  const rparenNoSpace = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.ParenRightW), (0, combi_1.tok)(tokens_1.WParenRightW));
@@ -8129,7 +8131,7 @@ class Source extends combi_1.Expression {
8129
8131
  const after = (0, combi_1.seq)((0, combi_1.altPrio)("&", "&&", _1.ArithOperator), Source);
8130
8132
  const bool = (0, combi_1.seq)((0, combi_1.altPrio)((0, combi_1.ver)(version_1.Release.v702, (0, combi_1.regex)(/^BOOLC$/i), { also: combi_1.AlsoIn.OpenABAP }), (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.regex)(/^XSDBOOL$/i), { also: combi_1.AlsoIn.OpenABAP })), (0, combi_1.tok)(tokens_1.ParenLeftW), _1.Cond, ")");
8131
8133
  const prefix = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WPlus), "BIT-NOT");
8132
- const old = (0, combi_1.seq)((0, combi_1.optPrio)(prefix), (0, combi_1.altPrio)(_1.Constant, _1.StringTemplate, text_element_1.TextElement, bool, method, (0, combi_1.seq)(_1.FieldChain, deref), paren), (0, combi_1.optPrio)(after));
8134
+ const old = (0, combi_1.seq)((0, combi_1.optPrio)(prefix), (0, combi_1.altPrio)(_1.Constant, _1.StringTemplate, text_element_1.TextElement, bool, castDeref, method, (0, combi_1.seq)(_1.FieldChain, deref), paren), (0, combi_1.optPrio)(after));
8133
8135
  const corr = (0, combi_1.ver)(version_1.Release.v740sp05, (0, combi_1.seq)("CORRESPONDING", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.CorrespondingBody, rparen, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
8134
8136
  const conv = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("CONV", _1.TypeNameOrInfer, lparenNoSpace, _1.ConvBody, rparenNoSpace, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
8135
8137
  const swit = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("SWITCH", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.SwitchBody, rparenNoSpace, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
@@ -13866,7 +13868,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@a
13866
13868
  class CreateData {
13867
13869
  getMatcher() {
13868
13870
  const areaHandle = (0, combi_1.seq)("AREA HANDLE", expressions_1.Source);
13869
- const typeHandle = (0, combi_1.seq)("TYPE HANDLE", expressions_1.Source);
13871
+ const typeHandle = (0, combi_1.seq)("TYPE HANDLE", expressions_1.SimpleSource3);
13870
13872
  const type = (0, combi_1.seq)((0, combi_1.alt)("TYPE", "TYPE REF TO", "TYPE TABLE OF", "TYPE TABLE OF REF TO", "TYPE SORTED TABLE OF", "TYPE HASHED TABLE OF", "TYPE STANDARD TABLE OF", "TYPE LINE OF"), (0, combi_1.alt)(expressions_1.TypeName, expressions_1.Dynamic));
13871
13873
  const like = (0, combi_1.seq)((0, combi_1.alt)("LIKE", "LIKE HASHED TABLE OF", "LIKE LINE OF", "LIKE STANDARD TABLE OF", "LIKE SORTED TABLE OF", "LIKE TABLE OF"), (0, combi_1.alt)(expressions_1.Source, expressions_1.Dynamic));
13872
13874
  const length = (0, combi_1.seq)("LENGTH", expressions_1.Source);
@@ -17108,7 +17110,7 @@ class Loop {
17108
17110
  getMatcher() {
17109
17111
  const where = (0, combi_1.seq)("WHERE", (0, combi_1.alt)(expressions_1.ComponentCond, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.Dynamic)));
17110
17112
  const group = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("GROUP BY", loop_group_by_1.LoopGroupBy), { also: combi_1.AlsoIn.OpenABAP });
17111
- const step = (0, combi_1.ver)(version_1.Release.v757, (0, combi_1.seq)("STEP", expressions_1.Source));
17113
+ const step = (0, combi_1.ver)(version_1.Release.v757, (0, combi_1.seq)("STEP", expressions_1.Source), { also: combi_1.AlsoIn.OpenABAP });
17112
17114
  const from = (0, combi_1.seq)("FROM", expressions_1.Source);
17113
17115
  const to = (0, combi_1.seq)("TO", expressions_1.Source);
17114
17116
  const usingKey = (0, combi_1.seq)("USING KEY", (0, combi_1.altPrio)(expressions_1.SimpleName, expressions_1.Dynamic));
@@ -30083,6 +30085,72 @@ function checkOffsetLength(source, sourceType, method, input) {
30083
30085
 
30084
30086
  /***/ },
30085
30087
 
30088
+ /***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_text_symbol.js"
30089
+ /*!***********************************************************************************************!*\
30090
+ !*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_text_symbol.js ***!
30091
+ \***********************************************************************************************/
30092
+ (__unused_webpack_module, exports, __webpack_require__) {
30093
+
30094
+ "use strict";
30095
+
30096
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
30097
+ if (k2 === undefined) k2 = k;
30098
+ var desc = Object.getOwnPropertyDescriptor(m, k);
30099
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
30100
+ desc = { enumerable: true, get: function() { return m[k]; } };
30101
+ }
30102
+ Object.defineProperty(o, k2, desc);
30103
+ }) : (function(o, m, k, k2) {
30104
+ if (k2 === undefined) k2 = k;
30105
+ o[k2] = m[k];
30106
+ }));
30107
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30108
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30109
+ }) : function(o, v) {
30110
+ o["default"] = v;
30111
+ });
30112
+ var __importStar = (this && this.__importStar) || (function () {
30113
+ var ownKeys = function(o) {
30114
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30115
+ var ar = [];
30116
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30117
+ return ar;
30118
+ };
30119
+ return ownKeys(o);
30120
+ };
30121
+ return function (mod) {
30122
+ if (mod && mod.__esModule) return mod;
30123
+ var result = {};
30124
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
30125
+ __setModuleDefault(result, mod);
30126
+ return result;
30127
+ };
30128
+ })();
30129
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
30130
+ exports.checkTextSymbol = checkTextSymbol;
30131
+ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
30132
+ const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
30133
+ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
30134
+ // A text symbol, 'text'(001), is a character literal of type C. Unlike a plain
30135
+ // literal it does not convert when passed to a method parameter typed STRING,
30136
+ // the system reports it as not type-compatible. Returns true if an issue was reported.
30137
+ function checkTextSymbol(source, parameterType, input) {
30138
+ if (source === undefined || !(parameterType instanceof basic_1.StringType)) {
30139
+ return false;
30140
+ }
30141
+ const children = source.getChildren();
30142
+ const constant = children.length === 1 ? source.findDirectExpression(Expressions.Constant) : undefined;
30143
+ if ((constant === null || constant === void 0 ? void 0 : constant.findDirectExpression(Expressions.TextElementString)) === undefined) {
30144
+ return false;
30145
+ }
30146
+ const message = `Text symbol "${source.concatTokens()}" is a character literal, not type-compatible with a STRING parameter`;
30147
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, source.getFirstToken(), message));
30148
+ return true;
30149
+ }
30150
+ //# sourceMappingURL=_check_text_symbol.js.map
30151
+
30152
+ /***/ },
30153
+
30086
30154
  /***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/attribute_chain.js"
30087
30155
  /*!********************************************************************************************!*\
30088
30156
  !*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/attribute_chain.js ***!
@@ -33460,6 +33528,7 @@ const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/
33460
33528
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
33461
33529
  const constant_1 = __webpack_require__(/*! ./constant */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/constant.js");
33462
33530
  const _check_offset_length_1 = __webpack_require__(/*! ./_check_offset_length */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_offset_length.js");
33531
+ const _check_text_symbol_1 = __webpack_require__(/*! ./_check_text_symbol */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_text_symbol.js");
33463
33532
  class MethodCallParam {
33464
33533
  static runSyntax(node, input, method) {
33465
33534
  if (!(node.get() instanceof Expressions.MethodCallParam)) {
@@ -33532,6 +33601,9 @@ class MethodCallParam {
33532
33601
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
33533
33602
  return;
33534
33603
  }
33604
+ else if ((0, _check_text_symbol_1.checkTextSymbol)(child, targetType, input)) {
33605
+ return;
33606
+ }
33535
33607
  else if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(sourceType, targetType, child) === false) {
33536
33608
  const message = "Method parameter type not compatible";
33537
33609
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
@@ -33783,6 +33855,10 @@ const assert_error_1 = __webpack_require__(/*! ../assert_error */ "./node_module
33783
33855
  const field_chain_1 = __webpack_require__(/*! ./field_chain */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/field_chain.js");
33784
33856
  const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
33785
33857
  const _check_offset_length_1 = __webpack_require__(/*! ./_check_offset_length */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_offset_length.js");
33858
+ const _check_text_symbol_1 = __webpack_require__(/*! ./_check_text_symbol */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/_check_text_symbol.js");
33859
+ function normalizeParameterName(name) {
33860
+ return name.replace(/^!/, "").toUpperCase();
33861
+ }
33786
33862
  class MethodParameters {
33787
33863
  constructor() {
33788
33864
  this.requiredParameters = undefined;
@@ -33934,6 +34010,9 @@ class MethodParameters {
33934
34010
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
33935
34011
  continue;
33936
34012
  }
34013
+ else if ((0, _check_text_symbol_1.checkTextSymbol)(item.source, parameter.getType(), input)) {
34014
+ return;
34015
+ }
33937
34016
  else if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(item.sourceType, parameter.getType(), item.source) === false) {
33938
34017
  const message = "Method parameter type not compatible, " + item.name;
33939
34018
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
@@ -33966,7 +34045,7 @@ class MethodParameters {
33966
34045
  throw new assert_error_1.AssertError("parameterListS, unexpected node, child");
33967
34046
  }
33968
34047
  const nameNode = c.findDirectExpression(Expressions.ParameterName);
33969
- const name = nameNode === null || nameNode === void 0 ? void 0 : nameNode.getFirstToken().getStr().toUpperCase();
34048
+ const name = nameNode === undefined ? undefined : normalizeParameterName(nameNode.getFirstToken().getStr());
33970
34049
  if (name === undefined || nameNode === undefined) {
33971
34050
  throw new assert_error_1.AssertError("parameterListS, no name determined");
33972
34051
  }
@@ -34021,7 +34100,7 @@ class MethodParameters {
34021
34100
  throw new assert_error_1.AssertError("parameterListT, unexpected node, child");
34022
34101
  }
34023
34102
  const nameNode = c.findDirectExpression(Expressions.ParameterName);
34024
- const name = nameNode === null || nameNode === void 0 ? void 0 : nameNode.getFirstToken().getStr().toUpperCase();
34103
+ const name = nameNode === undefined ? undefined : normalizeParameterName(nameNode.getFirstToken().getStr());
34025
34104
  if (name === undefined || nameNode === undefined) {
34026
34105
  throw new assert_error_1.AssertError("parameterListT, no name determined");
34027
34106
  }
@@ -34952,6 +35031,13 @@ class Select {
34952
35031
  const intoTable = node.findDirectExpression(Expressions.SQLIntoTable);
34953
35032
  if (intoTable) {
34954
35033
  const inline = intoTable.findFirstExpression(Expressions.InlineData);
35034
+ if (inline
35035
+ && intoTable.findDirectTokenByText("INTO") !== undefined
35036
+ && intoTable.findDirectTokenByText("CORRESPONDING") !== undefined
35037
+ && !(0, version_1.releaseAtLeast)(input.scope.getRelease(), version_1.Release.v755)) {
35038
+ const message = "INTO CORRESPONDING FIELDS OF TABLE with an inline declaration requires 7.55";
35039
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
35040
+ }
34955
35041
  if (inline) {
34956
35042
  inline_data_1.InlineData.runSyntax(inline, input, this.buildTableType(fields, dbSources, input.scope, from));
34957
35043
  }
@@ -40033,7 +40119,7 @@ class Convert {
40033
40119
  if ((stampTarget === null || stampTarget === void 0 ? void 0 : stampTarget.get()) instanceof Expressions.Target) {
40034
40120
  const inline = stampTarget === null || stampTarget === void 0 ? void 0 : stampTarget.findDirectExpression(Expressions.InlineData);
40035
40121
  if (inline) {
40036
- inline_data_1.InlineData.runSyntax(inline, input, new basic_1.PackedType(8, 4));
40122
+ inline_data_1.InlineData.runSyntax(inline, input, new basic_1.PackedType(8, 0));
40037
40123
  }
40038
40124
  else {
40039
40125
  target_1.Target.runSyntax(stampTarget, input);
@@ -40114,6 +40200,9 @@ class CreateData {
40114
40200
  return;
40115
40201
  }
40116
40202
  }
40203
+ for (const s of node.findDirectExpressions(Expressions.SimpleSource3)) {
40204
+ source_1.Source.runSyntax(s, input);
40205
+ }
40117
40206
  for (const t of node.findDirectExpressions(Expressions.Target)) {
40118
40207
  target_1.Target.runSyntax(t, input);
40119
40208
  }
@@ -43415,14 +43504,21 @@ class Loop {
43415
43504
  // https://github.com/abap2xlsx/abap2xlsx/issues/1341
43416
43505
  const keyName = node.findExpressionAfterToken("KEY");
43417
43506
  let key = undefined;
43418
- if ((keyName === null || keyName === void 0 ? void 0 : keyName.get()) instanceof Expressions.SimpleName) {
43419
- // it might be dynamic, in that case we cannot check anything
43420
- key = (_b = topType.getOptions().secondary) === null || _b === void 0 ? void 0 : _b.find(k => k.name.toUpperCase() === keyName.getFirstToken().getStr().toUpperCase());
43507
+ const name = (keyName === null || keyName === void 0 ? void 0 : keyName.get()) instanceof Expressions.SimpleName ? keyName.getFirstToken().getStr().toUpperCase() : undefined;
43508
+ // it might be dynamic, in that case we cannot check anything; and
43509
+ // primary_key is the predefined name of the primary key every table has
43510
+ if (name !== undefined && name !== "PRIMARY_KEY") {
43511
+ key = (_b = topType.getOptions().secondary) === null || _b === void 0 ? void 0 : _b.find(k => k.name.toUpperCase() === name);
43421
43512
  if (key === undefined) {
43422
43513
  const message = "Key " + (keyName === null || keyName === void 0 ? void 0 : keyName.concatTokens()) + " not found in table type";
43423
43514
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
43424
43515
  return;
43425
43516
  }
43517
+ if (cond.findDirectTokenByText("OR") !== undefined) {
43518
+ const message = "Loop, secondary key requires an optimizable WHERE, top-level OR not allowed";
43519
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
43520
+ return;
43521
+ }
43426
43522
  if (!(0, version_1.releaseAtLeast)(input.scope.getRelease(), version_1.Release.v740sp02)) {
43427
43523
  const compares = cond.findAllExpressionsRecursive(Expressions.ComponentCompare).map(c => c.concatTokens().toUpperCase());
43428
43524
  for (const keyField of key.keyFields) {
@@ -44085,6 +44181,7 @@ const _type_utils_1 = __webpack_require__(/*! ../_type_utils */ "./node_modules/
44085
44181
  const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
44086
44182
  const dereference_1 = __webpack_require__(/*! ../expressions/dereference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dereference.js");
44087
44183
  const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
44184
+ const nodes_1 = __webpack_require__(/*! ../../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
44088
44185
  class Move {
44089
44186
  runSyntax(node, input) {
44090
44187
  const targets = node.findDirectExpressions(Expressions.Target);
@@ -44116,6 +44213,13 @@ class Move {
44116
44213
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
44117
44214
  return;
44118
44215
  }
44216
+ if (inline === undefined
44217
+ && node.findDirectTokenByText("=") !== undefined
44218
+ && Move.isRefInferIntoGenericFieldSymbol(targets, source, targetType)) {
44219
+ const message = "REF #( ) cannot infer a type from a generic target, use REF data( ) or a named type";
44220
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, source.getFirstToken(), message));
44221
+ return;
44222
+ }
44119
44223
  if (node.findDirectExpression(Expressions.Dereference)) {
44120
44224
  sourceType = dereference_1.Dereference.runSyntax(node, sourceType, input);
44121
44225
  }
@@ -44139,6 +44243,26 @@ class Move {
44139
44243
  return;
44140
44244
  }
44141
44245
  }
44246
+ /** target = REF #( ... ), with the single target being a field symbol typed "any" or "data",
44247
+ * the type of REF # is inferred from the target, which is generic */
44248
+ static isRefInferIntoGenericFieldSymbol(targets, source, targetType) {
44249
+ var _a;
44250
+ if (targets.length !== 1 || source === undefined) {
44251
+ return false;
44252
+ }
44253
+ else if (!(targetType instanceof basic_1.AnyType) && !(targetType instanceof basic_1.DataType)) {
44254
+ return false;
44255
+ }
44256
+ const targetChildren = targets[0].getChildren();
44257
+ if (targetChildren.length !== 1 || !(targetChildren[0].get() instanceof Expressions.TargetFieldSymbol)) {
44258
+ return false;
44259
+ }
44260
+ const first = source.getFirstChild();
44261
+ if (!(first instanceof nodes_1.TokenNode) || first.getFirstToken().getStr().toUpperCase() !== "REF") {
44262
+ return false;
44263
+ }
44264
+ return ((_a = source.findDirectExpression(Expressions.TypeNameOrInfer)) === null || _a === void 0 ? void 0 : _a.concatTokens()) === "#";
44265
+ }
44142
44266
  }
44143
44267
  exports.Move = Move;
44144
44268
  //# sourceMappingURL=move.js.map
@@ -49780,38 +49904,45 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
49780
49904
  exports.ArtifactsABAP = void 0;
49781
49905
  const Statements = __importStar(__webpack_require__(/*! ./2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js"));
49782
49906
  const Expressions = __importStar(__webpack_require__(/*! ./2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
49783
- const combi_1 = __webpack_require__(/*! ./2_statements/combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
49784
49907
  const Structures = __importStar(__webpack_require__(/*! ./3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js"));
49908
+ /*
49785
49909
  class List {
49786
- constructor() {
49787
- this.words = [];
49788
- }
49789
- add(keywords, source) {
49790
- for (const w of keywords) {
49791
- const index = this.find(w);
49792
- if (index >= 0) {
49793
- this.words[index].source.push(source);
49794
- }
49795
- else {
49796
- this.words.push({ word: w, source: [source] });
49797
- }
49798
- }
49799
- }
49800
- get() {
49801
- return this.words;
49910
+ private readonly words: IKeyword[];
49911
+
49912
+ public constructor() {
49913
+ this.words = [];
49914
+ }
49915
+
49916
+ public add(keywords: string[], source: string): void {
49917
+ for (const w of keywords) {
49918
+ const index = this.find(w);
49919
+ if (index >= 0) {
49920
+ this.words[index].source.push(source);
49921
+ } else {
49922
+ this.words.push({word: w, source: [source]});
49923
+ }
49802
49924
  }
49803
- find(keyword) {
49804
- for (let i = 0; i < this.words.length; i++) {
49805
- if (this.words[i].word === keyword) {
49806
- return i;
49807
- }
49808
- }
49809
- return -1;
49925
+ }
49926
+
49927
+ public get(): IKeyword[] {
49928
+ return this.words;
49929
+ }
49930
+
49931
+ private find(keyword: string): number {
49932
+ for (let i = 0; i < this.words.length; i++) {
49933
+ if (this.words[i].word === keyword) {
49934
+ return i;
49935
+ }
49810
49936
  }
49937
+ return -1;
49938
+ }
49811
49939
  }
49812
- function className(cla) {
49813
- return cla.constructor.name;
49940
+
49941
+
49942
+ function className(cla: any) {
49943
+ return cla.constructor.name;
49814
49944
  }
49945
+ */
49815
49946
  class ArtifactsABAP {
49816
49947
  static getStructures() {
49817
49948
  const ret = [];
@@ -49843,16 +49974,6 @@ class ArtifactsABAP {
49843
49974
  }
49844
49975
  return ret;
49845
49976
  }
49846
- static getKeywords() {
49847
- const list = new List();
49848
- for (const stat of this.getStatements()) {
49849
- list.add(combi_1.Combi.listKeywords(stat.getMatcher()), "statement_" + className(stat));
49850
- }
49851
- for (const expr of this.getExpressions()) {
49852
- list.add(combi_1.Combi.listKeywords(new expr().getRunnable()), "expression_" + className(expr));
49853
- }
49854
- return list.get();
49855
- }
49856
49977
  }
49857
49978
  exports.ArtifactsABAP = ArtifactsABAP;
49858
49979
  //# sourceMappingURL=artifacts.js.map
@@ -51350,6 +51471,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
51350
51471
  exports.DataReference = void 0;
51351
51472
  const _abstract_type_1 = __webpack_require__(/*! ./_abstract_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/_abstract_type.js");
51352
51473
  const any_type_1 = __webpack_require__(/*! ./any_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/any_type.js");
51474
+ const table_type_1 = __webpack_require__(/*! ./table_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/table_type.js");
51353
51475
  class DataReference extends _abstract_type_1.AbstractType {
51354
51476
  constructor(type, qualifiedName) {
51355
51477
  super({ qualifiedName: qualifiedName });
@@ -51372,6 +51494,10 @@ class DataReference extends _abstract_type_1.AbstractType {
51372
51494
  if (this.type instanceof any_type_1.AnyType) {
51373
51495
  return true;
51374
51496
  }
51497
+ // LIKE REF TO a generic table, eg. a field symbol TYPE STANDARD TABLE
51498
+ if (this.type instanceof table_type_1.TableType && this.type.isGeneric()) {
51499
+ return true;
51500
+ }
51375
51501
  return false;
51376
51502
  }
51377
51503
  containsVoid() {
@@ -61725,6 +61851,9 @@ class AbstractObject {
61725
61851
  this.old = [];
61726
61852
  this.dirty = false;
61727
61853
  }
61854
+ getDescription() {
61855
+ return undefined;
61856
+ }
61728
61857
  getParsingIssues() {
61729
61858
  return this.old;
61730
61859
  }
@@ -61915,9 +62044,6 @@ class UnknownObject extends _abstract_object_1.AbstractObject {
61915
62044
  allowNamespace: true,
61916
62045
  };
61917
62046
  }
61918
- getDescription() {
61919
- return undefined;
61920
- }
61921
62047
  getParsingIssues() {
61922
62048
  const pos = new position_1.Position(1, 1);
61923
62049
  const file = this.getFiles()[0];
@@ -61952,10 +62078,6 @@ class ABAPQueryFunctionalArea extends _abstract_object_1.AbstractObject {
61952
62078
  allowNamespace: true,
61953
62079
  };
61954
62080
  }
61955
- getDescription() {
61956
- // todo
61957
- return undefined;
61958
- }
61959
62081
  }
61960
62082
  exports.ABAPQueryFunctionalArea = ABAPQueryFunctionalArea;
61961
62083
  //# sourceMappingURL=abap_query_functional_area.js.map
@@ -61983,10 +62105,6 @@ class ABAPQueryQuery extends _abstract_object_1.AbstractObject {
61983
62105
  allowNamespace: true,
61984
62106
  };
61985
62107
  }
61986
- getDescription() {
61987
- // todo
61988
- return undefined;
61989
- }
61990
62108
  }
61991
62109
  exports.ABAPQueryQuery = ABAPQueryQuery;
61992
62110
  //# sourceMappingURL=abap_query_query.js.map
@@ -62014,10 +62132,6 @@ class ActivationVariant extends _abstract_object_1.AbstractObject {
62014
62132
  allowNamespace: true,
62015
62133
  };
62016
62134
  }
62017
- getDescription() {
62018
- // todo
62019
- return undefined;
62020
- }
62021
62135
  }
62022
62136
  exports.ActivationVariant = ActivationVariant;
62023
62137
  //# sourceMappingURL=activation_variant.js.map
@@ -62045,10 +62159,6 @@ class APIReleaseState extends _abstract_object_1.AbstractObject {
62045
62159
  allowNamespace: true,
62046
62160
  };
62047
62161
  }
62048
- getDescription() {
62049
- // todo
62050
- return undefined;
62051
- }
62052
62162
  }
62053
62163
  exports.APIReleaseState = APIReleaseState;
62054
62164
  //# sourceMappingURL=api_release_state.js.map
@@ -62076,10 +62186,6 @@ class ApplicationDescriptorsFiori extends _abstract_object_1.AbstractObject {
62076
62186
  allowNamespace: true,
62077
62187
  };
62078
62188
  }
62079
- getDescription() {
62080
- // todo
62081
- return undefined;
62082
- }
62083
62189
  }
62084
62190
  exports.ApplicationDescriptorsFiori = ApplicationDescriptorsFiori;
62085
62191
  //# sourceMappingURL=application_descriptors_fiori.js.map
@@ -62107,10 +62213,6 @@ class ApplicationJobCatalogEntry extends _abstract_object_1.AbstractObject {
62107
62213
  allowNamespace: true,
62108
62214
  };
62109
62215
  }
62110
- getDescription() {
62111
- // todo
62112
- return undefined;
62113
- }
62114
62216
  }
62115
62217
  exports.ApplicationJobCatalogEntry = ApplicationJobCatalogEntry;
62116
62218
  //# sourceMappingURL=application_job_catalog_entry.js.map
@@ -62138,10 +62240,6 @@ class ApplicationJobTemplate extends _abstract_object_1.AbstractObject {
62138
62240
  allowNamespace: true,
62139
62241
  };
62140
62242
  }
62141
- getDescription() {
62142
- // todo
62143
- return undefined;
62144
- }
62145
62243
  }
62146
62244
  exports.ApplicationJobTemplate = ApplicationJobTemplate;
62147
62245
  //# sourceMappingURL=application_job_template.js.map
@@ -62169,10 +62267,6 @@ class ApplicationLogObject extends _abstract_object_1.AbstractObject {
62169
62267
  allowNamespace: true,
62170
62268
  };
62171
62269
  }
62172
- getDescription() {
62173
- // todo
62174
- return undefined;
62175
- }
62176
62270
  }
62177
62271
  exports.ApplicationLogObject = ApplicationLogObject;
62178
62272
  //# sourceMappingURL=application_log_object.js.map
@@ -62200,10 +62294,6 @@ class AssignmentServiceToAuthorizationGroup extends _abstract_object_1.AbstractO
62200
62294
  allowNamespace: true,
62201
62295
  };
62202
62296
  }
62203
- getDescription() {
62204
- // todo
62205
- return undefined;
62206
- }
62207
62297
  }
62208
62298
  exports.AssignmentServiceToAuthorizationGroup = AssignmentServiceToAuthorizationGroup;
62209
62299
  //# sourceMappingURL=assignment_service_to_authorization_group.js.map
@@ -62231,10 +62321,6 @@ class ATCCheckCategory extends _abstract_object_1.AbstractObject {
62231
62321
  allowNamespace: true,
62232
62322
  };
62233
62323
  }
62234
- getDescription() {
62235
- // todo
62236
- return undefined;
62237
- }
62238
62324
  }
62239
62325
  exports.ATCCheckCategory = ATCCheckCategory;
62240
62326
  //# sourceMappingURL=atc_check_category.js.map
@@ -62262,10 +62348,6 @@ class ATCCheckObject extends _abstract_object_1.AbstractObject {
62262
62348
  allowNamespace: true,
62263
62349
  };
62264
62350
  }
62265
- getDescription() {
62266
- // todo
62267
- return undefined;
62268
- }
62269
62351
  }
62270
62352
  exports.ATCCheckObject = ATCCheckObject;
62271
62353
  //# sourceMappingURL=atc_check_object.js.map
@@ -62293,10 +62375,6 @@ class ATCCheckVariant extends _abstract_object_1.AbstractObject {
62293
62375
  allowNamespace: true,
62294
62376
  };
62295
62377
  }
62296
- getDescription() {
62297
- // todo
62298
- return undefined;
62299
- }
62300
62378
  }
62301
62379
  exports.ATCCheckVariant = ATCCheckVariant;
62302
62380
  //# sourceMappingURL=atc_check_variant.js.map
@@ -62330,10 +62408,6 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
62330
62408
  this.parsedXML = undefined;
62331
62409
  super.setDirty();
62332
62410
  }
62333
- getDescription() {
62334
- // todo
62335
- return undefined;
62336
- }
62337
62411
  getDataElementName() {
62338
62412
  var _a;
62339
62413
  this.parse();
@@ -62406,10 +62480,6 @@ class AuthorizationGroup extends _abstract_object_1.AbstractObject {
62406
62480
  allowNamespace: true,
62407
62481
  };
62408
62482
  }
62409
- getDescription() {
62410
- // todo
62411
- return undefined;
62412
- }
62413
62483
  }
62414
62484
  exports.AuthorizationGroup = AuthorizationGroup;
62415
62485
  //# sourceMappingURL=authorization_group.js.map
@@ -62437,10 +62507,6 @@ class AuthorizationObject extends _abstract_object_1.AbstractObject {
62437
62507
  allowNamespace: true,
62438
62508
  };
62439
62509
  }
62440
- getDescription() {
62441
- // todo
62442
- return undefined;
62443
- }
62444
62510
  }
62445
62511
  exports.AuthorizationObject = AuthorizationObject;
62446
62512
  //# sourceMappingURL=authorization_object.js.map
@@ -62468,10 +62534,6 @@ class AuthorizationObjectClass extends _abstract_object_1.AbstractObject {
62468
62534
  allowNamespace: false,
62469
62535
  };
62470
62536
  }
62471
- getDescription() {
62472
- // todo
62473
- return undefined;
62474
- }
62475
62537
  }
62476
62538
  exports.AuthorizationObjectClass = AuthorizationObjectClass;
62477
62539
  //# sourceMappingURL=authorization_object_class.js.map
@@ -62499,10 +62561,6 @@ class AuthorizationObjectExtension extends _abstract_object_1.AbstractObject {
62499
62561
  allowNamespace: true,
62500
62562
  };
62501
62563
  }
62502
- getDescription() {
62503
- // todo
62504
- return undefined;
62505
- }
62506
62564
  }
62507
62565
  exports.AuthorizationObjectExtension = AuthorizationObjectExtension;
62508
62566
  //# sourceMappingURL=authorization_object_extension.js.map
@@ -62530,10 +62588,6 @@ class BADIDefinition extends _abstract_object_1.AbstractObject {
62530
62588
  allowNamespace: true,
62531
62589
  };
62532
62590
  }
62533
- getDescription() {
62534
- // todo
62535
- return undefined;
62536
- }
62537
62591
  }
62538
62592
  exports.BADIDefinition = BADIDefinition;
62539
62593
  //# sourceMappingURL=badi_definition.js.map
@@ -62565,10 +62619,6 @@ class BehaviorDefinition extends _abstract_object_1.AbstractObject {
62565
62619
  allowNamespace: true,
62566
62620
  };
62567
62621
  }
62568
- getDescription() {
62569
- // todo
62570
- return undefined;
62571
- }
62572
62622
  setDirty() {
62573
62623
  this.parsedData = undefined;
62574
62624
  super.setDirty();
@@ -62639,10 +62689,6 @@ class BRFPlusSystemApplication extends _abstract_object_1.AbstractObject {
62639
62689
  allowNamespace: true,
62640
62690
  };
62641
62691
  }
62642
- getDescription() {
62643
- // todo
62644
- return undefined;
62645
- }
62646
62692
  }
62647
62693
  exports.BRFPlusSystemApplication = BRFPlusSystemApplication;
62648
62694
  //# sourceMappingURL=brf_plus_system_application.js.map
@@ -62670,10 +62716,6 @@ class BSPApplication extends _abstract_object_1.AbstractObject {
62670
62716
  allowNamespace: true,
62671
62717
  };
62672
62718
  }
62673
- getDescription() {
62674
- // todo
62675
- return undefined;
62676
- }
62677
62719
  }
62678
62720
  exports.BSPApplication = BSPApplication;
62679
62721
  //# sourceMappingURL=bsp_application.js.map
@@ -62701,10 +62743,6 @@ class BusinessAddInImplementation extends _abstract_object_1.AbstractObject {
62701
62743
  allowNamespace: true,
62702
62744
  };
62703
62745
  }
62704
- getDescription() {
62705
- // todo
62706
- return undefined;
62707
- }
62708
62746
  }
62709
62747
  exports.BusinessAddInImplementation = BusinessAddInImplementation;
62710
62748
  //# sourceMappingURL=business_add_in_implementation.js.map
@@ -62732,10 +62770,6 @@ class BusinessCatalog extends _abstract_object_1.AbstractObject {
62732
62770
  allowNamespace: true,
62733
62771
  };
62734
62772
  }
62735
- getDescription() {
62736
- // todo
62737
- return undefined;
62738
- }
62739
62773
  }
62740
62774
  exports.BusinessCatalog = BusinessCatalog;
62741
62775
  //# sourceMappingURL=business_catalog.js.map
@@ -62763,10 +62797,6 @@ class BusinessCatalogAppAssignment extends _abstract_object_1.AbstractObject {
62763
62797
  allowNamespace: true,
62764
62798
  };
62765
62799
  }
62766
- getDescription() {
62767
- // todo
62768
- return undefined;
62769
- }
62770
62800
  }
62771
62801
  exports.BusinessCatalogAppAssignment = BusinessCatalogAppAssignment;
62772
62802
  //# sourceMappingURL=business_catalog_app_assignment.js.map
@@ -62794,10 +62824,6 @@ class BusinessConfigurationMaintenanceObject extends _abstract_object_1.Abstract
62794
62824
  allowNamespace: true,
62795
62825
  };
62796
62826
  }
62797
- getDescription() {
62798
- // todo
62799
- return undefined;
62800
- }
62801
62827
  }
62802
62828
  exports.BusinessConfigurationMaintenanceObject = BusinessConfigurationMaintenanceObject;
62803
62829
  //# sourceMappingURL=business_configuration_maintenance_object.js.map
@@ -62825,10 +62851,6 @@ class BusinessConfigurationSet extends _abstract_object_1.AbstractObject {
62825
62851
  allowNamespace: true,
62826
62852
  };
62827
62853
  }
62828
- getDescription() {
62829
- // todo
62830
- return undefined;
62831
- }
62832
62854
  }
62833
62855
  exports.BusinessConfigurationSet = BusinessConfigurationSet;
62834
62856
  //# sourceMappingURL=business_configuration_set.js.map
@@ -62856,10 +62878,6 @@ class BusinessFunctionAssignment extends _abstract_object_1.AbstractObject {
62856
62878
  allowNamespace: true,
62857
62879
  };
62858
62880
  }
62859
- getDescription() {
62860
- // todo
62861
- return undefined;
62862
- }
62863
62881
  }
62864
62882
  exports.BusinessFunctionAssignment = BusinessFunctionAssignment;
62865
62883
  //# sourceMappingURL=business_function_assignment.js.map
@@ -62887,10 +62905,6 @@ class BusinessFunctionSetAssignment extends _abstract_object_1.AbstractObject {
62887
62905
  allowNamespace: true,
62888
62906
  };
62889
62907
  }
62890
- getDescription() {
62891
- // todo
62892
- return undefined;
62893
- }
62894
62908
  }
62895
62909
  exports.BusinessFunctionSetAssignment = BusinessFunctionSetAssignment;
62896
62910
  //# sourceMappingURL=business_function_set_assignment.js.map
@@ -62918,10 +62932,6 @@ class BusinessObjectModel extends _abstract_object_1.AbstractObject {
62918
62932
  allowNamespace: true,
62919
62933
  };
62920
62934
  }
62921
- getDescription() {
62922
- // todo
62923
- return undefined;
62924
- }
62925
62935
  }
62926
62936
  exports.BusinessObjectModel = BusinessObjectModel;
62927
62937
  //# sourceMappingURL=business_object_model.js.map
@@ -62949,10 +62959,6 @@ class BusinessObjectType extends _abstract_object_1.AbstractObject {
62949
62959
  allowNamespace: true,
62950
62960
  };
62951
62961
  }
62952
- getDescription() {
62953
- // todo
62954
- return undefined;
62955
- }
62956
62962
  }
62957
62963
  exports.BusinessObjectType = BusinessObjectType;
62958
62964
  //# sourceMappingURL=business_object_type.js.map
@@ -62980,10 +62986,6 @@ class CDSEntityBuffer extends _abstract_object_1.AbstractObject {
62980
62986
  allowNamespace: true,
62981
62987
  };
62982
62988
  }
62983
- getDescription() {
62984
- // todo
62985
- return undefined;
62986
- }
62987
62989
  }
62988
62990
  exports.CDSEntityBuffer = CDSEntityBuffer;
62989
62991
  //# sourceMappingURL=cds_entity_buffer.js.map
@@ -63017,6 +63019,11 @@ class CDSMetadataExtension extends _abstract_object_1.AbstractObject {
63017
63019
  allowNamespace: true,
63018
63020
  };
63019
63021
  }
63022
+ setDirty() {
63023
+ this.parsedData = undefined;
63024
+ this.parserError = undefined;
63025
+ super.setDirty();
63026
+ }
63020
63027
  hasParserError() {
63021
63028
  return this.parserError;
63022
63029
  }
@@ -63035,10 +63042,6 @@ class CDSMetadataExtension extends _abstract_object_1.AbstractObject {
63035
63042
  this.dirty = false;
63036
63043
  return { updated: true, runtime: Date.now() - start };
63037
63044
  }
63038
- getDescription() {
63039
- // todo
63040
- return undefined;
63041
- }
63042
63045
  findSourceFile() {
63043
63046
  return this.getFiles().find(f => f.getFilename().endsWith(".asddlxs") || f.getFilename().endsWith(".acds"));
63044
63047
  }
@@ -63069,10 +63072,6 @@ class CDSType extends _abstract_object_1.AbstractObject {
63069
63072
  allowNamespace: true,
63070
63073
  };
63071
63074
  }
63072
- getDescription() {
63073
- // todo
63074
- return undefined;
63075
- }
63076
63075
  }
63077
63076
  exports.CDSType = CDSType;
63078
63077
  //# sourceMappingURL=cds_type.js.map
@@ -63100,10 +63099,6 @@ class ChangeDocument extends _abstract_object_1.AbstractObject {
63100
63099
  allowNamespace: true,
63101
63100
  };
63102
63101
  }
63103
- getDescription() {
63104
- // todo
63105
- return undefined;
63106
- }
63107
63102
  }
63108
63103
  exports.ChangeDocument = ChangeDocument;
63109
63104
  //# sourceMappingURL=change_document.js.map
@@ -63131,10 +63126,6 @@ class ChapterOfBookStructure extends _abstract_object_1.AbstractObject {
63131
63126
  allowNamespace: true,
63132
63127
  };
63133
63128
  }
63134
- getDescription() {
63135
- // todo
63136
- return undefined;
63137
- }
63138
63129
  }
63139
63130
  exports.ChapterOfBookStructure = ChapterOfBookStructure;
63140
63131
  //# sourceMappingURL=chapter_of_book_structure.js.map
@@ -63162,10 +63153,6 @@ class CheckpointGroup extends _abstract_object_1.AbstractObject {
63162
63153
  allowNamespace: true,
63163
63154
  };
63164
63155
  }
63165
- getDescription() {
63166
- // todo
63167
- return undefined;
63168
- }
63169
63156
  }
63170
63157
  exports.CheckpointGroup = CheckpointGroup;
63171
63158
  //# sourceMappingURL=checkpoint_group.js.map
@@ -63313,10 +63300,6 @@ class Classification extends _abstract_object_1.AbstractObject {
63313
63300
  allowNamespace: true,
63314
63301
  };
63315
63302
  }
63316
- getDescription() {
63317
- // todo
63318
- return undefined;
63319
- }
63320
63303
  }
63321
63304
  exports.Classification = Classification;
63322
63305
  //# sourceMappingURL=classification.js.map
@@ -63344,10 +63327,6 @@ class CommunicationScenario extends _abstract_object_1.AbstractObject {
63344
63327
  allowNamespace: true,
63345
63328
  };
63346
63329
  }
63347
- getDescription() {
63348
- // todo
63349
- return undefined;
63350
- }
63351
63330
  }
63352
63331
  exports.CommunicationScenario = CommunicationScenario;
63353
63332
  //# sourceMappingURL=communication_scenario.js.map
@@ -63375,10 +63354,6 @@ class CompositeEnhancementImplementation extends _abstract_object_1.AbstractObje
63375
63354
  allowNamespace: true,
63376
63355
  };
63377
63356
  }
63378
- getDescription() {
63379
- // todo
63380
- return undefined;
63381
- }
63382
63357
  }
63383
63358
  exports.CompositeEnhancementImplementation = CompositeEnhancementImplementation;
63384
63359
  //# sourceMappingURL=composite_enhancement_implementation.js.map
@@ -63406,10 +63381,6 @@ class CompositeEnhancementSpot extends _abstract_object_1.AbstractObject {
63406
63381
  allowNamespace: true,
63407
63382
  };
63408
63383
  }
63409
- getDescription() {
63410
- // todo
63411
- return undefined;
63412
- }
63413
63384
  }
63414
63385
  exports.CompositeEnhancementSpot = CompositeEnhancementSpot;
63415
63386
  //# sourceMappingURL=composite_enhancement_spot.js.map
@@ -63438,10 +63409,6 @@ class ConceptsOfPackage extends _abstract_object_1.AbstractObject {
63438
63409
  customRegex: new RegExp(/^(\/[A-Z_\d]{3,8}\/)?[A-Z_-\d<> ]+$/i),
63439
63410
  };
63440
63411
  }
63441
- getDescription() {
63442
- // todo
63443
- return undefined;
63444
- }
63445
63412
  }
63446
63413
  exports.ConceptsOfPackage = ConceptsOfPackage;
63447
63414
  //# sourceMappingURL=concepts_of_package.js.map
@@ -63469,10 +63436,6 @@ class CustomDataBrowserObject extends _abstract_object_1.AbstractObject {
63469
63436
  allowNamespace: true,
63470
63437
  };
63471
63438
  }
63472
- getDescription() {
63473
- // todo
63474
- return undefined;
63475
- }
63476
63439
  }
63477
63440
  exports.CustomDataBrowserObject = CustomDataBrowserObject;
63478
63441
  //# sourceMappingURL=custom_data_browser_object.js.map
@@ -63500,10 +63463,6 @@ class CustomerEnhancementProject extends _abstract_object_1.AbstractObject {
63500
63463
  allowNamespace: true,
63501
63464
  };
63502
63465
  }
63503
- getDescription() {
63504
- // todo
63505
- return undefined;
63506
- }
63507
63466
  }
63508
63467
  exports.CustomerEnhancementProject = CustomerEnhancementProject;
63509
63468
  //# sourceMappingURL=customer_enhancement_project.js.map
@@ -63531,10 +63490,6 @@ class CustomizingAttributes extends _abstract_object_1.AbstractObject {
63531
63490
  allowNamespace: true,
63532
63491
  };
63533
63492
  }
63534
- getDescription() {
63535
- // todo
63536
- return undefined;
63537
- }
63538
63493
  }
63539
63494
  exports.CustomizingAttributes = CustomizingAttributes;
63540
63495
  //# sourceMappingURL=customizing_attributes.js.map
@@ -63562,10 +63517,6 @@ class CustomizingImgActivity extends _abstract_object_1.AbstractObject {
63562
63517
  allowNamespace: true,
63563
63518
  };
63564
63519
  }
63565
- getDescription() {
63566
- // todo
63567
- return undefined;
63568
- }
63569
63520
  }
63570
63521
  exports.CustomizingImgActivity = CustomizingImgActivity;
63571
63522
  //# sourceMappingURL=customizing_img_activity.js.map
@@ -63593,10 +63544,6 @@ class CustomizingTransaction extends _abstract_object_1.AbstractObject {
63593
63544
  allowNamespace: true,
63594
63545
  };
63595
63546
  }
63596
- getDescription() {
63597
- // todo
63598
- return undefined;
63599
- }
63600
63547
  }
63601
63548
  exports.CustomizingTransaction = CustomizingTransaction;
63602
63549
  //# sourceMappingURL=customizing_transaction.js.map
@@ -63624,10 +63571,6 @@ class DataControl extends _abstract_object_1.AbstractObject {
63624
63571
  allowNamespace: true,
63625
63572
  };
63626
63573
  }
63627
- getDescription() {
63628
- // todo
63629
- return undefined;
63630
- }
63631
63574
  }
63632
63575
  exports.DataControl = DataControl;
63633
63576
  //# sourceMappingURL=data_control.js.map
@@ -64196,10 +64139,6 @@ class DatastoreObject extends _abstract_object_1.AbstractObject {
64196
64139
  allowNamespace: true,
64197
64140
  };
64198
64141
  }
64199
- getDescription() {
64200
- // todo
64201
- return undefined;
64202
- }
64203
64142
  }
64204
64143
  exports.DatastoreObject = DatastoreObject;
64205
64144
  //# sourceMappingURL=datastore_object.js.map
@@ -64227,10 +64166,6 @@ class DialogModule extends _abstract_object_1.AbstractObject {
64227
64166
  allowNamespace: true,
64228
64167
  };
64229
64168
  }
64230
- getDescription() {
64231
- // todo
64232
- return undefined;
64233
- }
64234
64169
  }
64235
64170
  exports.DialogModule = DialogModule;
64236
64171
  //# sourceMappingURL=dialog_module.js.map
@@ -64258,10 +64193,6 @@ class Documentation extends _abstract_object_1.AbstractObject {
64258
64193
  allowNamespace: true,
64259
64194
  };
64260
64195
  }
64261
- getDescription() {
64262
- // todo
64263
- return undefined;
64264
- }
64265
64196
  }
64266
64197
  exports.Documentation = Documentation;
64267
64198
  //# sourceMappingURL=documentation.js.map
@@ -64465,11 +64396,13 @@ class Domain extends _abstract_object_1.AbstractObject {
64465
64396
  getFixedValues() {
64466
64397
  var _a;
64467
64398
  var _b;
64399
+ this.parse();
64468
64400
  return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : [];
64469
64401
  }
64470
64402
  getFixedValuesTranslations() {
64471
64403
  var _a;
64472
64404
  var _b;
64405
+ this.parse();
64473
64406
  return (_b = (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.valuesTranslations) !== null && _b !== void 0 ? _b : [];
64474
64407
  }
64475
64408
  getAFFFile() {
@@ -64502,10 +64435,6 @@ class EcattTestConfiguration extends _abstract_object_1.AbstractObject {
64502
64435
  allowNamespace: true,
64503
64436
  };
64504
64437
  }
64505
- getDescription() {
64506
- // todo
64507
- return undefined;
64508
- }
64509
64438
  }
64510
64439
  exports.EcattTestConfiguration = EcattTestConfiguration;
64511
64440
  //# sourceMappingURL=ecatt_test_configuration.js.map
@@ -64533,10 +64462,6 @@ class EcattTestDataContainer extends _abstract_object_1.AbstractObject {
64533
64462
  allowNamespace: true,
64534
64463
  };
64535
64464
  }
64536
- getDescription() {
64537
- // todo
64538
- return undefined;
64539
- }
64540
64465
  }
64541
64466
  exports.EcattTestDataContainer = EcattTestDataContainer;
64542
64467
  //# sourceMappingURL=ecatt_test_data_container.js.map
@@ -64564,10 +64489,6 @@ class EcattTestScript extends _abstract_object_1.AbstractObject {
64564
64489
  allowNamespace: true,
64565
64490
  };
64566
64491
  }
64567
- getDescription() {
64568
- // todo
64569
- return undefined;
64570
- }
64571
64492
  }
64572
64493
  exports.EcattTestScript = EcattTestScript;
64573
64494
  //# sourceMappingURL=ecatt_test_script.js.map
@@ -64595,10 +64516,6 @@ class EmailTemplate extends _abstract_object_1.AbstractObject {
64595
64516
  allowNamespace: true,
64596
64517
  };
64597
64518
  }
64598
- getDescription() {
64599
- // todo
64600
- return undefined;
64601
- }
64602
64519
  }
64603
64520
  exports.EmailTemplate = EmailTemplate;
64604
64521
  //# sourceMappingURL=email_template.js.map
@@ -64680,10 +64597,6 @@ class EnhancementSpot extends _abstract_object_1.AbstractObject {
64680
64597
  getType() {
64681
64598
  return "ENHS";
64682
64599
  }
64683
- getDescription() {
64684
- // todo
64685
- return undefined;
64686
- }
64687
64600
  getAllowedNaming() {
64688
64601
  return {
64689
64602
  maxLength: 30,
@@ -64743,10 +64656,6 @@ class EntityType extends _abstract_object_1.AbstractObject {
64743
64656
  allowNamespace: true,
64744
64657
  };
64745
64658
  }
64746
- getDescription() {
64747
- // todo
64748
- return undefined;
64749
- }
64750
64659
  }
64751
64660
  exports.EntityType = EntityType;
64752
64661
  //# sourceMappingURL=entity_type.js.map
@@ -64774,10 +64683,6 @@ class EventBinding extends _abstract_object_1.AbstractObject {
64774
64683
  allowNamespace: true,
64775
64684
  };
64776
64685
  }
64777
- getDescription() {
64778
- // todo
64779
- return undefined;
64780
- }
64781
64686
  }
64782
64687
  exports.EventBinding = EventBinding;
64783
64688
  //# sourceMappingURL=event_binding.js.map
@@ -64805,10 +64710,6 @@ class EventConsumer extends _abstract_object_1.AbstractObject {
64805
64710
  allowNamespace: true,
64806
64711
  };
64807
64712
  }
64808
- getDescription() {
64809
- // todo
64810
- return undefined;
64811
- }
64812
64713
  }
64813
64714
  exports.EventConsumer = EventConsumer;
64814
64715
  //# sourceMappingURL=event_consumer.js.map
@@ -64900,10 +64801,6 @@ class FieldCatalog extends _abstract_object_1.AbstractObject {
64900
64801
  allowNamespace: true,
64901
64802
  };
64902
64803
  }
64903
- getDescription() {
64904
- // todo
64905
- return undefined;
64906
- }
64907
64804
  }
64908
64805
  exports.FieldCatalog = FieldCatalog;
64909
64806
  //# sourceMappingURL=field_catalog.js.map
@@ -64931,10 +64828,6 @@ class FormObjectForm extends _abstract_object_1.AbstractObject {
64931
64828
  allowNamespace: true,
64932
64829
  };
64933
64830
  }
64934
- getDescription() {
64935
- // todo
64936
- return undefined;
64937
- }
64938
64831
  }
64939
64832
  exports.FormObjectForm = FormObjectForm;
64940
64833
  //# sourceMappingURL=form_object_form.js.map
@@ -64962,10 +64855,6 @@ class FormObjectInterface extends _abstract_object_1.AbstractObject {
64962
64855
  allowNamespace: true,
64963
64856
  };
64964
64857
  }
64965
- getDescription() {
64966
- // todo
64967
- return undefined;
64968
- }
64969
64858
  }
64970
64859
  exports.FormObjectInterface = FormObjectInterface;
64971
64860
  //# sourceMappingURL=form_object_interface.js.map
@@ -64993,10 +64882,6 @@ class FormatType extends _abstract_object_1.AbstractObject {
64993
64882
  allowNamespace: true,
64994
64883
  };
64995
64884
  }
64996
- getDescription() {
64997
- // todo
64998
- return undefined;
64999
- }
65000
64885
  }
65001
64886
  exports.FormatType = FormatType;
65002
64887
  //# sourceMappingURL=format_type.js.map
@@ -65229,10 +65114,6 @@ class GatewayModel extends _abstract_object_1.AbstractObject {
65229
65114
  allowNamespace: true,
65230
65115
  };
65231
65116
  }
65232
- getDescription() {
65233
- // todo
65234
- return undefined;
65235
- }
65236
65117
  }
65237
65118
  exports.GatewayModel = GatewayModel;
65238
65119
  //# sourceMappingURL=gateway_model.js.map
@@ -65260,10 +65141,6 @@ class GatewayModelMetadata extends _abstract_object_1.AbstractObject {
65260
65141
  allowNamespace: true,
65261
65142
  };
65262
65143
  }
65263
- getDescription() {
65264
- // todo
65265
- return undefined;
65266
- }
65267
65144
  }
65268
65145
  exports.GatewayModelMetadata = GatewayModelMetadata;
65269
65146
  //# sourceMappingURL=gateway_model_metadata.js.map
@@ -65291,10 +65168,6 @@ class GatewayODataGroupAndAssignment extends _abstract_object_1.AbstractObject {
65291
65168
  allowNamespace: true,
65292
65169
  };
65293
65170
  }
65294
- getDescription() {
65295
- // todo
65296
- return undefined;
65297
- }
65298
65171
  }
65299
65172
  exports.GatewayODataGroupAndAssignment = GatewayODataGroupAndAssignment;
65300
65173
  //# sourceMappingURL=gateway_odata_group_and_assignment.js.map
@@ -65322,10 +65195,6 @@ class GatewayProject extends _abstract_object_1.AbstractObject {
65322
65195
  allowNamespace: true,
65323
65196
  };
65324
65197
  }
65325
- getDescription() {
65326
- // todo
65327
- return undefined;
65328
- }
65329
65198
  }
65330
65199
  exports.GatewayProject = GatewayProject;
65331
65200
  //# sourceMappingURL=gateway_project.js.map
@@ -65353,10 +65222,6 @@ class GatewayService extends _abstract_object_1.AbstractObject {
65353
65222
  allowNamespace: true,
65354
65223
  };
65355
65224
  }
65356
- getDescription() {
65357
- // todo
65358
- return undefined;
65359
- }
65360
65225
  }
65361
65226
  exports.GatewayService = GatewayService;
65362
65227
  //# sourceMappingURL=gateway_service.js.map
@@ -65384,10 +65249,6 @@ class GatewayServiceGroupsMetadata extends _abstract_object_1.AbstractObject {
65384
65249
  allowNamespace: true,
65385
65250
  };
65386
65251
  }
65387
- getDescription() {
65388
- // todo
65389
- return undefined;
65390
- }
65391
65252
  }
65392
65253
  exports.GatewayServiceGroupsMetadata = GatewayServiceGroupsMetadata;
65393
65254
  //# sourceMappingURL=gateway_service_groups_metadata.js.map
@@ -65415,10 +65276,6 @@ class GatewayVocabularyAnnotation extends _abstract_object_1.AbstractObject {
65415
65276
  allowNamespace: true,
65416
65277
  };
65417
65278
  }
65418
- getDescription() {
65419
- // todo
65420
- return undefined;
65421
- }
65422
65279
  }
65423
65280
  exports.GatewayVocabularyAnnotation = GatewayVocabularyAnnotation;
65424
65281
  //# sourceMappingURL=gateway_vocabulary_annotation.js.map
@@ -65446,10 +65303,6 @@ class GeneralHierarchyStorageExtrensionName extends _abstract_object_1.AbstractO
65446
65303
  allowNamespace: true,
65447
65304
  };
65448
65305
  }
65449
- getDescription() {
65450
- // todo
65451
- return undefined;
65452
- }
65453
65306
  }
65454
65307
  exports.GeneralHierarchyStorageExtrensionName = GeneralHierarchyStorageExtrensionName;
65455
65308
  //# sourceMappingURL=general_hierarchy_storage_extrension_name.js.map
@@ -65477,10 +65330,6 @@ class GeneralStorageStructure extends _abstract_object_1.AbstractObject {
65477
65330
  allowNamespace: true,
65478
65331
  };
65479
65332
  }
65480
- getDescription() {
65481
- // todo
65482
- return undefined;
65483
- }
65484
65333
  }
65485
65334
  exports.GeneralStorageStructure = GeneralStorageStructure;
65486
65335
  //# sourceMappingURL=general_storage_structure.js.map
@@ -65508,10 +65357,6 @@ class GeneralText extends _abstract_object_1.AbstractObject {
65508
65357
  allowNamespace: true,
65509
65358
  };
65510
65359
  }
65511
- getDescription() {
65512
- // todo
65513
- return undefined;
65514
- }
65515
65360
  }
65516
65361
  exports.GeneralText = GeneralText;
65517
65362
  //# sourceMappingURL=general_text.js.map
@@ -65539,10 +65384,6 @@ class HttpService extends _abstract_object_1.AbstractObject {
65539
65384
  allowNamespace: true,
65540
65385
  };
65541
65386
  }
65542
- getDescription() {
65543
- // todo
65544
- return undefined;
65545
- }
65546
65387
  }
65547
65388
  exports.HttpService = HttpService;
65548
65389
  //# sourceMappingURL=http_service.js.map
@@ -65570,10 +65411,6 @@ class IACBinaryData extends _abstract_object_1.AbstractObject {
65570
65411
  allowNamespace: true,
65571
65412
  };
65572
65413
  }
65573
- getDescription() {
65574
- // todo
65575
- return undefined;
65576
- }
65577
65414
  }
65578
65415
  exports.IACBinaryData = IACBinaryData;
65579
65416
  //# sourceMappingURL=iac_binary_data.js.map
@@ -65601,10 +65438,6 @@ class IACLanguageResource extends _abstract_object_1.AbstractObject {
65601
65438
  allowNamespace: true,
65602
65439
  };
65603
65440
  }
65604
- getDescription() {
65605
- // todo
65606
- return undefined;
65607
- }
65608
65441
  }
65609
65442
  exports.IACLanguageResource = IACLanguageResource;
65610
65443
  //# sourceMappingURL=iac_language_resource.js.map
@@ -65632,10 +65465,6 @@ class IACService extends _abstract_object_1.AbstractObject {
65632
65465
  allowNamespace: true,
65633
65466
  };
65634
65467
  }
65635
- getDescription() {
65636
- // todo
65637
- return undefined;
65638
- }
65639
65468
  }
65640
65469
  exports.IACService = IACService;
65641
65470
  //# sourceMappingURL=iac_service.js.map
@@ -65663,10 +65492,6 @@ class IACTemplate extends _abstract_object_1.AbstractObject {
65663
65492
  allowNamespace: true,
65664
65493
  };
65665
65494
  }
65666
- getDescription() {
65667
- // todo
65668
- return undefined;
65669
- }
65670
65495
  }
65671
65496
  exports.IACTemplate = IACTemplate;
65672
65497
  //# sourceMappingURL=iac_template.js.map
@@ -65694,10 +65519,6 @@ class IAMApp extends _abstract_object_1.AbstractObject {
65694
65519
  allowNamespace: true,
65695
65520
  };
65696
65521
  }
65697
- getDescription() {
65698
- // todo
65699
- return undefined;
65700
- }
65701
65522
  }
65702
65523
  exports.IAMApp = IAMApp;
65703
65524
  //# sourceMappingURL=iam_app.js.map
@@ -65730,10 +65551,6 @@ class ICFService extends _abstract_object_1.AbstractObject {
65730
65551
  this.parsedXML = undefined;
65731
65552
  super.setDirty();
65732
65553
  }
65733
- getDescription() {
65734
- // todo
65735
- return undefined;
65736
- }
65737
65554
  getURL() {
65738
65555
  var _a;
65739
65556
  this.parse();
@@ -65795,10 +65612,6 @@ class Idoc extends _abstract_object_1.AbstractObject {
65795
65612
  allowNamespace: true,
65796
65613
  };
65797
65614
  }
65798
- getDescription() {
65799
- // todo
65800
- return undefined;
65801
- }
65802
65615
  }
65803
65616
  exports.Idoc = Idoc;
65804
65617
  //# sourceMappingURL=idoc.js.map
@@ -65826,10 +65639,6 @@ class IdocExtension extends _abstract_object_1.AbstractObject {
65826
65639
  allowNamespace: false,
65827
65640
  };
65828
65641
  }
65829
- getDescription() {
65830
- // todo
65831
- return undefined;
65832
- }
65833
65642
  }
65834
65643
  exports.IdocExtension = IdocExtension;
65835
65644
  //# sourceMappingURL=idoc_extension.js.map
@@ -65857,10 +65666,6 @@ class InboundService extends _abstract_object_1.AbstractObject {
65857
65666
  allowNamespace: true,
65858
65667
  };
65859
65668
  }
65860
- getDescription() {
65861
- // todo
65862
- return undefined;
65863
- }
65864
65669
  }
65865
65670
  exports.InboundService = InboundService;
65866
65671
  //# sourceMappingURL=inbound_service.js.map
@@ -66082,10 +65887,6 @@ class InfoArea extends _abstract_object_1.AbstractObject {
66082
65887
  allowNamespace: true,
66083
65888
  };
66084
65889
  }
66085
- getDescription() {
66086
- // todo
66087
- return undefined;
66088
- }
66089
65890
  }
66090
65891
  exports.InfoArea = InfoArea;
66091
65892
  //# sourceMappingURL=info_area.js.map
@@ -66113,10 +65914,6 @@ class InfoObject extends _abstract_object_1.AbstractObject {
66113
65914
  allowNamespace: true,
66114
65915
  };
66115
65916
  }
66116
- getDescription() {
66117
- // todo
66118
- return undefined;
66119
- }
66120
65917
  }
66121
65918
  exports.InfoObject = InfoObject;
66122
65919
  //# sourceMappingURL=info_object.js.map
@@ -66234,10 +66031,6 @@ class KnowledgeTransferDocument extends _abstract_object_1.AbstractObject {
66234
66031
  allowNamespace: true,
66235
66032
  };
66236
66033
  }
66237
- getDescription() {
66238
- // todo
66239
- return undefined;
66240
- }
66241
66034
  }
66242
66035
  exports.KnowledgeTransferDocument = KnowledgeTransferDocument;
66243
66036
  //# sourceMappingURL=knowledge_transfer_document.js.map
@@ -66368,10 +66161,6 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
66368
66161
  getType() {
66369
66162
  return "TOBJ";
66370
66163
  }
66371
- getDescription() {
66372
- // todo
66373
- return undefined;
66374
- }
66375
66164
  getAllowedNaming() {
66376
66165
  return {
66377
66166
  maxLength: 31,
@@ -66565,10 +66354,6 @@ class MessagingChannel extends _abstract_object_1.AbstractObject {
66565
66354
  allowNamespace: true,
66566
66355
  };
66567
66356
  }
66568
- getDescription() {
66569
- // todo
66570
- return undefined;
66571
- }
66572
66357
  }
66573
66358
  exports.MessagingChannel = MessagingChannel;
66574
66359
  //# sourceMappingURL=messaging_channel.js.map
@@ -66602,6 +66387,7 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
66602
66387
  }
66603
66388
  isFolder() {
66604
66389
  var _a;
66390
+ this.parse();
66605
66391
  return ((_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.FOLDER) === "X";
66606
66392
  }
66607
66393
  getAllowedNaming() {
@@ -66623,10 +66409,6 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
66623
66409
  this.parsedXML = undefined;
66624
66410
  super.setDirty();
66625
66411
  }
66626
- getDescription() {
66627
- // this object type does not have a description
66628
- return undefined;
66629
- }
66630
66412
  parse() {
66631
66413
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
66632
66414
  if (this.parsedXML) {
@@ -66674,10 +66456,6 @@ class Namespace extends _abstract_object_1.AbstractObject {
66674
66456
  customRegex: new RegExp(/^\/[A-Z_\d]{3,8}\/$/i),
66675
66457
  };
66676
66458
  }
66677
- getDescription() {
66678
- // todo
66679
- return undefined;
66680
- }
66681
66459
  }
66682
66460
  exports.Namespace = Namespace;
66683
66461
  //# sourceMappingURL=namespace.js.map
@@ -66706,10 +66484,6 @@ class NeptuneAPI extends _abstract_object_1.AbstractObject {
66706
66484
  customRegex: /.*/i,
66707
66485
  };
66708
66486
  }
66709
- getDescription() {
66710
- // todo
66711
- return undefined;
66712
- }
66713
66487
  }
66714
66488
  exports.NeptuneAPI = NeptuneAPI;
66715
66489
  //# sourceMappingURL=neptune_api.js.map
@@ -66737,10 +66511,6 @@ class NeptuneApp extends _abstract_object_1.AbstractObject {
66737
66511
  allowNamespace: true,
66738
66512
  };
66739
66513
  }
66740
- getDescription() {
66741
- // todo
66742
- return undefined;
66743
- }
66744
66514
  }
66745
66515
  exports.NeptuneApp = NeptuneApp;
66746
66516
  //# sourceMappingURL=neptune_app.js.map
@@ -66768,10 +66538,6 @@ class NeptuneCustomColor extends _abstract_object_1.AbstractObject {
66768
66538
  allowNamespace: true,
66769
66539
  };
66770
66540
  }
66771
- getDescription() {
66772
- // todo
66773
- return undefined;
66774
- }
66775
66541
  }
66776
66542
  exports.NeptuneCustomColor = NeptuneCustomColor;
66777
66543
  //# sourceMappingURL=neptune_custom_color.js.map
@@ -66799,10 +66565,6 @@ class NeptuneCustomJSHelper extends _abstract_object_1.AbstractObject {
66799
66565
  allowNamespace: true,
66800
66566
  };
66801
66567
  }
66802
- getDescription() {
66803
- // todo
66804
- return undefined;
66805
- }
66806
66568
  }
66807
66569
  exports.NeptuneCustomJSHelper = NeptuneCustomJSHelper;
66808
66570
  //# sourceMappingURL=neptune_custom_js_helper.js.map
@@ -66830,10 +66592,6 @@ class NeptuneDocumentation extends _abstract_object_1.AbstractObject {
66830
66592
  allowNamespace: true,
66831
66593
  };
66832
66594
  }
66833
- getDescription() {
66834
- // todo
66835
- return undefined;
66836
- }
66837
66595
  }
66838
66596
  exports.NeptuneDocumentation = NeptuneDocumentation;
66839
66597
  //# sourceMappingURL=neptune_documentation.js.map
@@ -66861,10 +66619,6 @@ class NeptuneEnhancement extends _abstract_object_1.AbstractObject {
66861
66619
  allowNamespace: true,
66862
66620
  };
66863
66621
  }
66864
- getDescription() {
66865
- // todo
66866
- return undefined;
66867
- }
66868
66622
  }
66869
66623
  exports.NeptuneEnhancement = NeptuneEnhancement;
66870
66624
  //# sourceMappingURL=neptune_enhancement.js.map
@@ -66892,10 +66646,6 @@ class NeptuneLaunchpad extends _abstract_object_1.AbstractObject {
66892
66646
  allowNamespace: true,
66893
66647
  };
66894
66648
  }
66895
- getDescription() {
66896
- // todo
66897
- return undefined;
66898
- }
66899
66649
  }
66900
66650
  exports.NeptuneLaunchpad = NeptuneLaunchpad;
66901
66651
  //# sourceMappingURL=neptune_launchpad.js.map
@@ -66923,10 +66673,6 @@ class NeptuneLaunchpadLayout extends _abstract_object_1.AbstractObject {
66923
66673
  allowNamespace: true,
66924
66674
  };
66925
66675
  }
66926
- getDescription() {
66927
- // todo
66928
- return undefined;
66929
- }
66930
66676
  }
66931
66677
  exports.NeptuneLaunchpadLayout = NeptuneLaunchpadLayout;
66932
66678
  //# sourceMappingURL=neptune_launchpad_layout.js.map
@@ -66954,10 +66700,6 @@ class NeptuneLoginPage extends _abstract_object_1.AbstractObject {
66954
66700
  allowNamespace: true,
66955
66701
  };
66956
66702
  }
66957
- getDescription() {
66958
- // todo
66959
- return undefined;
66960
- }
66961
66703
  }
66962
66704
  exports.NeptuneLoginPage = NeptuneLoginPage;
66963
66705
  //# sourceMappingURL=neptune_login_page.js.map
@@ -66985,10 +66727,6 @@ class NeptuneMediaLibrary extends _abstract_object_1.AbstractObject {
66985
66727
  allowNamespace: true,
66986
66728
  };
66987
66729
  }
66988
- getDescription() {
66989
- // todo
66990
- return undefined;
66991
- }
66992
66730
  }
66993
66731
  exports.NeptuneMediaLibrary = NeptuneMediaLibrary;
66994
66732
  //# sourceMappingURL=neptune_media_library.js.map
@@ -67016,10 +66754,6 @@ class NeptuneMediaPack extends _abstract_object_1.AbstractObject {
67016
66754
  allowNamespace: true,
67017
66755
  };
67018
66756
  }
67019
- getDescription() {
67020
- // todo
67021
- return undefined;
67022
- }
67023
66757
  }
67024
66758
  exports.NeptuneMediaPack = NeptuneMediaPack;
67025
66759
  //# sourceMappingURL=neptune_media_pack.js.map
@@ -67047,10 +66781,6 @@ class NeptuneMetadata extends _abstract_object_1.AbstractObject {
67047
66781
  allowNamespace: true,
67048
66782
  };
67049
66783
  }
67050
- getDescription() {
67051
- // todo
67052
- return undefined;
67053
- }
67054
66784
  }
67055
66785
  exports.NeptuneMetadata = NeptuneMetadata;
67056
66786
  //# sourceMappingURL=neptune_metadata.js.map
@@ -67078,10 +66808,6 @@ class NeptuneMobileClient extends _abstract_object_1.AbstractObject {
67078
66808
  allowNamespace: true,
67079
66809
  };
67080
66810
  }
67081
- getDescription() {
67082
- // todo
67083
- return undefined;
67084
- }
67085
66811
  }
67086
66812
  exports.NeptuneMobileClient = NeptuneMobileClient;
67087
66813
  //# sourceMappingURL=neptune_mobile_client.js.map
@@ -67109,10 +66835,6 @@ class NeptuneOData extends _abstract_object_1.AbstractObject {
67109
66835
  allowNamespace: true,
67110
66836
  };
67111
66837
  }
67112
- getDescription() {
67113
- // todo
67114
- return undefined;
67115
- }
67116
66838
  }
67117
66839
  exports.NeptuneOData = NeptuneOData;
67118
66840
  //# sourceMappingURL=neptune_odata.js.map
@@ -67140,10 +66862,6 @@ class NeptunePolicy extends _abstract_object_1.AbstractObject {
67140
66862
  allowNamespace: true,
67141
66863
  };
67142
66864
  }
67143
- getDescription() {
67144
- // todo
67145
- return undefined;
67146
- }
67147
66865
  }
67148
66866
  exports.NeptunePolicy = NeptunePolicy;
67149
66867
  //# sourceMappingURL=neptune_policy.js.map
@@ -67171,10 +66889,6 @@ class NeptuneRFCMapping extends _abstract_object_1.AbstractObject {
67171
66889
  allowNamespace: true,
67172
66890
  };
67173
66891
  }
67174
- getDescription() {
67175
- // todo
67176
- return undefined;
67177
- }
67178
66892
  }
67179
66893
  exports.NeptuneRFCMapping = NeptuneRFCMapping;
67180
66894
  //# sourceMappingURL=neptune_rfc_mapping.js.map
@@ -67202,10 +66916,6 @@ class NeptuneRichTextTemplate extends _abstract_object_1.AbstractObject {
67202
66916
  allowNamespace: true,
67203
66917
  };
67204
66918
  }
67205
- getDescription() {
67206
- // todo
67207
- return undefined;
67208
- }
67209
66919
  }
67210
66920
  exports.NeptuneRichTextTemplate = NeptuneRichTextTemplate;
67211
66921
  //# sourceMappingURL=neptune_rich_text_template.js.map
@@ -67233,10 +66943,6 @@ class NeptuneSplashScreen extends _abstract_object_1.AbstractObject {
67233
66943
  allowNamespace: true,
67234
66944
  };
67235
66945
  }
67236
- getDescription() {
67237
- // todo
67238
- return undefined;
67239
- }
67240
66946
  }
67241
66947
  exports.NeptuneSplashScreen = NeptuneSplashScreen;
67242
66948
  //# sourceMappingURL=neptune_splash_screen.js.map
@@ -67264,10 +66970,6 @@ class NeptuneStickyBanner extends _abstract_object_1.AbstractObject {
67264
66970
  allowNamespace: true,
67265
66971
  };
67266
66972
  }
67267
- getDescription() {
67268
- // todo
67269
- return undefined;
67270
- }
67271
66973
  }
67272
66974
  exports.NeptuneStickyBanner = NeptuneStickyBanner;
67273
66975
  //# sourceMappingURL=neptune_sticky_banner.js.map
@@ -67295,10 +66997,6 @@ class NeptuneTile extends _abstract_object_1.AbstractObject {
67295
66997
  allowNamespace: true,
67296
66998
  };
67297
66999
  }
67298
- getDescription() {
67299
- // todo
67300
- return undefined;
67301
- }
67302
67000
  }
67303
67001
  exports.NeptuneTile = NeptuneTile;
67304
67002
  //# sourceMappingURL=neptune_tile.js.map
@@ -67326,10 +67024,6 @@ class NeptuneTileGroup extends _abstract_object_1.AbstractObject {
67326
67024
  allowNamespace: true,
67327
67025
  };
67328
67026
  }
67329
- getDescription() {
67330
- // todo
67331
- return undefined;
67332
- }
67333
67027
  }
67334
67028
  exports.NeptuneTileGroup = NeptuneTileGroup;
67335
67029
  //# sourceMappingURL=neptune_tile_group.js.map
@@ -67357,10 +67051,6 @@ class NeptuneTileLayout extends _abstract_object_1.AbstractObject {
67357
67051
  allowNamespace: true,
67358
67052
  };
67359
67053
  }
67360
- getDescription() {
67361
- // todo
67362
- return undefined;
67363
- }
67364
67054
  }
67365
67055
  exports.NeptuneTileLayout = NeptuneTileLayout;
67366
67056
  //# sourceMappingURL=neptune_tile_layout.js.map
@@ -67388,10 +67078,6 @@ class NeptuneURLAlias extends _abstract_object_1.AbstractObject {
67388
67078
  allowNamespace: true,
67389
67079
  };
67390
67080
  }
67391
- getDescription() {
67392
- // todo
67393
- return undefined;
67394
- }
67395
67081
  }
67396
67082
  exports.NeptuneURLAlias = NeptuneURLAlias;
67397
67083
  //# sourceMappingURL=neptune_url_alias.js.map
@@ -67485,10 +67171,6 @@ class Oauth2Profile extends _abstract_object_1.AbstractObject {
67485
67171
  allowNamespace: true,
67486
67172
  };
67487
67173
  }
67488
- getDescription() {
67489
- // todo
67490
- return undefined;
67491
- }
67492
67174
  listScopes() {
67493
67175
  var _a, _b, _c, _d, _e;
67494
67176
  const ret = [];
@@ -67525,10 +67207,6 @@ class ObjectCharacteristic extends _abstract_object_1.AbstractObject {
67525
67207
  allowNamespace: true,
67526
67208
  };
67527
67209
  }
67528
- getDescription() {
67529
- // todo
67530
- return undefined;
67531
- }
67532
67210
  }
67533
67211
  exports.ObjectCharacteristic = ObjectCharacteristic;
67534
67212
  //# sourceMappingURL=object_characteristic.js.map
@@ -67556,10 +67234,6 @@ class OutboundService extends _abstract_object_1.AbstractObject {
67556
67234
  allowNamespace: true,
67557
67235
  };
67558
67236
  }
67559
- getDescription() {
67560
- // todo
67561
- return undefined;
67562
- }
67563
67237
  }
67564
67238
  exports.OutboundService = OutboundService;
67565
67239
  //# sourceMappingURL=outbound_service.js.map
@@ -67587,10 +67261,6 @@ class Package extends _abstract_object_1.AbstractObject {
67587
67261
  allowNamespace: true,
67588
67262
  };
67589
67263
  }
67590
- getDescription() {
67591
- // todo
67592
- return undefined;
67593
- }
67594
67264
  }
67595
67265
  exports.Package = Package;
67596
67266
  //# sourceMappingURL=package.js.map
@@ -67618,10 +67288,6 @@ class PackageInterface extends _abstract_object_1.AbstractObject {
67618
67288
  allowNamespace: true,
67619
67289
  };
67620
67290
  }
67621
- getDescription() {
67622
- // todo
67623
- return undefined;
67624
- }
67625
67291
  }
67626
67292
  exports.PackageInterface = PackageInterface;
67627
67293
  //# sourceMappingURL=package_interface.js.map
@@ -67649,10 +67315,6 @@ class PageFormat extends _abstract_object_1.AbstractObject {
67649
67315
  allowNamespace: true,
67650
67316
  };
67651
67317
  }
67652
- getDescription() {
67653
- // todo
67654
- return undefined;
67655
- }
67656
67318
  }
67657
67319
  exports.PageFormat = PageFormat;
67658
67320
  //# sourceMappingURL=page_format.js.map
@@ -67680,10 +67342,6 @@ class Parameter extends _abstract_object_1.AbstractObject {
67680
67342
  allowNamespace: true,
67681
67343
  };
67682
67344
  }
67683
- getDescription() {
67684
- // todo
67685
- return undefined;
67686
- }
67687
67345
  }
67688
67346
  exports.Parameter = Parameter;
67689
67347
  //# sourceMappingURL=parameter.js.map
@@ -67711,10 +67369,6 @@ class PersonalizationObject extends _abstract_object_1.AbstractObject {
67711
67369
  allowNamespace: true,
67712
67370
  };
67713
67371
  }
67714
- getDescription() {
67715
- // todo
67716
- return undefined;
67717
- }
67718
67372
  }
67719
67373
  exports.PersonalizationObject = PersonalizationObject;
67720
67374
  //# sourceMappingURL=personalization_object.js.map
@@ -67959,10 +67613,6 @@ class PushChannel extends _abstract_object_1.AbstractObject {
67959
67613
  allowNamespace: true,
67960
67614
  };
67961
67615
  }
67962
- getDescription() {
67963
- // todo
67964
- return undefined;
67965
- }
67966
67616
  }
67967
67617
  exports.PushChannel = PushChannel;
67968
67618
  //# sourceMappingURL=push_channel.js.map
@@ -67990,10 +67640,6 @@ class QueryUserGroup extends _abstract_object_1.AbstractObject {
67990
67640
  allowNamespace: true,
67991
67641
  };
67992
67642
  }
67993
- getDescription() {
67994
- // todo
67995
- return undefined;
67996
- }
67997
67643
  }
67998
67644
  exports.QueryUserGroup = QueryUserGroup;
67999
67645
  //# sourceMappingURL=query_user_group.js.map
@@ -68960,10 +68606,6 @@ class RestrictionField extends _abstract_object_1.AbstractObject {
68960
68606
  allowNamespace: true,
68961
68607
  };
68962
68608
  }
68963
- getDescription() {
68964
- // todo
68965
- return undefined;
68966
- }
68967
68609
  }
68968
68610
  exports.RestrictionField = RestrictionField;
68969
68611
  //# sourceMappingURL=restriction_field.js.map
@@ -68991,10 +68633,6 @@ class RestrictionType extends _abstract_object_1.AbstractObject {
68991
68633
  allowNamespace: true,
68992
68634
  };
68993
68635
  }
68994
- getDescription() {
68995
- // todo
68996
- return undefined;
68997
- }
68998
68636
  }
68999
68637
  exports.RestrictionType = RestrictionType;
69000
68638
  //# sourceMappingURL=restriction_type.js.map
@@ -69022,10 +68660,6 @@ class RFCService extends _abstract_object_1.AbstractObject {
69022
68660
  allowNamespace: true,
69023
68661
  };
69024
68662
  }
69025
- getDescription() {
69026
- // todo
69027
- return undefined;
69028
- }
69029
68663
  }
69030
68664
  exports.RFCService = RFCService;
69031
68665
  //# sourceMappingURL=rfc_service.js.map
@@ -69053,10 +68687,6 @@ class SAPScript extends _abstract_object_1.AbstractObject {
69053
68687
  allowNamespace: true,
69054
68688
  };
69055
68689
  }
69056
- getDescription() {
69057
- // todo
69058
- return undefined;
69059
- }
69060
68690
  }
69061
68691
  exports.SAPScript = SAPScript;
69062
68692
  //# sourceMappingURL=sapscript.js.map
@@ -69084,10 +68714,6 @@ class SAPScriptStyle extends _abstract_object_1.AbstractObject {
69084
68714
  allowNamespace: true,
69085
68715
  };
69086
68716
  }
69087
- getDescription() {
69088
- // todo
69089
- return undefined;
69090
- }
69091
68717
  }
69092
68718
  exports.SAPScriptStyle = SAPScriptStyle;
69093
68719
  //# sourceMappingURL=sapscript_style.js.map
@@ -69115,10 +68741,6 @@ class ScreenVariant extends _abstract_object_1.AbstractObject {
69115
68741
  allowNamespace: true,
69116
68742
  };
69117
68743
  }
69118
- getDescription() {
69119
- // todo
69120
- return undefined;
69121
- }
69122
68744
  }
69123
68745
  exports.ScreenVariant = ScreenVariant;
69124
68746
  //# sourceMappingURL=screen_variant.js.map
@@ -69146,10 +68768,6 @@ class SearchHelp extends _abstract_object_1.AbstractObject {
69146
68768
  allowNamespace: true,
69147
68769
  };
69148
68770
  }
69149
- getDescription() {
69150
- // todo
69151
- return undefined;
69152
- }
69153
68771
  }
69154
68772
  exports.SearchHelp = SearchHelp;
69155
68773
  //# sourceMappingURL=search_help.js.map
@@ -69177,10 +68795,6 @@ class ServiceBinding extends _abstract_object_1.AbstractObject {
69177
68795
  allowNamespace: true,
69178
68796
  };
69179
68797
  }
69180
- getDescription() {
69181
- // todo
69182
- return undefined;
69183
- }
69184
68798
  }
69185
68799
  exports.ServiceBinding = ServiceBinding;
69186
68800
  //# sourceMappingURL=service_binding.js.map
@@ -69208,10 +68822,6 @@ class ServiceDefinition extends _abstract_object_1.AbstractObject {
69208
68822
  allowNamespace: true,
69209
68823
  };
69210
68824
  }
69211
- getDescription() {
69212
- // todo
69213
- return undefined;
69214
- }
69215
68825
  }
69216
68826
  exports.ServiceDefinition = ServiceDefinition;
69217
68827
  //# sourceMappingURL=service_definition.js.map
@@ -69239,10 +68849,6 @@ class SharedMemory extends _abstract_object_1.AbstractObject {
69239
68849
  allowNamespace: true,
69240
68850
  };
69241
68851
  }
69242
- getDescription() {
69243
- // todo
69244
- return undefined;
69245
- }
69246
68852
  }
69247
68853
  exports.SharedMemory = SharedMemory;
69248
68854
  //# sourceMappingURL=shared_memory.js.map
@@ -69270,10 +68876,6 @@ class SmartForm extends _abstract_object_1.AbstractObject {
69270
68876
  allowNamespace: true,
69271
68877
  };
69272
68878
  }
69273
- getDescription() {
69274
- // todo
69275
- return undefined;
69276
- }
69277
68879
  }
69278
68880
  exports.SmartForm = SmartForm;
69279
68881
  //# sourceMappingURL=smart_form.js.map
@@ -69301,10 +68903,6 @@ class SmartStyle extends _abstract_object_1.AbstractObject {
69301
68903
  allowNamespace: true,
69302
68904
  };
69303
68905
  }
69304
- getDescription() {
69305
- // todo
69306
- return undefined;
69307
- }
69308
68906
  }
69309
68907
  exports.SmartStyle = SmartStyle;
69310
68908
  //# sourceMappingURL=smart_style.js.map
@@ -69332,10 +68930,6 @@ class StandardTask extends _abstract_object_1.AbstractObject {
69332
68930
  allowNamespace: true,
69333
68931
  };
69334
68932
  }
69335
- getDescription() {
69336
- // todo
69337
- return undefined;
69338
- }
69339
68933
  }
69340
68934
  exports.StandardTask = StandardTask;
69341
68935
  //# sourceMappingURL=standard_task.js.map
@@ -69363,10 +68957,6 @@ class SwitchAssignmentHierarchy extends _abstract_object_1.AbstractObject {
69363
68957
  allowNamespace: true,
69364
68958
  };
69365
68959
  }
69366
- getDescription() {
69367
- // todo
69368
- return undefined;
69369
- }
69370
68960
  }
69371
68961
  exports.SwitchAssignmentHierarchy = SwitchAssignmentHierarchy;
69372
68962
  //# sourceMappingURL=switch_assignment_hierarchy.js.map
@@ -69394,10 +68984,6 @@ class SwitchAssignments extends _abstract_object_1.AbstractObject {
69394
68984
  allowNamespace: true,
69395
68985
  };
69396
68986
  }
69397
- getDescription() {
69398
- // todo
69399
- return undefined;
69400
- }
69401
68987
  }
69402
68988
  exports.SwitchAssignments = SwitchAssignments;
69403
68989
  //# sourceMappingURL=switch_assignments.js.map
@@ -70117,10 +69703,6 @@ class TechnicalJobDefinition extends _abstract_object_1.AbstractObject {
70117
69703
  allowNamespace: true,
70118
69704
  };
70119
69705
  }
70120
- getDescription() {
70121
- // todo
70122
- return undefined;
70123
- }
70124
69706
  }
70125
69707
  exports.TechnicalJobDefinition = TechnicalJobDefinition;
70126
69708
  //# sourceMappingURL=technical_job_definition.js.map
@@ -70222,10 +69804,6 @@ class TransactionVariant extends _abstract_object_1.AbstractObject {
70222
69804
  allowNamespace: true,
70223
69805
  };
70224
69806
  }
70225
- getDescription() {
70226
- // todo
70227
- return undefined;
70228
- }
70229
69807
  }
70230
69808
  exports.TransactionVariant = TransactionVariant;
70231
69809
  //# sourceMappingURL=transaction_variant.js.map
@@ -70253,10 +69831,6 @@ class Transformation extends _abstract_object_1.AbstractObject {
70253
69831
  allowNamespace: true,
70254
69832
  };
70255
69833
  }
70256
- getDescription() {
70257
- // todo
70258
- return undefined;
70259
- }
70260
69834
  }
70261
69835
  exports.Transformation = Transformation;
70262
69836
  //# sourceMappingURL=transformation.js.map
@@ -70527,10 +70101,6 @@ class ViewCluster extends _abstract_object_1.AbstractObject {
70527
70101
  allowNamespace: true,
70528
70102
  };
70529
70103
  }
70530
- getDescription() {
70531
- // todo
70532
- return undefined;
70533
- }
70534
70104
  }
70535
70105
  exports.ViewCluster = ViewCluster;
70536
70106
  //# sourceMappingURL=view_cluster.js.map
@@ -70558,10 +70128,6 @@ class VirtualEndPoint extends _abstract_object_1.AbstractObject {
70558
70128
  allowNamespace: true,
70559
70129
  };
70560
70130
  }
70561
- getDescription() {
70562
- // todo
70563
- return undefined;
70564
- }
70565
70131
  }
70566
70132
  exports.VirtualEndPoint = VirtualEndPoint;
70567
70133
  //# sourceMappingURL=virtual_end_point.js.map
@@ -70589,10 +70155,6 @@ class WebDynproApplication extends _abstract_object_1.AbstractObject {
70589
70155
  allowNamespace: true,
70590
70156
  };
70591
70157
  }
70592
- getDescription() {
70593
- // todo
70594
- return undefined;
70595
- }
70596
70158
  }
70597
70159
  exports.WebDynproApplication = WebDynproApplication;
70598
70160
  //# sourceMappingURL=web_dynpro_application.js.map
@@ -70620,10 +70182,6 @@ class WebDynproApplicationConfiguration extends _abstract_object_1.AbstractObjec
70620
70182
  allowNamespace: true,
70621
70183
  };
70622
70184
  }
70623
- getDescription() {
70624
- // todo
70625
- return undefined;
70626
- }
70627
70185
  }
70628
70186
  exports.WebDynproApplicationConfiguration = WebDynproApplicationConfiguration;
70629
70187
  //# sourceMappingURL=web_dynpro_application_configuration.js.map
@@ -70651,10 +70209,6 @@ class WebDynproComponent extends _abstract_object_1.AbstractObject {
70651
70209
  allowNamespace: true,
70652
70210
  };
70653
70211
  }
70654
- getDescription() {
70655
- // todo
70656
- return undefined;
70657
- }
70658
70212
  }
70659
70213
  exports.WebDynproComponent = WebDynproComponent;
70660
70214
  //# sourceMappingURL=web_dynpro_component.js.map
@@ -70682,10 +70236,6 @@ class WebDynproComponentConfiguration extends _abstract_object_1.AbstractObject
70682
70236
  allowNamespace: true,
70683
70237
  };
70684
70238
  }
70685
- getDescription() {
70686
- // todo
70687
- return undefined;
70688
- }
70689
70239
  }
70690
70240
  exports.WebDynproComponentConfiguration = WebDynproComponentConfiguration;
70691
70241
  //# sourceMappingURL=web_dynpro_component_configuration.js.map
@@ -70793,10 +70343,6 @@ class WebReportingTemplate extends _abstract_object_1.AbstractObject {
70793
70343
  allowNamespace: true,
70794
70344
  };
70795
70345
  }
70796
- getDescription() {
70797
- // todo
70798
- return undefined;
70799
- }
70800
70346
  }
70801
70347
  exports.WebReportingTemplate = WebReportingTemplate;
70802
70348
  //# sourceMappingURL=web_reporting_template.js.map
@@ -71361,7 +70907,7 @@ class Registry {
71361
70907
  }
71362
70908
  static abaplintVersion() {
71363
70909
  // magic, see build script "version.js"
71364
- return "2.120.64";
70910
+ return "2.120.66";
71365
70911
  }
71366
70912
  getDDICReferences() {
71367
70913
  return this.ddicReferences;
@@ -81954,8 +81500,8 @@ class ElseAfterAllReturns extends _abap_rule_1.ABAPRule {
81954
81500
  continue;
81955
81501
  }
81956
81502
  const fix = edit_helper_1.EditHelper.merge(edit_helper_1.EditHelper.replaceRange(file, elseStatement.getFirstToken().getStart(), elseStatement.getLastToken().getEnd(), "ENDIF."), edit_helper_1.EditHelper.deleteStatement(file, endifStatement));
81957
- // eslint-disable-next-line max-len
81958
- issues.push(issue_1.Issue.atStatement(file, elseStatement, "Redundant ELSE: all prior branches exit unconditionally", this.getMetadata().key, this.conf.severity, fix));
81503
+ const message = "Redundant ELSE: all prior branches exit unconditionally";
81504
+ issues.push(issue_1.Issue.atStatement(file, elseStatement, message, this.getMetadata().key, this.conf.severity, fix));
81959
81505
  }
81960
81506
  }
81961
81507
  return issues;
@@ -84991,6 +84537,8 @@ const Statements = __importStar(__webpack_require__(/*! ../abap/2_statements/sta
84991
84537
  const Expressions = __importStar(__webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
84992
84538
  const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
84993
84539
  const edit_helper_1 = __webpack_require__(/*! ../edit_helper */ "./node_modules/@abaplint/core/build/src/edit_helper.js");
84540
+ const syntax_1 = __webpack_require__(/*! ../abap/5_syntax/syntax */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js");
84541
+ const _reference_1 = __webpack_require__(/*! ../abap/5_syntax/_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
84994
84542
  // todo: abstract methods from superclass parents(might be multiple), if class is not abstract
84995
84543
  class ImplementMethodsConf extends _basic_rule_config_1.BasicRuleConfig {
84996
84544
  }
@@ -85101,7 +84649,7 @@ class ImplementMethods extends _abap_rule_1.ABAPRule {
85101
84649
  return undefined;
85102
84650
  }
85103
84651
  findInterface(identifier, name) {
85104
- const idef = this.findInterfaceByName(name);
84652
+ const idef = this.findInterfaceByName(name, identifier);
85105
84653
  if (idef === undefined) {
85106
84654
  const message = "Implemented interface \"" + name + "\" not found";
85107
84655
  const issue = issue_1.Issue.atIdentifier(identifier, message, this.getMetadata().key, this.conf.severity);
@@ -85109,24 +84657,45 @@ class ImplementMethods extends _abap_rule_1.ABAPRule {
85109
84657
  }
85110
84658
  return idef;
85111
84659
  }
85112
- findInterfaceByName(name) {
84660
+ findInterfaceByName(name, usedAt) {
85113
84661
  var _a;
85114
- let idef = undefined;
85115
84662
  const intf = this.reg.getObject("INTF", name);
85116
- if (intf === undefined) {
85117
- // lookup in localfiles
84663
+ const global = (_a = intf === null || intf === void 0 ? void 0 : intf.getMainABAPFile()) === null || _a === void 0 ? void 0 : _a.getInfo().listInterfaceDefinitions()[0];
84664
+ let local = undefined;
84665
+ for (const file of this.obj.getABAPFiles()) {
84666
+ local = file.getInfo().getInterfaceDefinitionByName(name);
84667
+ if (local) {
84668
+ break;
84669
+ }
84670
+ }
84671
+ if (local === undefined || global === undefined) {
84672
+ return global || local;
84673
+ }
84674
+ // both a local and a global interface exist with the same name, use what the syntax check resolved
84675
+ const resolved = this.findResolvedInterface(name, usedAt);
84676
+ if (resolved !== undefined) {
85118
84677
  for (const file of this.obj.getABAPFiles()) {
85119
- const found = file.getInfo().getInterfaceDefinitionByName(name);
85120
- if (found) {
85121
- idef = found;
85122
- break;
84678
+ for (const idef of file.getInfo().listInterfaceDefinitions()) {
84679
+ if (idef.identifier.equals(resolved)) {
84680
+ return idef;
84681
+ }
85123
84682
  }
85124
84683
  }
85125
84684
  }
85126
- else {
85127
- idef = (_a = intf.getMainABAPFile()) === null || _a === void 0 ? void 0 : _a.getInfo().listInterfaceDefinitions()[0];
84685
+ return global;
84686
+ }
84687
+ findResolvedInterface(name, usedAt) {
84688
+ var _a, _b, _c;
84689
+ const scope = new syntax_1.SyntaxLogic(this.reg, this.obj).run().spaghetti.lookupPosition(usedAt.getStart(), usedAt.getFilename());
84690
+ const upper = name.toUpperCase();
84691
+ for (const ref of (scope === null || scope === void 0 ? void 0 : scope.getData().references) || []) {
84692
+ if (ref.referenceType === _reference_1.ReferenceType.ObjectOrientedReference
84693
+ && ((_a = ref.extra) === null || _a === void 0 ? void 0 : _a.ooType) === "INTF"
84694
+ && ((_c = (_b = ref.extra) === null || _b === void 0 ? void 0 : _b.ooName) === null || _c === void 0 ? void 0 : _c.toUpperCase()) === upper) {
84695
+ return ref.resolved;
84696
+ }
85128
84697
  }
85129
- return idef;
84698
+ return undefined;
85130
84699
  }
85131
84700
  /** including implemented super interfaces */
85132
84701
  findInterfaceMethods(idef) {
@@ -85245,7 +84814,7 @@ class ImplementMethods extends _abap_rule_1.ABAPRule {
85245
84814
  }
85246
84815
  if (found === undefined) {
85247
84816
  for (const i of def.interfaces) {
85248
- const idef = this.findInterfaceByName(i.name);
84817
+ const idef = this.findInterfaceByName(i.name, def.identifier);
85249
84818
  if (idef === undefined) {
85250
84819
  continue;
85251
84820
  }
@@ -85937,6 +85506,7 @@ __exportStar(__webpack_require__(/*! ./prefer_string_template */ "./node_modules
85937
85506
  __exportStar(__webpack_require__(/*! ./prefer_returning_to_exporting */ "./node_modules/@abaplint/core/build/src/rules/prefer_returning_to_exporting.js"), exports);
85938
85507
  __exportStar(__webpack_require__(/*! ./prefer_xsdbool */ "./node_modules/@abaplint/core/build/src/rules/prefer_xsdbool.js"), exports);
85939
85508
  __exportStar(__webpack_require__(/*! ./preferred_compare_operator */ "./node_modules/@abaplint/core/build/src/rules/preferred_compare_operator.js"), exports);
85509
+ __exportStar(__webpack_require__(/*! ./preferred_parameter_ignored */ "./node_modules/@abaplint/core/build/src/rules/preferred_parameter_ignored.js"), exports);
85940
85510
  __exportStar(__webpack_require__(/*! ./prefix_is_current_class */ "./node_modules/@abaplint/core/build/src/rules/prefix_is_current_class.js"), exports);
85941
85511
  __exportStar(__webpack_require__(/*! ./reduce_procedural_code */ "./node_modules/@abaplint/core/build/src/rules/reduce_procedural_code.js"), exports);
85942
85512
  __exportStar(__webpack_require__(/*! ./reduce_string_templates */ "./node_modules/@abaplint/core/build/src/rules/reduce_string_templates.js"), exports);
@@ -94978,6 +94548,157 @@ exports.PreferredCompareOperator = PreferredCompareOperator;
94978
94548
 
94979
94549
  /***/ },
94980
94550
 
94551
+ /***/ "./node_modules/@abaplint/core/build/src/rules/preferred_parameter_ignored.js"
94552
+ /*!************************************************************************************!*\
94553
+ !*** ./node_modules/@abaplint/core/build/src/rules/preferred_parameter_ignored.js ***!
94554
+ \************************************************************************************/
94555
+ (__unused_webpack_module, exports, __webpack_require__) {
94556
+
94557
+ "use strict";
94558
+
94559
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
94560
+ if (k2 === undefined) k2 = k;
94561
+ var desc = Object.getOwnPropertyDescriptor(m, k);
94562
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
94563
+ desc = { enumerable: true, get: function() { return m[k]; } };
94564
+ }
94565
+ Object.defineProperty(o, k2, desc);
94566
+ }) : (function(o, m, k, k2) {
94567
+ if (k2 === undefined) k2 = k;
94568
+ o[k2] = m[k];
94569
+ }));
94570
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
94571
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
94572
+ }) : function(o, v) {
94573
+ o["default"] = v;
94574
+ });
94575
+ var __importStar = (this && this.__importStar) || (function () {
94576
+ var ownKeys = function(o) {
94577
+ ownKeys = Object.getOwnPropertyNames || function (o) {
94578
+ var ar = [];
94579
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
94580
+ return ar;
94581
+ };
94582
+ return ownKeys(o);
94583
+ };
94584
+ return function (mod) {
94585
+ if (mod && mod.__esModule) return mod;
94586
+ var result = {};
94587
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
94588
+ __setModuleDefault(result, mod);
94589
+ return result;
94590
+ };
94591
+ })();
94592
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
94593
+ exports.PreferredParameterIgnored = exports.PreferredParameterIgnoredConf = void 0;
94594
+ const Expressions = __importStar(__webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
94595
+ const issue_1 = __webpack_require__(/*! ../issue */ "./node_modules/@abaplint/core/build/src/issue.js");
94596
+ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js");
94597
+ const _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ "./node_modules/@abaplint/core/build/src/rules/_abap_rule.js");
94598
+ const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
94599
+ const edit_helper_1 = __webpack_require__(/*! ../edit_helper */ "./node_modules/@abaplint/core/build/src/edit_helper.js");
94600
+ class PreferredParameterIgnoredConf extends _basic_rule_config_1.BasicRuleConfig {
94601
+ }
94602
+ exports.PreferredParameterIgnoredConf = PreferredParameterIgnoredConf;
94603
+ class PreferredParameterIgnored extends _abap_rule_1.ABAPRule {
94604
+ constructor() {
94605
+ super(...arguments);
94606
+ this.conf = new PreferredParameterIgnoredConf();
94607
+ }
94608
+ getMetadata() {
94609
+ return {
94610
+ key: "preferred_parameter_ignored",
94611
+ title: "PREFERRED PARAMETER is ignored",
94612
+ shortDescription: `PREFERRED PARAMETER on an IMPORTING clause that still has a mandatory
94613
+ parameter. The addition names the parameter a positional call fills, which only
94614
+ means something when every parameter may be left out - so with a mandatory one
94615
+ present it does nothing.`,
94616
+ extendedInformation: `\`PREFERRED PARAMETER\` names the importing parameter that a call filling exactly
94617
+ one parameter positionally fills. That question only arises when a parameter
94618
+ may be LEFT OUT, so the addition is ignored while any importing parameter is
94619
+ neither \`OPTIONAL\` nor carries a \`DEFAULT\`.
94620
+
94621
+ The compiler warns "Declare the parameter as OPTIONAL. The addition PREFERRED
94622
+ PARAMETER is ignored if non-optional parameters are used", yet it still lets a
94623
+ call leave the preferred parameter out. So the quick fix declares the mandatory
94624
+ importing parameters OPTIONAL, as the compiler asks: every call that compiles
94625
+ today keeps compiling. Removing the addition instead would turn the calls that
94626
+ leave the preferred parameter out into syntax errors.`,
94627
+ tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
94628
+ badExample: `METHODS meth
94629
+ IMPORTING
94630
+ val TYPE string
94631
+ other TYPE i OPTIONAL
94632
+ PREFERRED PARAMETER val.`,
94633
+ goodExample: `METHODS meth
94634
+ IMPORTING
94635
+ val TYPE string OPTIONAL
94636
+ other TYPE i OPTIONAL
94637
+ PREFERRED PARAMETER val.`,
94638
+ };
94639
+ }
94640
+ getConfig() {
94641
+ return this.conf;
94642
+ }
94643
+ setConfig(conf) {
94644
+ this.conf = conf;
94645
+ }
94646
+ runParsed(file) {
94647
+ var _a;
94648
+ var _b;
94649
+ const issues = [];
94650
+ for (const statement of file.getStatements()) {
94651
+ const importing = statement.findFirstExpression(Expressions.MethodDefImporting);
94652
+ if (importing === undefined) {
94653
+ continue;
94654
+ }
94655
+ const preferred = this.preferredTokens(importing);
94656
+ if (preferred === undefined) {
94657
+ continue;
94658
+ }
94659
+ const mandatory = this.mandatoryParameters(importing);
94660
+ if (mandatory.length === 0) {
94661
+ continue;
94662
+ }
94663
+ const fix = edit_helper_1.EditHelper.mergeList(mandatory.map(p => edit_helper_1.EditHelper.insertAt(file, p.getLastToken().getEnd(), " OPTIONAL")));
94664
+ const name = (_b = (_a = mandatory[0].findFirstExpression(Expressions.MethodParamName)) === null || _a === void 0 ? void 0 : _a.concatTokens()) !== null && _b !== void 0 ? _b : mandatory[0].concatTokens();
94665
+ const message = `PREFERRED PARAMETER is ignored while ${name} is not optional`;
94666
+ issues.push(issue_1.Issue.atStatement(file, statement, message, this.getMetadata().key, this.conf.severity, fix));
94667
+ }
94668
+ return issues;
94669
+ }
94670
+ ////////////////
94671
+ /** The span of `PREFERRED PARAMETER <name>`, or undefined when the clause
94672
+ * does not carry the addition. */
94673
+ preferredTokens(importing) {
94674
+ const tokens = importing.getTokens();
94675
+ for (let i = 0; i + 2 < tokens.length; i++) {
94676
+ if (tokens[i].getStr().toUpperCase() === "PREFERRED"
94677
+ && tokens[i + 1].getStr().toUpperCase() === "PARAMETER") {
94678
+ return { start: tokens[i].getStart(), end: tokens[i + 2].getEnd() };
94679
+ }
94680
+ }
94681
+ return undefined;
94682
+ }
94683
+ /** The importing parameters that are neither OPTIONAL nor have a DEFAULT,
94684
+ * empty when every one of them may be left out. */
94685
+ mandatoryParameters(importing) {
94686
+ const ret = [];
94687
+ for (const param of importing.findDirectExpressions(Expressions.MethodParamOptional)) {
94688
+ const concat = param.concatTokens().toUpperCase();
94689
+ if (concat.endsWith(" OPTIONAL") || concat.includes(" DEFAULT ")) {
94690
+ continue;
94691
+ }
94692
+ ret.push(param);
94693
+ }
94694
+ return ret;
94695
+ }
94696
+ }
94697
+ exports.PreferredParameterIgnored = PreferredParameterIgnored;
94698
+ //# sourceMappingURL=preferred_parameter_ignored.js.map
94699
+
94700
+ /***/ },
94701
+
94981
94702
  /***/ "./node_modules/@abaplint/core/build/src/rules/prefix_is_current_class.js"
94982
94703
  /*!********************************************************************************!*\
94983
94704
  !*** ./node_modules/@abaplint/core/build/src/rules/prefix_is_current_class.js ***!
@@ -104494,7 +104215,8 @@ class Chunk {
104494
104215
  }
104495
104216
  const indentationByLine = this.mappings.length > 0 ? [] : undefined;
104496
104217
  for (const l of this.raw.split("\n")) {
104497
- if (l.startsWith("}")) {
104218
+ // trimStart, a pre-indented closing brace must still close its level
104219
+ if (l.trimStart().startsWith("}")) {
104498
104220
  i = i - 1;
104499
104221
  }
104500
104222
  // clamp so unbalanced braces never produce a negative indent/shift
@@ -108411,22 +108133,18 @@ class ReduceBodyTranspiler {
108411
108133
  for (const declaration of declarations) {
108412
108134
  ret.appendString(declaration + "\n");
108413
108135
  }
108414
- let indent = "";
108415
- const levelIndents = [];
108136
+ // no manual indentation, Chunk.runIndentationLogic indents by brace depth,
108137
+ // pre-indented closing braces would not be recognized and drift the indentation
108416
108138
  for (const descriptor of descriptors) {
108417
- this.appendBlocks(ret, descriptor.beforeLoop, indent);
108418
- ret.appendString(indent + descriptor.open + "\n");
108419
- indent += " ";
108420
- levelIndents.push(indent);
108421
- this.appendBlocks(ret, descriptor.preBody, indent);
108139
+ this.appendBlocks(ret, descriptor.beforeLoop);
108140
+ ret.appendString(descriptor.open + "\n");
108141
+ this.appendBlocks(ret, descriptor.preBody);
108422
108142
  }
108423
- this.appendBlock(ret, this.transpileNext(body, traversal), indent);
108143
+ this.appendBlock(ret, this.transpileNext(body, traversal));
108424
108144
  for (let i = descriptors.length - 1; i >= 0; i--) {
108425
108145
  const descriptor = descriptors[i];
108426
- const currentIndent = levelIndents[i];
108427
- this.appendBlocks(ret, descriptor.postBody, currentIndent);
108428
- indent = currentIndent.substring(0, Math.max(0, currentIndent.length - 2));
108429
- ret.appendString(indent + descriptor.close + "\n");
108146
+ this.appendBlocks(ret, descriptor.postBody);
108147
+ ret.appendString(descriptor.close + "\n");
108430
108148
  }
108431
108149
  ret.appendString(`return ${returnField};\n`);
108432
108150
  ret.appendString("})())");
@@ -108646,15 +108364,15 @@ class ReduceBodyTranspiler {
108646
108364
  }
108647
108365
  return ret;
108648
108366
  }
108649
- appendBlocks(ret, blocks, indent) {
108367
+ appendBlocks(ret, blocks) {
108650
108368
  for (const block of blocks) {
108651
- this.appendBlock(ret, block, indent);
108369
+ this.appendBlock(ret, block);
108652
108370
  }
108653
108371
  }
108654
- appendBlock(ret, block, indent) {
108372
+ appendBlock(ret, block) {
108655
108373
  for (const line of block.split("\n")) {
108656
108374
  if (line.trim() !== "") {
108657
- ret.appendString(indent + line.replace(/\r/g, "") + "\n");
108375
+ ret.appendString(line.replace(/\r/g, "") + "\n");
108658
108376
  }
108659
108377
  }
108660
108378
  }
@@ -108770,11 +108488,15 @@ const corresponding_body_1 = __webpack_require__(/*! ./corresponding_body */ "./
108770
108488
  const filter_body_1 = __webpack_require__(/*! ./filter_body */ "./node_modules/@abaplint/transpiler/build/src/expressions/filter_body.js");
108771
108489
  const reduce_body_1 = __webpack_require__(/*! ./reduce_body */ "./node_modules/@abaplint/transpiler/build/src/expressions/reduce_body.js");
108772
108490
  const transpile_types_1 = __webpack_require__(/*! ../transpile_types */ "./node_modules/@abaplint/transpiler/build/src/transpile_types.js");
108491
+ const let_1 = __webpack_require__(/*! ./let */ "./node_modules/@abaplint/transpiler/build/src/expressions/let.js");
108773
108492
  const value_body_1 = __webpack_require__(/*! ./value_body */ "./node_modules/@abaplint/transpiler/build/src/expressions/value_body.js");
108774
108493
  class SourceTranspiler {
108775
108494
  addGet;
108776
- constructor(addGet = false) {
108495
+ int8;
108496
+ /** int8: the calculation type is int8, each operation gets its left operand as an int8 */
108497
+ constructor(addGet = false, int8 = false) {
108777
108498
  this.addGet = addGet;
108499
+ this.int8 = int8;
108778
108500
  }
108779
108501
  // the operands of a chain of & / && (the rearranger leaves them as a binary
108780
108502
  // tree of Source nodes); an empty list when the node is not such a chain
@@ -108842,6 +108564,8 @@ class SourceTranspiler {
108842
108564
  break;
108843
108565
  }
108844
108566
  }
108567
+ // int8: whether the operand left of the next operator is already an int8
108568
+ let leftIsInt8 = false;
108845
108569
  for (let i = startIdx; i < children.length; i++) {
108846
108570
  const c = children[i];
108847
108571
  const isLast = i === children.length - 1;
@@ -108859,7 +108583,18 @@ class SourceTranspiler {
108859
108583
  ret.appendChunk(traversal.traverse(c));
108860
108584
  }
108861
108585
  else if (c.get() instanceof core_1.Expressions.ArithOperator) {
108862
- ret = new chunk_1.Chunk().appendChunk(traversal.traverse(c)).appendString("(").appendChunk(ret).appendString(",");
108586
+ // "/" rounds in calculation type int8, the runtime's divide() does not know the target
108587
+ const operator = this.int8 === true && c.concatTokens().trim() === "/"
108588
+ ? new chunk_1.Chunk().append("abap.operators.divideInt8", c, traversal)
108589
+ : traversal.traverse(c);
108590
+ if (this.int8 === true && leftIsInt8 === false) {
108591
+ ret = new chunk_1.Chunk().appendChunk(operator).appendString("(new abap.types.Integer8().set(").appendChunk(ret).appendString("),");
108592
+ }
108593
+ else {
108594
+ ret = new chunk_1.Chunk().appendChunk(operator).appendString("(").appendChunk(ret).appendString(",");
108595
+ }
108596
+ // the result of an operation with an int8 operand is an int8
108597
+ leftIsInt8 = true;
108863
108598
  post.appendString(")");
108864
108599
  if (this.addGet) {
108865
108600
  post.append(".get()", c, traversal);
@@ -108876,7 +108611,8 @@ class SourceTranspiler {
108876
108611
  }
108877
108612
  }
108878
108613
  else if (c.get() instanceof core_1.Expressions.Source) {
108879
- ret.appendChunk(new SourceTranspiler(this.addGet).transpile(c, traversal));
108614
+ ret.appendChunk(new SourceTranspiler(this.addGet, this.int8).transpile(c, traversal));
108615
+ leftIsInt8 = c.findDirectExpression(core_1.Expressions.ArithOperator) !== undefined;
108880
108616
  }
108881
108617
  else if (c.get() instanceof core_1.Expressions.Arrow) {
108882
108618
  ret = new chunk_1.Chunk().appendString("(").appendChunk(ret).appendString(").get().");
@@ -108912,13 +108648,19 @@ class SourceTranspiler {
108912
108648
  }
108913
108649
  ret = new chunk_1.Chunk().appendString(new _1.TypeNameOrInfer().transpile(typ, traversal).getCode());
108914
108650
  ret.appendString(".set(");
108915
- // todo: handle LET
108916
108651
  const context = new _1.TypeNameOrInfer().findType(typ, traversal);
108917
- ret.appendString(new SourceTranspiler().transpile(c.getFirstChild(), traversal, context).getCode());
108652
+ const convSource = c.findDirectExpression(core_1.Expressions.Source);
108653
+ ret.appendString(new SourceTranspiler().transpile(convSource, traversal, context).getCode());
108918
108654
  ret.appendString(")");
108919
108655
  if (this.addGet) {
108920
108656
  ret.appendString(".get()");
108921
108657
  }
108658
+ const convLet = c.findDirectExpression(core_1.Expressions.Let);
108659
+ if (convLet) {
108660
+ // the LET bindings are declared in a scope of their own, before the value is built
108661
+ const letCode = new let_1.LetTranspiler().transpile(convLet, traversal).getCode();
108662
+ ret = new chunk_1.Chunk().appendString(`(await (async () => { ${letCode} return ${ret.getCode()}; })())`);
108663
+ }
108922
108664
  }
108923
108665
  else if (c.get() instanceof core_1.Expressions.ValueBody) {
108924
108666
  continue;
@@ -111045,6 +110787,7 @@ class ValueBodyTranspiler {
111045
110787
  const outerLetCode = outerLet === undefined
111046
110788
  ? undefined
111047
110789
  : new let_1.LetTranspiler().transpile(outerLet, traversal).getCode();
110790
+ let hasFor = false;
111048
110791
  const children = body.getChildren();
111049
110792
  for (let i = 0; i < children.length; i++) {
111050
110793
  const child = children[i];
@@ -111087,6 +110830,7 @@ class ValueBodyTranspiler {
111087
110830
  }
111088
110831
  }
111089
110832
  i = idx - 1;
110833
+ hasFor = true;
111090
110834
  const result = this.buildForChain(forNodes, typ, traversal, body, baseCode, outerLetCode);
111091
110835
  ret = result.chunk;
111092
110836
  post = result.post;
@@ -111114,14 +110858,18 @@ class ValueBodyTranspiler {
111114
110858
  throw new Error("ValueBodyTranspiler, unknown " + child.get().constructor.name + " \"" + child.concatTokens()) + "\"";
111115
110859
  }
111116
110860
  }
111117
- return ret.appendString(post);
110861
+ ret.appendString(post);
110862
+ if (outerLetCode !== undefined && hasFor === false) {
110863
+ // without FOR the LET bindings are declared here, in a scope of their own, before the value is built
110864
+ ret = new chunk_1.Chunk().appendString(`(await (async () => { ${outerLetCode} return ${ret.getCode()}; })())`);
110865
+ }
110866
+ return ret;
111118
110867
  }
111119
110868
  buildForChain(forNodes, typ, traversal, body, baseCode, outerLetCode) {
111120
110869
  const val = baseCode ?? new type_name_or_infer_1.TypeNameOrInfer().transpile(typ, traversal).getCode();
111121
110870
  const chunk = new chunk_1.Chunk();
111122
110871
  const preLoopDecls = outerLetCode === undefined ? [] : [outerLetCode];
111123
110872
  const descriptors = [];
111124
- const levelIndents = [];
111125
110873
  let uniqueCounter = 1;
111126
110874
  for (const child of forNodes) {
111127
110875
  const loop = child.findDirectExpression(core_1.Expressions.InlineLoopDefinition);
@@ -111237,11 +110985,11 @@ class ValueBodyTranspiler {
111237
110985
  letCode = new let_1.LetTranspiler().transpile(llet, traversal).getCode();
111238
110986
  }
111239
110987
  const condCode = traversal.traverse(cond).getCode();
111240
- const preCheck = hasWhile ? `if (!(${condCode})) {\n break;\n}` : "";
110988
+ const preCheck = hasWhile ? `if (!(${condCode})) {\nbreak;\n}` : "";
111241
110989
  const postLoop = [];
111242
110990
  postLoop.push(incrementLine);
111243
110991
  if (hasUntil) {
111244
- postLoop.push(`if (${condCode}) {\n break;\n}`);
110992
+ postLoop.push(`if (${condCode}) {\nbreak;\n}`);
111245
110993
  }
111246
110994
  descriptors.push({
111247
110995
  beforeLoop: [declare, `${counterName}.set(${start});`],
@@ -111256,34 +111004,31 @@ class ValueBodyTranspiler {
111256
111004
  throw new Error("ValueBodyTranspiler FOR internal error");
111257
111005
  }
111258
111006
  chunk.appendString("await (async () => {\n");
111259
- this.appendBlocks(chunk, preLoopDecls, "");
111007
+ this.appendBlocks(chunk, preLoopDecls);
111260
111008
  chunk.appendString(`const VAL = ${val};\n`);
111261
- let indent = "";
111009
+ // no manual indentation, Chunk.runIndentationLogic indents by brace depth,
111010
+ // pre-indented closing braces would not be recognized and drift the indentation
111262
111011
  for (const desc of descriptors) {
111263
- this.appendBlocks(chunk, desc.beforeLoop, indent);
111264
- chunk.appendString(indent + desc.open + "\n");
111265
- indent += " ";
111266
- levelIndents.push(indent);
111267
- this.appendBlocks(chunk, desc.preBody, indent);
111012
+ this.appendBlocks(chunk, desc.beforeLoop);
111013
+ chunk.appendString(desc.open + "\n");
111014
+ this.appendBlocks(chunk, desc.preBody);
111268
111015
  }
111269
- chunk.appendString(indent + "VAL");
111016
+ chunk.appendString("VAL");
111270
111017
  let post = ";\n";
111271
111018
  for (let i = descriptors.length - 1; i >= 0; i--) {
111272
111019
  const desc = descriptors[i];
111273
- const currentIndent = levelIndents[i] ?? "";
111274
- post += this.blocksToString(desc.postBody, currentIndent);
111275
- const parentIndent = currentIndent.substring(0, Math.max(0, currentIndent.length - 2));
111276
- post += parentIndent + desc.close + "\n";
111020
+ post += this.blocksToString(desc.postBody);
111021
+ post += desc.close + "\n";
111277
111022
  }
111278
111023
  post += "return VAL;\n})()";
111279
111024
  return { chunk, post };
111280
111025
  }
111281
- appendBlocks(chunk, blocks, indent) {
111026
+ appendBlocks(chunk, blocks) {
111282
111027
  for (const block of blocks) {
111283
- this.appendBlock(chunk, block, indent);
111028
+ this.appendBlock(chunk, block);
111284
111029
  }
111285
111030
  }
111286
- appendBlock(chunk, block, indent) {
111031
+ appendBlock(chunk, block) {
111287
111032
  if (block === "") {
111288
111033
  return;
111289
111034
  }
@@ -111293,10 +111038,10 @@ class ValueBodyTranspiler {
111293
111038
  if (clean.trim() === "") {
111294
111039
  continue;
111295
111040
  }
111296
- chunk.appendString(indent + clean + "\n");
111041
+ chunk.appendString(clean + "\n");
111297
111042
  }
111298
111043
  }
111299
- blocksToString(blocks, indent) {
111044
+ blocksToString(blocks) {
111300
111045
  let ret = "";
111301
111046
  for (const block of blocks) {
111302
111047
  if (block === "") {
@@ -111308,7 +111053,7 @@ class ValueBodyTranspiler {
111308
111053
  if (clean.trim() === "") {
111309
111054
  continue;
111310
111055
  }
111311
- ret += indent + clean + "\n";
111056
+ ret += clean + "\n";
111312
111057
  }
111313
111058
  }
111314
111059
  return ret;
@@ -113518,15 +113263,16 @@ class AssignTranspiler {
113518
113263
  if (node?.findFirstExpression(abaplint.Expressions.TableExpression) === undefined) {
113519
113264
  return code;
113520
113265
  }
113266
+ // not indented, Chunk.runIndentationLogic indents by brace depth
113521
113267
  return `(await (async () => {
113522
- try {
113523
- return ${code};
113524
- } catch (error) {
113525
- if (abap.isLineNotFound(error)) {
113526
- return undefined;
113527
- }
113528
- throw error;
113529
- }
113268
+ try {
113269
+ return ${code};
113270
+ } catch (error) {
113271
+ if (abap.isLineNotFound(error)) {
113272
+ return undefined;
113273
+ }
113274
+ throw error;
113275
+ }
113530
113276
  })())`;
113531
113277
  }
113532
113278
  transpile(node, traversal) {
@@ -114010,7 +113756,7 @@ class CallTranspiler {
114010
113756
  post += `\nabap.builtin.sy.get().subrc.set(0);
114011
113757
  } catch (e) {
114012
113758
  if (e.classic) {
114013
- switch (e.classic.toUpperCase()) {\n`;
113759
+ switch (e.classic.toUpperCase()) {\n`;
114014
113760
  for (const e of node.findAllExpressions(abaplint.Expressions.ParameterException)) {
114015
113761
  const name = e.getFirstToken().getStr().toUpperCase();
114016
113762
  // todo, also handle SimpleChain,
@@ -114029,9 +113775,9 @@ if (e.classic) {
114029
113775
  post += `case "${name}": abap.builtin.sy.get().subrc.set(${value}); break;\n`;
114030
113776
  }
114031
113777
  }
114032
- post += ` }
113778
+ post += `}
114033
113779
  } else {
114034
- throw e;
113780
+ throw e;
114035
113781
  }
114036
113782
  }`;
114037
113783
  return { pre, post };
@@ -114116,12 +113862,13 @@ class CallFunctionTranspiler {
114116
113862
  }
114117
113863
  const calling = node.findExpressionAfterToken("CALLING");
114118
113864
  const dest = node.findDirectExpression(abaplint.Expressions.Destination)?.findDirectExpression(abaplint.Expressions.Source);
114119
- if (dest) {
113865
+ const updateTask = node.findDirectTokenByText("UPDATE") !== undefined;
113866
+ if (dest && updateTask === false) {
114120
113867
  const s = new expressions_1.SourceTranspiler(true).transpile(dest, traversal);
114121
113868
  param = param.replace("{", ",").replace(/}$/, "");
114122
113869
  ret.appendString(`await abap.statements.callFunction({name:${fmname},destination:${s.getCode()}${param}});`);
114123
113870
  }
114124
- else if (calling) {
113871
+ else if (calling && updateTask === false) {
114125
113872
  param = param.replace("{", ",").replace(/}$/, "");
114126
113873
  // typically used in combination with STARTING NEW TASK so dont await,
114127
113874
  ret.appendString(`abap.statements.callFunction({name:${fmname},calling:this.${calling.concatTokens().toLowerCase()}${param}});`);
@@ -114131,7 +113878,13 @@ class CallFunctionTranspiler {
114131
113878
  const call = `abap.FunctionModules[${fmname}]`;
114132
113879
  // eslint-disable-next-line max-len
114133
113880
  ret.appendString(`if (${call} === undefined) { if (${illegalFunc} === undefined) { throw "CX_SY_DYN_CALL_ILLEGAL_FUNC not found"; } else { throw await new ${illegalFunc}().constructor_({function: new abap.types.String().set(${fmname})});} }\n`);
114134
- ret.appendString(`await ${call}(${param});`);
113881
+ if (updateTask) {
113882
+ param = param.replace("{", ",").replace(/}$/, "");
113883
+ ret.appendString(`await abap.statements.callFunction({name:${fmname},updateTask:true${param}});`);
113884
+ }
113885
+ else {
113886
+ ret.appendString(`await ${call}(${param});`);
113887
+ }
114135
113888
  }
114136
113889
  if (exceptions) {
114137
113890
  const build = call_1.CallTranspiler.buildExceptions(exceptions);
@@ -115422,7 +115175,7 @@ class CreateDataTranspiler {
115422
115175
  }
115423
115176
  const handle = node.findExpressionAfterToken("HANDLE");
115424
115177
  if (handle) {
115425
- const so = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Source));
115178
+ const so = traversal.traverse(handle);
115426
115179
  const lookup = traversal.lookupClassOrInterface("KERNEL_CREATE_DATA_HANDLE", node.getFirstToken());
115427
115180
  const call = `await ${lookup}.call({handle: ${so.getCode()}, dref: ${target.getCode()}});`;
115428
115181
  return new chunk_1.Chunk().append(`if (${lookup} === undefined) throw new Error("CreateData, kernel class missing");\n${call}`, node, traversal);
@@ -117300,12 +117053,82 @@ exports.FunctionPoolTranspiler = FunctionPoolTranspiler;
117300
117053
 
117301
117054
  "use strict";
117302
117055
 
117056
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
117057
+ if (k2 === undefined) k2 = k;
117058
+ var desc = Object.getOwnPropertyDescriptor(m, k);
117059
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
117060
+ desc = { enumerable: true, get: function() { return m[k]; } };
117061
+ }
117062
+ Object.defineProperty(o, k2, desc);
117063
+ }) : (function(o, m, k, k2) {
117064
+ if (k2 === undefined) k2 = k;
117065
+ o[k2] = m[k];
117066
+ }));
117067
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
117068
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
117069
+ }) : function(o, v) {
117070
+ o["default"] = v;
117071
+ });
117072
+ var __importStar = (this && this.__importStar) || (function () {
117073
+ var ownKeys = function(o) {
117074
+ ownKeys = Object.getOwnPropertyNames || function (o) {
117075
+ var ar = [];
117076
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
117077
+ return ar;
117078
+ };
117079
+ return ownKeys(o);
117080
+ };
117081
+ return function (mod) {
117082
+ if (mod && mod.__esModule) return mod;
117083
+ var result = {};
117084
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
117085
+ __setModuleDefault(result, mod);
117086
+ return result;
117087
+ };
117088
+ })();
117303
117089
  Object.defineProperty(exports, "__esModule", ({ value: true }));
117304
117090
  exports.GenerateSubroutineTranspiler = void 0;
117091
+ const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
117305
117092
  const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
117093
+ // GENERATE SUBROUTINE POOL cannot be supported, there is no compiler at runtime.
117094
+ // The statement is refused without an exception: sy-subrc = 8 (documented as "other
117095
+ // generation error"), NAME initial, MESSAGE filled, LINE 0 and WORD initial. This is
117096
+ // a refusal of its own, not what a system answers; the other additions are left untouched.
117306
117097
  class GenerateSubroutineTranspiler {
117307
- transpile(_node, _traversal) {
117308
- return new chunk_1.Chunk(`throw new Error("GenerateSubroutine, not supported, transpiler");`);
117098
+ transpile(node, traversal) {
117099
+ const ret = new chunk_1.Chunk();
117100
+ const name = this.findAddition(node, "NAME");
117101
+ if (name) {
117102
+ ret.appendString(traversal.traverse(name).getCode() + ".clear();\n");
117103
+ }
117104
+ const message = this.findAddition(node, "MESSAGE");
117105
+ if (message) {
117106
+ ret.appendString(traversal.traverse(message).getCode() + `.set("GENERATE SUBROUTINE POOL is not supported");\n`);
117107
+ }
117108
+ const line = this.findAddition(node, "LINE");
117109
+ if (line) {
117110
+ ret.appendString(traversal.traverse(line).getCode() + ".set(0);\n");
117111
+ }
117112
+ const word = this.findAddition(node, "WORD");
117113
+ if (word) {
117114
+ ret.appendString(traversal.traverse(word).getCode() + ".clear();\n");
117115
+ }
117116
+ ret.append("abap.builtin.sy.get().subrc.set(8);", node, traversal);
117117
+ return ret;
117118
+ }
117119
+ /** the expression directly after the addition keyword, MESSAGE does not match MESSAGE-ID */
117120
+ findAddition(node, keyword) {
117121
+ const children = node.getChildren();
117122
+ for (let i = 0; i < children.length - 1; i++) {
117123
+ const child = children[i];
117124
+ const next = children[i + 1];
117125
+ if (child instanceof abaplint.Nodes.TokenNode
117126
+ && child.getFirstToken().getStr().toUpperCase() === keyword
117127
+ && next instanceof abaplint.Nodes.ExpressionNode) {
117128
+ return next;
117129
+ }
117130
+ }
117131
+ return undefined;
117309
117132
  }
117310
117133
  }
117311
117134
  exports.GenerateSubroutineTranspiler = GenerateSubroutineTranspiler;
@@ -119339,6 +119162,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
119339
119162
  exports.MoveTranspiler = void 0;
119340
119163
  const abaplint = __importStar(__webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js"));
119341
119164
  const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
119165
+ const source_1 = __webpack_require__(/*! ../expressions/source */ "./node_modules/@abaplint/transpiler/build/src/expressions/source.js");
119342
119166
  class MoveTranspiler {
119343
119167
  transpile(node, traversal) {
119344
119168
  const sourceExpression = node.findDirectExpression(abaplint.Expressions.Source);
@@ -119358,7 +119182,9 @@ class MoveTranspiler {
119358
119182
  ret.appendString(target + `.set(abap.alphaIn(${tSource.getCode()}, ${target}, ${target}));`);
119359
119183
  return ret;
119360
119184
  }
119361
- let source = traversal.traverse(sourceExpression);
119185
+ let source = this.isInt8Calculation(node, sourceExpression, targetExpressions.length, traversal)
119186
+ ? new source_1.SourceTranspiler(false, true).transpile(sourceExpression, traversal)
119187
+ : traversal.traverse(sourceExpression);
119362
119188
  const second = node.getChildren()[1]?.concatTokens();
119363
119189
  switch (second) {
119364
119190
  case "?=":
@@ -119420,6 +119246,72 @@ class MoveTranspiler {
119420
119246
  }
119421
119247
  return ret;
119422
119248
  }
119249
+ // The calculation type of an arithmetic expression comes from its operands and the target
119250
+ // field, the type with the largest range wins. With operands of type i or int8 it is int8
119251
+ // when the target or an operand is int8: i * i into int8 is exact up to 2^62, and "/"
119252
+ // rounds. The runtime decides by the operands alone and does not know the target, so here
119253
+ // the operands are converted to int8 before the calculation. Only for an i or int8 target
119254
+ // and operands whose type is known to be i or int8, and not for **, which counts as f
119255
+ isInt8Calculation(node, source, targets, traversal) {
119256
+ if (source === undefined
119257
+ || targets !== 1
119258
+ || source.findFirstExpression(abaplint.Expressions.ArithOperator) === undefined) {
119259
+ return false;
119260
+ }
119261
+ const scope = traversal.findCurrentScopeByToken(node.getFirstToken());
119262
+ const target = traversal.determineType(node, scope);
119263
+ const found = { int8: target instanceof abaplint.BasicTypes.Integer8Type };
119264
+ if (found.int8 === false && !(target instanceof abaplint.BasicTypes.IntegerType)) {
119265
+ return false;
119266
+ }
119267
+ return this.integerOperands(source, scope, found) && found.int8;
119268
+ }
119269
+ integerOperands(node, scope, found) {
119270
+ for (const c of node.getChildren()) {
119271
+ if (c instanceof abaplint.Nodes.TokenNode) {
119272
+ if (["(", ")", "-", "+"].includes(c.getFirstToken().getStr()) === false) {
119273
+ return false;
119274
+ }
119275
+ }
119276
+ else if (c.get() instanceof abaplint.Expressions.Source) {
119277
+ if (this.integerOperands(c, scope, found) === false) {
119278
+ return false;
119279
+ }
119280
+ }
119281
+ else if (c.get() instanceof abaplint.Expressions.ArithOperator) {
119282
+ if (["+", "-", "*", "/", "DIV", "MOD"].includes(c.concatTokens().toUpperCase()) === false) {
119283
+ return false;
119284
+ }
119285
+ }
119286
+ else if (c.get() instanceof abaplint.Expressions.Constant) {
119287
+ const integer = c.findDirectExpression(abaplint.Expressions.Integer);
119288
+ if (integer === undefined) {
119289
+ return false;
119290
+ }
119291
+ else if (Math.abs(parseInt(integer.concatTokens().replace(/ /g, ""), 10)) > 2147483647) {
119292
+ // the transpiler makes an int8 of a literal outside the range of i
119293
+ found.int8 = true;
119294
+ }
119295
+ }
119296
+ else if (c.get() instanceof abaplint.Expressions.FieldChain) {
119297
+ const children = c.getChildren();
119298
+ if (children.length !== 1) {
119299
+ return false;
119300
+ }
119301
+ const type = scope?.findVariable(children[0].concatTokens())?.getType();
119302
+ if (!(type instanceof abaplint.BasicTypes.IntegerType) && !(type instanceof abaplint.BasicTypes.Integer8Type)) {
119303
+ return false;
119304
+ }
119305
+ if (type instanceof abaplint.BasicTypes.Integer8Type) {
119306
+ found.int8 = true;
119307
+ }
119308
+ }
119309
+ else {
119310
+ return false;
119311
+ }
119312
+ }
119313
+ return true;
119314
+ }
119423
119315
  }
119424
119316
  exports.MoveTranspiler = MoveTranspiler;
119425
119317
  //# sourceMappingURL=move.js.map
@@ -119910,16 +119802,18 @@ class PerformTranspiler {
119910
119802
  return new chunk_1.Chunk(`throw new Error("PerformTranspiler FormName not found");`);
119911
119803
  }
119912
119804
  else if (node.concatTokens().toUpperCase().includes(" IN PROGRAM ")) {
119913
- // todo: throw exception if not found?
119914
119805
  const expression = node.findExpressionAfterToken("PROGRAM");
119915
119806
  let ref = "";
119807
+ let program = "";
119916
119808
  if (expression?.get() instanceof abaplint.Expressions.Dynamic) {
119917
119809
  const name = expression.getChildren()[1].concatTokens() + ".get().trimEnd()";
119918
119810
  ref = `abap.Forms['PROG-' + ${name} + '-${formName.concatTokens().toUpperCase()}']`;
119811
+ program = `'PROG-' + ${name} + '-'`;
119919
119812
  }
119920
119813
  else {
119921
119814
  const progName = expression?.concatTokens().toUpperCase();
119922
119815
  ref = `abap.Forms['PROG-${progName}-${formName.concatTokens().toUpperCase()}']`;
119816
+ program = `'PROG-${progName}-'`;
119923
119817
  }
119924
119818
  const params = [];
119925
119819
  // hacky hack
@@ -119931,6 +119825,16 @@ class PerformTranspiler {
119931
119825
  if (node.concatTokens().toUpperCase().includes(" IF FOUND")) {
119932
119826
  call = `if (${ref} !== undefined) { ${call} }`;
119933
119827
  }
119828
+ else {
119829
+ // the form is missing from a program whose forms are registered: CX_SY_DYN_CALL_ILLEGAL_FORM,
119830
+ // no form of the program is registered: CX_SY_PROGRAM_NOT_FOUND
119831
+ const raise = (name) => {
119832
+ const cls = traversal.lookupClassOrInterface(`'${name}'`, node.getFirstToken(), true);
119833
+ return `if (${cls} === undefined) { throw "${name} not found"; } else { throw await new ${cls}().constructor_(); }`;
119834
+ };
119835
+ const loaded = `Object.keys(abap.Forms).some(k => k.startsWith(${program}))`;
119836
+ call = `if (${ref} === undefined) { if (${loaded}) { ${raise("CX_SY_DYN_CALL_ILLEGAL_FORM")} } else { ${raise("CX_SY_PROGRAM_NOT_FOUND")} } }\n` + call;
119837
+ }
119934
119838
  return new chunk_1.Chunk(call);
119935
119839
  }
119936
119840
  else {
@@ -121273,24 +121177,25 @@ class SelectTranspiler {
121273
121177
  // DB key alone is wrong for projections (INTO CORRESPONDING FIELDS
121274
121178
  // without the key fields crashed on the missing component names)
121275
121179
  const by = `Object.keys(${target}.getRowType().get())`;
121180
+ // generated code is not indented, Chunk.runIndentationLogic indents by brace depth
121276
121181
  const dedup = `if (!(${target} instanceof abap.types.HashedTable) && ${target}.getOptions()?.primaryKey?.type !== "SORTED") {
121277
- abap.statements.sort(${target}, {by: ${by}.map(k => { return {component: k}; })});
121278
- await abap.statements.deleteInternal(${target}, {adjacent: true, allFields: true});
121279
- }`;
121182
+ abap.statements.sort(${target}, {by: ${by}.map(k => { return {component: k}; })});
121183
+ await abap.statements.deleteInternal(${target}, {adjacent: true, allFields: true});
121184
+ }`;
121280
121185
  const at = where.startsWith("WHERE ") ? select.indexOf(where) : -1;
121281
121186
  // UP TO with ORDER BY keeps the first n rows in that order; the blocks
121282
121187
  // trim after the de-duplicating sort, so that pair stays row by row
121283
121188
  if (concat.startsWith("SELECT SINGLE ") || at < 0 || (upTo && orderBy)) {
121284
121189
  const code = `if (${faeTranspiled}.array().length === 0) {
121285
- await abap.statements.select(${target}, {select: "${selectEmpty.trim()}"${extra}});
121190
+ await abap.statements.select(${target}, {select: "${selectEmpty.trim()}"${extra}});
121286
121191
  } else {
121287
- const ${unique2} = ${faeTranspiled}.array();
121288
- ${target}.clear();
121289
- for await (const ${unique} of ${unique2}) {
121290
- await abap.statements.select(${target}, {select: "${select.trim()}"${extra}}, {appending: true});
121291
- }
121292
- ${dedup}
121293
- abap.builtin.sy.get().dbcnt.set(${target}.getArrayLength());
121192
+ const ${unique2} = ${faeTranspiled}.array();
121193
+ ${target}.clear();
121194
+ for await (const ${unique} of ${unique2}) {
121195
+ await abap.statements.select(${target}, {select: "${select.trim()}"${extra}}, {appending: true});
121196
+ }
121197
+ ${dedup}
121198
+ abap.builtin.sy.get().dbcnt.set(${target}.getArrayLength());
121294
121199
  }`;
121295
121200
  return new chunk_1.Chunk().append(code, node, traversal);
121296
121201
  }
@@ -121318,29 +121223,29 @@ class SelectTranspiler {
121318
121223
  const unique3 = unique_identifier_1.UniqueIdentifier.get();
121319
121224
  const unique4 = unique_identifier_1.UniqueIdentifier.get();
121320
121225
  const code = `if (${faeTranspiled}.array().length === 0) {
121321
- await abap.statements.select(${target}, {select: "${selectEmpty.trim()}"${extra}});
121226
+ await abap.statements.select(${target}, {select: "${selectEmpty.trim()}"${extra}});
121322
121227
  } else {
121323
- const ${unique2} = ${faeTranspiled}.array();
121324
- ${target}.clear();
121325
- const ${unique3} = (${unique}) => "(${condition})";
121326
- for (let ${unique4} = 0; ${unique4} < ${unique2}.length; ${unique4} += 50) {
121327
- const ${unique4}where = ${unique2}.slice(${unique4}, ${unique4} + 50).map(${unique3}).join(" OR ");
121328
- await abap.statements.select(${target}, {select: "${head}WHERE " + ${unique4}where + " ${tail.trim()}"${extra}}, {appending: true});
121329
- }
121330
- ${dedup}
121331
- const ${unique4}max = ${upToCode};
121332
- if (${unique4}max > 0 && ${target}.getArrayLength() > ${unique4}max) {
121333
- if (${target} instanceof abap.types.HashedTable) {
121334
- for (const ${unique4}row of ${target}.array().slice(${unique4}max)) {
121335
- await abap.statements.deleteInternal(${target}, {fromValue: ${unique4}row});
121336
- }
121337
- } else {
121338
- while (${target}.getArrayLength() > ${unique4}max) {
121339
- ${target}.deleteIndex(${target}.getArrayLength() - 1);
121340
- }
121341
- }
121342
- }
121343
- abap.builtin.sy.get().dbcnt.set(${target}.getArrayLength());
121228
+ const ${unique2} = ${faeTranspiled}.array();
121229
+ ${target}.clear();
121230
+ const ${unique3} = (${unique}) => "(${condition})";
121231
+ for (let ${unique4} = 0; ${unique4} < ${unique2}.length; ${unique4} += 50) {
121232
+ const ${unique4}where = ${unique2}.slice(${unique4}, ${unique4} + 50).map(${unique3}).join(" OR ");
121233
+ await abap.statements.select(${target}, {select: "${head}WHERE " + ${unique4}where + " ${tail.trim()}"${extra}}, {appending: true});
121234
+ }
121235
+ ${dedup}
121236
+ const ${unique4}max = ${upToCode};
121237
+ if (${unique4}max > 0 && ${target}.getArrayLength() > ${unique4}max) {
121238
+ if (${target} instanceof abap.types.HashedTable) {
121239
+ for (const ${unique4}row of ${target}.array().slice(${unique4}max)) {
121240
+ await abap.statements.deleteInternal(${target}, {fromValue: ${unique4}row});
121241
+ }
121242
+ } else {
121243
+ while (${target}.getArrayLength() > ${unique4}max) {
121244
+ ${target}.deleteIndex(${target}.getArrayLength() - 1);
121245
+ }
121246
+ }
121247
+ }
121248
+ abap.builtin.sy.get().dbcnt.set(${target}.getArrayLength());
121344
121249
  }`;
121345
121250
  return new chunk_1.Chunk().append(code, node, traversal);
121346
121251
  }
@@ -122118,7 +122023,8 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/
122118
122023
  class SortTranspiler {
122119
122024
  transpile(node, traversal) {
122120
122025
  const concat = node.concatTokens().toUpperCase();
122121
- const components = node.findDirectExpressions(abaplint.Expressions.ComponentChain);
122026
+ const components = node.getChildren().filter(c => c instanceof abaplint.Nodes.ExpressionNode
122027
+ && (c.get() instanceof abaplint.Expressions.ComponentChain || this.isDynamicName(c, traversal)));
122122
122028
  const options = [];
122123
122029
  if (concat.includes(" BY ") === false) {
122124
122030
  const descending = node.findDirectTokenByText("DESCENDING") !== undefined;
@@ -122130,12 +122036,14 @@ class SortTranspiler {
122130
122036
  const by = [];
122131
122037
  for (const c of components) {
122132
122038
  const next = this.findNextText(c, node);
122133
- const concat = expressions_1.ComponentChainTranspiler.concat(c, traversal);
122039
+ const component = c.get() instanceof abaplint.Expressions.Dynamic
122040
+ ? this.dynamicName(c, traversal)
122041
+ : `"${expressions_1.ComponentChainTranspiler.concat(c, traversal)}"`;
122134
122042
  if (next === "DESCENDING") {
122135
- by.push(`{component: "${concat}", descending: true}`);
122043
+ by.push(`{component: ${component}, descending: true}`);
122136
122044
  }
122137
122045
  else {
122138
- by.push(`{component: "${concat}"}`);
122046
+ by.push(`{component: ${component}}`);
122139
122047
  }
122140
122048
  }
122141
122049
  options.push(`by: [${by.join(",")}]`);
@@ -122143,6 +122051,32 @@ class SortTranspiler {
122143
122051
  const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Target)).getCode();
122144
122052
  return new chunk_1.Chunk().append("abap.statements.sort(" + target + ",{" + options.join(",") + "});", node, traversal);
122145
122053
  }
122054
+ // "BY (name)" with the component name in a literal or a character-like field; a sort order table
122055
+ // (abap_sortorder_tab) is not handled here
122056
+ isDynamicName(c, traversal) {
122057
+ if (!(c.get() instanceof abaplint.Expressions.Dynamic)) {
122058
+ return false;
122059
+ }
122060
+ if (c.findFirstExpression(abaplint.Expressions.ConstantString)) {
122061
+ return true;
122062
+ }
122063
+ const field = c.findFirstExpression(abaplint.Expressions.FieldChain);
122064
+ if (field === undefined) {
122065
+ return false;
122066
+ }
122067
+ const token = field.getFirstToken();
122068
+ const type = traversal.findCurrentScopeByToken(token)?.findVariable(token.getStr())?.getType();
122069
+ return !(type instanceof abaplint.BasicTypes.TableType);
122070
+ }
122071
+ dynamicName(c, traversal) {
122072
+ const constant = c.findFirstExpression(abaplint.Expressions.ConstantString);
122073
+ if (constant) {
122074
+ const str = constant.getFirstToken().getStr();
122075
+ return JSON.stringify(str.substring(1, str.length - 1).toLowerCase().trimEnd());
122076
+ }
122077
+ const field = c.findFirstExpression(abaplint.Expressions.FieldChain);
122078
+ return new expressions_1.FieldChainTranspiler(true).transpile(field, traversal).getCode() + ".toLowerCase().trimEnd()";
122079
+ }
122146
122080
  findNextText(c, parent) {
122147
122081
  const children = parent.getChildren();
122148
122082
  for (let i = 0; i < children.length; i++) {
@@ -123788,17 +123722,18 @@ class ClassDefinitionTranspiler {
123788
123722
  }
123789
123723
  else {
123790
123724
  // its an abstract class with only abstract methods
123725
+ // not indented, Chunk.runIndentationLogic indents by brace depth
123791
123726
  return new chunk_1.Chunk(`
123792
123727
  class ${className?.toLowerCase()} {
123793
- static INTERNAL_TYPE = 'CLAS';
123794
- static IMPLEMENTED_INTERFACES = [];
123795
- static INTERNAL_NAME = 'ABSTRACT_CLASS_INTERNAL_NAME';
123796
- static ATTRIBUTES = {};
123797
- async constructor_() {
123798
- this.me = new abap.types.ABAPObject();
123799
- this.me.set(this);
123800
- return this;
123801
- }
123728
+ static INTERNAL_TYPE = 'CLAS';
123729
+ static IMPLEMENTED_INTERFACES = [];
123730
+ static INTERNAL_NAME = 'ABSTRACT_CLASS_INTERNAL_NAME';
123731
+ static ATTRIBUTES = {};
123732
+ async constructor_() {
123733
+ this.me = new abap.types.ABAPObject();
123734
+ this.me.set(this);
123735
+ return this;
123736
+ }
123802
123737
  }`);
123803
123738
  }
123804
123739
  }