@abaplint/core 2.120.17 → 2.120.19
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.
- package/build/abaplint.d.ts +1 -0
- package/build/src/abap/2_statements/expressions/message_source.js +1 -1
- package/build/src/abap/2_statements/expressions/source.js +1 -1
- package/build/src/abap/5_syntax/_type_utils.js +22 -11
- package/build/src/abap/5_syntax/expressions/message_source.js +3 -0
- package/build/src/abap/5_syntax/expressions/target.js +1 -1
- package/build/src/objects/_abap_object.js +10 -8
- package/build/src/objects/_dynpros.js +8 -5
- package/build/src/objects/authorization_check_field.js +3 -3
- package/build/src/objects/class.js +3 -4
- package/build/src/objects/data_element.js +6 -0
- package/build/src/objects/enhancement_implementation.js +4 -3
- package/build/src/objects/enhancement_spot.js +2 -2
- package/build/src/objects/function_group.js +20 -8
- package/build/src/objects/icf_service.js +4 -3
- package/build/src/objects/interface.js +3 -2
- package/build/src/objects/lock_object.js +4 -4
- package/build/src/objects/maintenance_and_transport_object.js +5 -5
- package/build/src/objects/message_class.js +5 -5
- package/build/src/objects/mime_object.js +5 -4
- package/build/src/objects/oauth2_profile.js +2 -2
- package/build/src/objects/program.js +3 -3
- package/build/src/objects/proxy_object.js +11 -12
- package/build/src/objects/table.js +12 -9
- package/build/src/objects/table_type.js +7 -4
- package/build/src/objects/view.js +9 -4
- package/build/src/objects/web_mime.js +7 -4
- package/build/src/registry.js +1 -1
- package/build/src/rules/clear_exporting_parameters.js +54 -0
- package/build/src/rules/remove_descriptions.js +10 -3
- package/build/src/rules/xml_consistency.js +40 -0
- package/build/src/xml_utils.js +7 -7
- package/package.json +1 -1
package/build/abaplint.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ class MessageSource extends combi_1.Expression {
|
|
|
8
8
|
getRunnable() {
|
|
9
9
|
const msgid = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeft), _1.MessageClass, (0, combi_1.tok)(tokens_1.ParenRightW));
|
|
10
10
|
const simple = (0, combi_1.seq)(_1.MessageTypeAndNumber, (0, combi_1.opt)(msgid));
|
|
11
|
-
const mess1 = (0, combi_1.seq)("ID", _1.
|
|
11
|
+
const mess1 = (0, combi_1.seq)("ID", _1.SimpleSource3, "TYPE", _1.SimpleSource3, "NUMBER", (0, combi_1.altPrio)(_1.MessageNumber, _1.SimpleSource3));
|
|
12
12
|
return (0, combi_1.altPrio)(simple, mess1);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -33,7 +33,7 @@ class Source extends combi_1.Expression {
|
|
|
33
33
|
const value = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("VALUE", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.ValueBody, rparenNoSpace, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
|
|
34
34
|
const cond = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("COND", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.CondBody, rparenNoSpace, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
|
|
35
35
|
const reff = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("REF", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), Source, (0, combi_1.optPrio)("OPTIONAL"), rparen), { also: combi_1.AlsoIn.OpenABAP });
|
|
36
|
-
const exact = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("EXACT", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), Source, rparen, (0, combi_1.optPrio)(after)));
|
|
36
|
+
const exact = (0, combi_1.ver)(version_1.Release.v740sp02, (0, combi_1.seq)("EXACT", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), Source, rparen, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
|
|
37
37
|
const filter = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("FILTER", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.FilterBody, rparen), { also: combi_1.AlsoIn.OpenABAP });
|
|
38
38
|
const reduce = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("REDUCE", _1.TypeNameOrInfer, (0, combi_1.tok)(tokens_1.ParenLeftW), _1.ReduceBody, rparen, (0, combi_1.optPrio)(after)), { also: combi_1.AlsoIn.OpenABAP });
|
|
39
39
|
const prefix1 = (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WDashW), (0, combi_1.tok)(tokens_1.WPlusW));
|
|
@@ -332,7 +332,7 @@ class TypeUtils {
|
|
|
332
332
|
return this.isAssignable(source, target);
|
|
333
333
|
}
|
|
334
334
|
isAssignableStrict(source, target, node) {
|
|
335
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
335
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
336
336
|
const calculated = node ? this.isCalculated(node) : false;
|
|
337
337
|
/*
|
|
338
338
|
console.dir(source);
|
|
@@ -343,6 +343,17 @@ class TypeUtils {
|
|
|
343
343
|
&& (target instanceof basic_1.XStringType || target instanceof basic_1.XSequenceType)) {
|
|
344
344
|
return false;
|
|
345
345
|
}
|
|
346
|
+
if (target instanceof basic_1.NumericType
|
|
347
|
+
&& (source instanceof basic_1.CharacterType || source instanceof basic_1.StringType)
|
|
348
|
+
&& ((_a = source.getAbstractTypeData()) === null || _a === void 0 ? void 0 : _a.derivedFromConstant) === true) {
|
|
349
|
+
const constant = node === null || node === void 0 ? void 0 : node.concatTokens();
|
|
350
|
+
if (constant !== undefined
|
|
351
|
+
&& ((constant.startsWith("'") && constant.endsWith("'"))
|
|
352
|
+
|| (constant.startsWith("`") && constant.endsWith("`")))
|
|
353
|
+
&& /^\d*$/.test(constant.substring(1, constant.length - 1)) === false) {
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
346
357
|
if (calculated) {
|
|
347
358
|
return this.isAssignable(source, target);
|
|
348
359
|
}
|
|
@@ -359,25 +370,25 @@ class TypeUtils {
|
|
|
359
370
|
}
|
|
360
371
|
if (source instanceof basic_1.CharacterType) {
|
|
361
372
|
if (target instanceof basic_1.CharacterType) {
|
|
362
|
-
if (((
|
|
373
|
+
if (((_b = source.getAbstractTypeData()) === null || _b === void 0 ? void 0 : _b.derivedFromConstant) === true) {
|
|
363
374
|
return source.getLength() <= target.getLength();
|
|
364
375
|
}
|
|
365
376
|
return source.getLength() === target.getLength();
|
|
366
377
|
}
|
|
367
378
|
else if (target instanceof basic_1.IntegerType) {
|
|
368
|
-
if (((
|
|
379
|
+
if (((_c = source.getAbstractTypeData()) === null || _c === void 0 ? void 0 : _c.derivedFromConstant) === true) {
|
|
369
380
|
return true;
|
|
370
381
|
}
|
|
371
382
|
return false;
|
|
372
383
|
}
|
|
373
384
|
else if (target instanceof basic_1.XStringType) {
|
|
374
|
-
if (((
|
|
385
|
+
if (((_d = source.getAbstractTypeData()) === null || _d === void 0 ? void 0 : _d.derivedFromConstant) === true) {
|
|
375
386
|
return (node === null || node === void 0 ? void 0 : node.concatTokens()) !== "''";
|
|
376
387
|
}
|
|
377
388
|
return false;
|
|
378
389
|
}
|
|
379
390
|
else if (target instanceof basic_1.StringType) {
|
|
380
|
-
if (((
|
|
391
|
+
if (((_e = source.getAbstractTypeData()) === null || _e === void 0 ? void 0 : _e.derivedFromConstant) === true) {
|
|
381
392
|
return true;
|
|
382
393
|
}
|
|
383
394
|
return false;
|
|
@@ -385,7 +396,7 @@ class TypeUtils {
|
|
|
385
396
|
}
|
|
386
397
|
else if (source instanceof basic_1.HexType) {
|
|
387
398
|
if (target instanceof basic_1.HexType) {
|
|
388
|
-
if (((
|
|
399
|
+
if (((_f = source.getAbstractTypeData()) === null || _f === void 0 ? void 0 : _f.derivedFromConstant) === true) {
|
|
389
400
|
return source.getLength() <= target.getLength();
|
|
390
401
|
}
|
|
391
402
|
return source.getLength() === target.getLength();
|
|
@@ -394,7 +405,7 @@ class TypeUtils {
|
|
|
394
405
|
return false;
|
|
395
406
|
}
|
|
396
407
|
else if (target instanceof basic_1.IntegerType || target instanceof basic_1.Integer8Type) {
|
|
397
|
-
if (((
|
|
408
|
+
if (((_g = source.getAbstractTypeData()) === null || _g === void 0 ? void 0 : _g.derivedFromConstant) === true) {
|
|
398
409
|
return true;
|
|
399
410
|
}
|
|
400
411
|
return false;
|
|
@@ -405,13 +416,13 @@ class TypeUtils {
|
|
|
405
416
|
return false;
|
|
406
417
|
}
|
|
407
418
|
else if (target instanceof basic_1.CharacterType) {
|
|
408
|
-
if (((
|
|
419
|
+
if (((_h = source.getAbstractTypeData()) === null || _h === void 0 ? void 0 : _h.derivedFromConstant) === true) {
|
|
409
420
|
return true;
|
|
410
421
|
}
|
|
411
422
|
return false;
|
|
412
423
|
}
|
|
413
424
|
else if (target instanceof basic_1.IntegerType) {
|
|
414
|
-
if (((
|
|
425
|
+
if (((_j = source.getAbstractTypeData()) === null || _j === void 0 ? void 0 : _j.derivedFromConstant) === true) {
|
|
415
426
|
return true;
|
|
416
427
|
}
|
|
417
428
|
return false;
|
|
@@ -421,7 +432,7 @@ class TypeUtils {
|
|
|
421
432
|
return false;
|
|
422
433
|
}
|
|
423
434
|
else if (target instanceof basic_1.XSequenceType || target instanceof basic_1.XStringType) {
|
|
424
|
-
if (((
|
|
435
|
+
if (((_k = source.getAbstractTypeData()) === null || _k === void 0 ? void 0 : _k.derivedFromConstant) === true) {
|
|
425
436
|
return true;
|
|
426
437
|
}
|
|
427
438
|
return false;
|
|
@@ -465,7 +476,7 @@ class TypeUtils {
|
|
|
465
476
|
return false;
|
|
466
477
|
}
|
|
467
478
|
else if (target instanceof basic_1.Integer8Type || target instanceof basic_1.PackedType) {
|
|
468
|
-
if (((
|
|
479
|
+
if (((_l = source.getAbstractTypeData()) === null || _l === void 0 ? void 0 : _l.derivedFromConstant) === true) {
|
|
469
480
|
return true;
|
|
470
481
|
}
|
|
471
482
|
return false;
|
|
@@ -42,6 +42,9 @@ class MessageSource {
|
|
|
42
42
|
for (const f of node.findDirectExpressions(Expressions.Source)) {
|
|
43
43
|
source_1.Source.runSyntax(f, input);
|
|
44
44
|
}
|
|
45
|
+
for (const f of node.findDirectExpressions(Expressions.SimpleSource3)) {
|
|
46
|
+
source_1.Source.runSyntax(f, input);
|
|
47
|
+
}
|
|
45
48
|
if (node.getFirstToken().getStr().toUpperCase() === "ID") {
|
|
46
49
|
const id = (_a = node.findExpressionAfterToken("ID")) === null || _a === void 0 ? void 0 : _a.concatTokens();
|
|
47
50
|
let number = (_b = node.findDirectExpression(Expressions.MessageNumber)) === null || _b === void 0 ? void 0 : _b.concatTokens();
|
|
@@ -122,7 +122,7 @@ class Target {
|
|
|
122
122
|
&& !(context instanceof basic_1.VoidType)
|
|
123
123
|
&& !(context instanceof unknown_type_1.UnknownType)
|
|
124
124
|
&& !(context instanceof unknown_type_1.UnknownType)) {
|
|
125
|
-
const message =
|
|
125
|
+
const message = `Not an internal table, "${node.concatTokens()}"`;
|
|
126
126
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
127
127
|
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
128
128
|
}
|
|
@@ -98,21 +98,22 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
98
98
|
return this.textsTranslations;
|
|
99
99
|
}
|
|
100
100
|
findTexts(parsed) {
|
|
101
|
-
var _a, _b, _c, _d, _e, _f;
|
|
102
|
-
var
|
|
101
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
102
|
+
var _j;
|
|
103
103
|
this.texts = {};
|
|
104
104
|
if (((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.TPOOL) === null || _d === void 0 ? void 0 : _d.item) === undefined) {
|
|
105
105
|
return;
|
|
106
106
|
}
|
|
107
|
-
for (const t of (0, xml_utils_1.xmlToArray)(parsed.abapGit["asx:abap"]["asx:values"].TPOOL.item)) {
|
|
108
|
-
const id = (
|
|
107
|
+
for (const t of (0, xml_utils_1.xmlToArray)((_h = (_g = (_f = (_e = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _e === void 0 ? void 0 : _e["asx:abap"]) === null || _f === void 0 ? void 0 : _f["asx:values"]) === null || _g === void 0 ? void 0 : _g.TPOOL) === null || _h === void 0 ? void 0 : _h.item)) {
|
|
108
|
+
const id = typeof (t === null || t === void 0 ? void 0 : t.ID) === "string" ? t.ID.toUpperCase() : undefined;
|
|
109
109
|
if (id === undefined) {
|
|
110
110
|
continue;
|
|
111
111
|
}
|
|
112
112
|
if (id !== "R" && t.KEY === undefined) {
|
|
113
113
|
continue;
|
|
114
114
|
}
|
|
115
|
-
const
|
|
115
|
+
const rawKey = (_j = t.KEY) !== null && _j !== void 0 ? _j : t.ID;
|
|
116
|
+
const key = typeof rawKey === "string" ? rawKey.toUpperCase() : undefined;
|
|
116
117
|
if (key === undefined) {
|
|
117
118
|
continue;
|
|
118
119
|
}
|
|
@@ -123,8 +124,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
126
|
findTextsTranslations(parsed) {
|
|
126
|
-
var _a, _b, _c, _d, _e
|
|
127
|
-
var
|
|
127
|
+
var _a, _b, _c, _d, _e;
|
|
128
|
+
var _f;
|
|
128
129
|
this.textsTranslations = [];
|
|
129
130
|
const values = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.I18N_TPOOL) === null || _d === void 0 ? void 0 : _d.item;
|
|
130
131
|
if (values === undefined) {
|
|
@@ -133,7 +134,8 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
|
|
|
133
134
|
for (const langItem of (0, xml_utils_1.xmlToArray)(values)) {
|
|
134
135
|
const textElements = {};
|
|
135
136
|
for (const item of (0, xml_utils_1.xmlToArray)((_e = langItem.TEXTPOOL) === null || _e === void 0 ? void 0 : _e.item)) {
|
|
136
|
-
const
|
|
137
|
+
const rawKey = (_f = item.KEY) !== null && _f !== void 0 ? _f : item.ID;
|
|
138
|
+
const key = typeof rawKey === "string" ? rawKey.toUpperCase() : undefined;
|
|
137
139
|
if (key !== undefined) {
|
|
138
140
|
textElements[key] = { entry: (0, xml_utils_1.unescape)(item.ENTRY), maxLength: parseInt(item.LENGTH, 10) };
|
|
139
141
|
}
|
|
@@ -9,11 +9,14 @@ function parseNumber(value) {
|
|
|
9
9
|
return parseInt(value, 10);
|
|
10
10
|
}
|
|
11
11
|
function parseDynpros(parsed) {
|
|
12
|
-
var _a, _b, _c, _d;
|
|
12
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
13
13
|
const dynpros = [];
|
|
14
14
|
const xmlDynpros = (_c = (_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DYNPROS;
|
|
15
15
|
if (xmlDynpros !== undefined) {
|
|
16
16
|
for (const d of (0, xml_utils_1.xmlToArray)(xmlDynpros.item)) {
|
|
17
|
+
if ((d === null || d === void 0 ? void 0 : d.HEADER) === undefined) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
17
20
|
const fields = [];
|
|
18
21
|
for (const f of (0, xml_utils_1.xmlToArray)((_d = d.FIELDS) === null || _d === void 0 ? void 0 : _d.RPY_DYFATC)) {
|
|
19
22
|
fields.push({
|
|
@@ -28,10 +31,10 @@ function parseDynpros(parsed) {
|
|
|
28
31
|
});
|
|
29
32
|
}
|
|
30
33
|
dynpros.push({
|
|
31
|
-
number: d.HEADER.SCREEN,
|
|
32
|
-
description: d.HEADER.DESCRIPT,
|
|
33
|
-
nextScreen: d.HEADER.NEXTSCREEN,
|
|
34
|
-
type: d.HEADER.TYPE,
|
|
34
|
+
number: (_e = d.HEADER) === null || _e === void 0 ? void 0 : _e.SCREEN,
|
|
35
|
+
description: (_f = d.HEADER) === null || _f === void 0 ? void 0 : _f.DESCRIPT,
|
|
36
|
+
nextScreen: (_g = d.HEADER) === null || _g === void 0 ? void 0 : _g.NEXTSCREEN,
|
|
37
|
+
type: (_h = d.HEADER) === null || _h === void 0 ? void 0 : _h.TYPE,
|
|
35
38
|
fields: fields,
|
|
36
39
|
});
|
|
37
40
|
}
|
|
@@ -51,7 +51,7 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
parse() {
|
|
54
|
-
var _a;
|
|
54
|
+
var _a, _b, _c, _d, _e, _f;
|
|
55
55
|
if (this.parsedXML) {
|
|
56
56
|
return { updated: false, runtime: 0 };
|
|
57
57
|
}
|
|
@@ -60,10 +60,10 @@ class AuthorizationCheckField extends _abstract_object_1.AbstractObject {
|
|
|
60
60
|
const parsed = super.parseRaw2();
|
|
61
61
|
if (parsed === undefined
|
|
62
62
|
|| parsed.abapGit === undefined
|
|
63
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
63
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
64
64
|
return { updated: false, runtime: 0 };
|
|
65
65
|
}
|
|
66
|
-
this.parsedXML.rollname = (
|
|
66
|
+
this.parsedXML.rollname = (_f = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.AUTHX) === null || _f === void 0 ? void 0 : _f.ROLLNAME;
|
|
67
67
|
const end = Date.now();
|
|
68
68
|
return { updated: true, runtime: end - start };
|
|
69
69
|
}
|
|
@@ -88,17 +88,16 @@ class Class extends _abap_object_1.ABAPObject {
|
|
|
88
88
|
}
|
|
89
89
|
/////////////////////////
|
|
90
90
|
parseXML() {
|
|
91
|
+
var _a, _b, _c, _d, _e;
|
|
91
92
|
if (this.parsedXML !== undefined) {
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
95
|
this.parsedXML = {};
|
|
95
96
|
const parsed = super.parseRaw2();
|
|
96
|
-
if (parsed === undefined
|
|
97
|
-
|| parsed.abapGit["asx:abap"] === undefined
|
|
98
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
97
|
+
if (((_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
99
98
|
return;
|
|
100
99
|
}
|
|
101
|
-
const vseo = parsed.abapGit["asx:abap"]["asx:values"].VSEOCLASS;
|
|
100
|
+
const vseo = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.VSEOCLASS;
|
|
102
101
|
if (vseo === undefined) {
|
|
103
102
|
return;
|
|
104
103
|
}
|
|
@@ -83,6 +83,11 @@ class DataElement extends _abstract_object_1.AbstractObject {
|
|
|
83
83
|
this.parse();
|
|
84
84
|
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.textsTranslations;
|
|
85
85
|
}
|
|
86
|
+
getDtelMaster() {
|
|
87
|
+
var _a;
|
|
88
|
+
this.parse();
|
|
89
|
+
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.dtelmaster;
|
|
90
|
+
}
|
|
86
91
|
parseType(reg) {
|
|
87
92
|
var _a;
|
|
88
93
|
const references = [];
|
|
@@ -160,6 +165,7 @@ class DataElement extends _abstract_object_1.AbstractObject {
|
|
|
160
165
|
datatype: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DATATYPE,
|
|
161
166
|
leng: dd04v === null || dd04v === void 0 ? void 0 : dd04v.LENG,
|
|
162
167
|
decimals: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DECIMALS,
|
|
168
|
+
dtelmaster: dd04v === null || dd04v === void 0 ? void 0 : dd04v.DTELMASTER,
|
|
163
169
|
texts: {
|
|
164
170
|
short: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_S,
|
|
165
171
|
medium: dd04v === null || dd04v === void 0 ? void 0 : dd04v.SCRTEXT_M,
|
|
@@ -27,6 +27,7 @@ class EnhancementImplementation extends _abstract_object_1.AbstractObject {
|
|
|
27
27
|
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.description;
|
|
28
28
|
}
|
|
29
29
|
parse() {
|
|
30
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
30
31
|
if (this.parsedXML) {
|
|
31
32
|
return { updated: false, runtime: 0 };
|
|
32
33
|
}
|
|
@@ -35,11 +36,11 @@ class EnhancementImplementation extends _abstract_object_1.AbstractObject {
|
|
|
35
36
|
const parsed = super.parseRaw2();
|
|
36
37
|
if (parsed === undefined
|
|
37
38
|
|| parsed.abapGit === undefined
|
|
38
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
39
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
39
40
|
return { updated: false, runtime: 0 };
|
|
40
41
|
}
|
|
41
|
-
this.parsedXML.className = parsed.abapGit["asx:abap"]["asx:values"].CLASS;
|
|
42
|
-
this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].SHORTTEXT;
|
|
42
|
+
this.parsedXML.className = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.CLASS;
|
|
43
|
+
this.parsedXML.description = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.SHORTTEXT;
|
|
43
44
|
const end = Date.now();
|
|
44
45
|
return { updated: true, runtime: end - start };
|
|
45
46
|
}
|
|
@@ -29,13 +29,13 @@ class EnhancementSpot extends _abstract_object_1.AbstractObject {
|
|
|
29
29
|
}
|
|
30
30
|
/////////////////
|
|
31
31
|
parseXML() {
|
|
32
|
-
var _a, _b;
|
|
32
|
+
var _a, _b, _c, _d;
|
|
33
33
|
const parsed = super.parseRaw2();
|
|
34
34
|
if (parsed === undefined) {
|
|
35
35
|
return [];
|
|
36
36
|
}
|
|
37
37
|
const ret = [];
|
|
38
|
-
for (const b of (0, xml_utils_1.xmlToArray)((_b = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null ||
|
|
38
|
+
for (const b of (0, xml_utils_1.xmlToArray)((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.BADI_DATA) === null || _d === void 0 ? void 0 : _d.ENH_BADI_DATA)) {
|
|
39
39
|
ret.push({
|
|
40
40
|
name: b.BADI_NAME,
|
|
41
41
|
interface: b.INTERFACE_NAME,
|
|
@@ -139,33 +139,45 @@ class FunctionGroup extends _abap_object_1.ABAPObject {
|
|
|
139
139
|
if (found === undefined) {
|
|
140
140
|
return {};
|
|
141
141
|
}
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
try {
|
|
143
|
+
const parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(found.getRaw());
|
|
144
|
+
this.findTexts(parsed);
|
|
145
|
+
}
|
|
146
|
+
catch (_b) {
|
|
147
|
+
this.texts = {};
|
|
148
|
+
}
|
|
144
149
|
}
|
|
145
150
|
return (_a = this.texts["I"]) !== null && _a !== void 0 ? _a : {};
|
|
146
151
|
}
|
|
147
152
|
/////////////////////////////////
|
|
148
153
|
parseXML() {
|
|
149
|
-
var _a, _b, _c;
|
|
154
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
150
155
|
this.includes = [];
|
|
151
156
|
this.modules = [];
|
|
152
157
|
const parsed = this.parseRaw2();
|
|
153
158
|
if (parsed === undefined) {
|
|
154
159
|
return;
|
|
155
160
|
}
|
|
156
|
-
this.description = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null ||
|
|
161
|
+
this.description = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.AREAT;
|
|
157
162
|
this.dynpros = (0, _dynpros_1.parseDynpros)(parsed);
|
|
158
163
|
// INCLUDES
|
|
159
|
-
const includes = (
|
|
164
|
+
const includes = (_f = (_e = (_d = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _d === void 0 ? void 0 : _d["asx:abap"]) === null || _e === void 0 ? void 0 : _e["asx:values"]) === null || _f === void 0 ? void 0 : _f.INCLUDES;
|
|
160
165
|
if (includes !== undefined) {
|
|
161
166
|
for (const i of (0, xml_utils_1.xmlToArray)(includes.SOBJ_NAME)) {
|
|
162
|
-
|
|
167
|
+
if (typeof i === "string") {
|
|
168
|
+
this.includes.push(i);
|
|
169
|
+
}
|
|
163
170
|
}
|
|
164
171
|
}
|
|
165
172
|
// FUNCTION MODULES
|
|
166
|
-
const functions = (
|
|
173
|
+
const functions = (_j = (_h = (_g = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]) === null || _h === void 0 ? void 0 : _h["asx:values"]) === null || _j === void 0 ? void 0 : _j.FUNCTIONS;
|
|
167
174
|
for (const module of (0, xml_utils_1.xmlToArray)(functions === null || functions === void 0 ? void 0 : functions.item)) {
|
|
168
|
-
|
|
175
|
+
try {
|
|
176
|
+
this.modules.push(new types_1.FunctionModuleDefinition(module));
|
|
177
|
+
}
|
|
178
|
+
catch (_k) {
|
|
179
|
+
// Ignore malformed function module metadata.
|
|
180
|
+
}
|
|
169
181
|
}
|
|
170
182
|
}
|
|
171
183
|
findTextFile() {
|
|
@@ -32,6 +32,7 @@ class ICFService extends _abstract_object_1.AbstractObject {
|
|
|
32
32
|
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.handlers;
|
|
33
33
|
}
|
|
34
34
|
parse() {
|
|
35
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
35
36
|
if (this.parsedXML) {
|
|
36
37
|
return { updated: false, runtime: 0 };
|
|
37
38
|
}
|
|
@@ -40,17 +41,17 @@ class ICFService extends _abstract_object_1.AbstractObject {
|
|
|
40
41
|
const parsed = super.parseRaw2();
|
|
41
42
|
if (parsed === undefined
|
|
42
43
|
|| parsed.abapGit === undefined
|
|
43
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
44
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
44
45
|
return { updated: false, runtime: 0 };
|
|
45
46
|
}
|
|
46
|
-
const table = parsed.abapGit["asx:abap"]["asx:values"].ICFHANDLER_TABLE;
|
|
47
|
+
const table = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.ICFHANDLER_TABLE;
|
|
47
48
|
this.parsedXML.handlers = [];
|
|
48
49
|
for (const h of (0, xml_utils_1.xmlToArray)(table)) {
|
|
49
50
|
if (h.ICFHANDLER !== undefined) {
|
|
50
51
|
this.parsedXML.handlers.push(h.ICFHANDLER.ICFHANDLER);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
this.parsedXML.url = parsed.abapGit["asx:abap"]["asx:values"].URL;
|
|
54
|
+
this.parsedXML.url = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.URL;
|
|
54
55
|
const end = Date.now();
|
|
55
56
|
return { updated: true, runtime: end - start };
|
|
56
57
|
}
|
|
@@ -55,16 +55,17 @@ class Interface extends _abap_object_1.ABAPObject {
|
|
|
55
55
|
}
|
|
56
56
|
/////////////////////////
|
|
57
57
|
parseXML() {
|
|
58
|
+
var _a, _b, _c, _d, _e;
|
|
58
59
|
if (this.parsedXML !== undefined) {
|
|
59
60
|
return;
|
|
60
61
|
}
|
|
61
62
|
this.parsedXML = {};
|
|
62
63
|
const parsed = super.parseRaw2();
|
|
63
64
|
if (parsed === undefined
|
|
64
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
65
|
+
|| ((_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
65
66
|
return;
|
|
66
67
|
}
|
|
67
|
-
const vseo = parsed.abapGit["asx:abap"]["asx:values"].VSEOINTERF;
|
|
68
|
+
const vseo = (_e = (_d = (_c = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.VSEOINTERF;
|
|
68
69
|
if (vseo === undefined) {
|
|
69
70
|
this.parsedXML.description = "";
|
|
70
71
|
this.parsedXML.name = "";
|
|
@@ -48,7 +48,7 @@ class LockObject extends _abstract_object_1.AbstractObject {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
parse() {
|
|
51
|
-
var _a, _b;
|
|
51
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
52
52
|
if (this.parsedXML) {
|
|
53
53
|
return { updated: false, runtime: 0 };
|
|
54
54
|
}
|
|
@@ -57,11 +57,11 @@ class LockObject extends _abstract_object_1.AbstractObject {
|
|
|
57
57
|
const parsed = super.parseRaw2();
|
|
58
58
|
if (parsed === undefined
|
|
59
59
|
|| parsed.abapGit === undefined
|
|
60
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
60
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
61
61
|
return { updated: false, runtime: 0 };
|
|
62
62
|
}
|
|
63
|
-
this.parsedXML.primaryTable = (
|
|
64
|
-
this.parsedXML.description = (
|
|
63
|
+
this.parsedXML.primaryTable = (_f = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.DD25V) === null || _f === void 0 ? void 0 : _f.ROOTTAB;
|
|
64
|
+
this.parsedXML.description = (_k = (_j = (_h = (_g = parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]) === null || _h === void 0 ? void 0 : _h["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD25V) === null || _k === void 0 ? void 0 : _k.DDTEXT;
|
|
65
65
|
const end = Date.now();
|
|
66
66
|
return { updated: true, runtime: end - start };
|
|
67
67
|
}
|
|
@@ -64,7 +64,7 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
parse() {
|
|
67
|
-
var _a, _b, _c, _d;
|
|
67
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
68
68
|
if (this.parsedXML) {
|
|
69
69
|
return { updated: false, runtime: 0 };
|
|
70
70
|
}
|
|
@@ -73,12 +73,12 @@ class MaintenanceAndTransportObject extends _abstract_object_1.AbstractObject {
|
|
|
73
73
|
const parsed = super.parseRaw2();
|
|
74
74
|
if (parsed === undefined
|
|
75
75
|
|| parsed.abapGit === undefined
|
|
76
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
76
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
77
77
|
return { updated: false, runtime: 0 };
|
|
78
78
|
}
|
|
79
|
-
this.parsedXML.area = (
|
|
80
|
-
this.parsedXML.objectName = (
|
|
81
|
-
this.parsedXML.objectType = (
|
|
79
|
+
this.parsedXML.area = (_g = (_f = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.TOBJ) === null || _f === void 0 ? void 0 : _f.TVDIR) === null || _g === void 0 ? void 0 : _g.AREA;
|
|
80
|
+
this.parsedXML.objectName = (_l = (_k = (_j = (_h = parsed.abapGit) === null || _h === void 0 ? void 0 : _h["asx:abap"]) === null || _j === void 0 ? void 0 : _j["asx:values"]) === null || _k === void 0 ? void 0 : _k.OBJH) === null || _l === void 0 ? void 0 : _l.OBJECTNAME;
|
|
81
|
+
this.parsedXML.objectType = (_q = (_p = (_o = (_m = parsed.abapGit) === null || _m === void 0 ? void 0 : _m["asx:abap"]) === null || _o === void 0 ? void 0 : _o["asx:values"]) === null || _p === void 0 ? void 0 : _p.OBJH) === null || _q === void 0 ? void 0 : _q.OBJECTTYPE;
|
|
82
82
|
const end = Date.now();
|
|
83
83
|
return { updated: true, runtime: end - start };
|
|
84
84
|
}
|
|
@@ -54,7 +54,7 @@ class MessageClass extends _abstract_object_1.AbstractObject {
|
|
|
54
54
|
}
|
|
55
55
|
/////////////////////////////////
|
|
56
56
|
parseXML() {
|
|
57
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
57
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
58
58
|
if (this.xml !== undefined) {
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
@@ -68,16 +68,16 @@ class MessageClass extends _abstract_object_1.AbstractObject {
|
|
|
68
68
|
if (parsed === undefined) {
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
-
this.xml.topName = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]["asx:values"]) === null ||
|
|
72
|
-
this.xml.description = (
|
|
73
|
-
const t100 = (
|
|
71
|
+
this.xml.topName = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.T100A) === null || _d === void 0 ? void 0 : _d.ARBGB;
|
|
72
|
+
this.xml.description = (_h = (_g = (_f = (_e = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _e === void 0 ? void 0 : _e["asx:abap"]) === null || _f === void 0 ? void 0 : _f["asx:values"]) === null || _g === void 0 ? void 0 : _g.T100A) === null || _h === void 0 ? void 0 : _h.STEXT;
|
|
73
|
+
const t100 = (_l = (_k = (_j = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]) === null || _k === void 0 ? void 0 : _k["asx:values"]) === null || _l === void 0 ? void 0 : _l.T100;
|
|
74
74
|
if (t100 === undefined) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
for (const msg of (0, xml_utils_1.xmlToArray)(t100.T100)) {
|
|
78
78
|
this.xml.parsedMessages.push(new message_1.Message(msg.MSGNR, (0, xml_utils_1.unescape)(msg.TEXT), msg.ARBGB));
|
|
79
79
|
}
|
|
80
|
-
const t100_texts = (
|
|
80
|
+
const t100_texts = (_p = (_o = (_m = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _m === void 0 ? void 0 : _m["asx:abap"]) === null || _o === void 0 ? void 0 : _o["asx:values"]) === null || _p === void 0 ? void 0 : _p.T100_TEXTS;
|
|
81
81
|
if (t100_texts === undefined) {
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
@@ -44,6 +44,7 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
|
|
|
44
44
|
return undefined;
|
|
45
45
|
}
|
|
46
46
|
parse() {
|
|
47
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
47
48
|
if (this.parsedXML) {
|
|
48
49
|
return { updated: false, runtime: 0 };
|
|
49
50
|
}
|
|
@@ -52,12 +53,12 @@ class MIMEObject extends _abstract_object_1.AbstractObject {
|
|
|
52
53
|
const parsed = super.parseRaw2();
|
|
53
54
|
if (parsed === undefined
|
|
54
55
|
|| parsed.abapGit === undefined
|
|
55
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
56
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
56
57
|
return { updated: false, runtime: 0 };
|
|
57
58
|
}
|
|
58
|
-
this.parsedXML.URL = parsed.abapGit["asx:abap"]["asx:values"].URL;
|
|
59
|
-
this.parsedXML.CLASS = parsed.abapGit["asx:abap"]["asx:values"].CLASS;
|
|
60
|
-
this.parsedXML.FOLDER = parsed.abapGit["asx:abap"]["asx:values"].FOLDER;
|
|
59
|
+
this.parsedXML.URL = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.URL;
|
|
60
|
+
this.parsedXML.CLASS = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.CLASS;
|
|
61
|
+
this.parsedXML.FOLDER = (_l = (_k = (_j = parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]) === null || _k === void 0 ? void 0 : _k["asx:values"]) === null || _l === void 0 ? void 0 : _l.FOLDER;
|
|
61
62
|
const end = Date.now();
|
|
62
63
|
return { updated: true, runtime: end - start };
|
|
63
64
|
}
|
|
@@ -18,10 +18,10 @@ class Oauth2Profile extends _abstract_object_1.AbstractObject {
|
|
|
18
18
|
return undefined;
|
|
19
19
|
}
|
|
20
20
|
listScopes() {
|
|
21
|
-
var _a, _b, _c;
|
|
21
|
+
var _a, _b, _c, _d, _e;
|
|
22
22
|
const ret = [];
|
|
23
23
|
const parsed = super.parseRaw2();
|
|
24
|
-
for (const t of (0, xml_utils_1.xmlToArray)((_c = (_b = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null ||
|
|
24
|
+
for (const t of (0, xml_utils_1.xmlToArray)((_e = (_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.PROFILE) === null || _d === void 0 ? void 0 : _d.T_SCOPES) === null || _e === void 0 ? void 0 : _e.OA2P_SCOPES)) {
|
|
25
25
|
ret.push(t.SCOPE);
|
|
26
26
|
}
|
|
27
27
|
return ret;
|
|
@@ -48,7 +48,7 @@ class Program extends _abap_object_1.ABAPObject {
|
|
|
48
48
|
}
|
|
49
49
|
////////////////////////////
|
|
50
50
|
parseXML() {
|
|
51
|
-
var _a, _b, _c;
|
|
51
|
+
var _a, _b, _c, _d;
|
|
52
52
|
if (this.parsedXML !== undefined) {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
@@ -66,11 +66,11 @@ class Program extends _abap_object_1.ABAPObject {
|
|
|
66
66
|
}
|
|
67
67
|
let description = "";
|
|
68
68
|
const selectionTexts = {};
|
|
69
|
-
for (const t of (0, xml_utils_1.xmlToArray)((_c = (_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]["asx:values"]) === null ||
|
|
69
|
+
for (const t of (0, xml_utils_1.xmlToArray)((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.TPOOL) === null || _d === void 0 ? void 0 : _d.item)) {
|
|
70
70
|
if ((t === null || t === void 0 ? void 0 : t.ID) === "R") {
|
|
71
71
|
description = t.ENTRY ? (0, xml_utils_1.unescape)(t.ENTRY) : "";
|
|
72
72
|
}
|
|
73
|
-
else if ((t === null || t === void 0 ? void 0 : t.ID) === "S" && t.KEY
|
|
73
|
+
else if ((t === null || t === void 0 ? void 0 : t.ID) === "S" && typeof t.KEY === "string") {
|
|
74
74
|
selectionTexts[t.KEY.toUpperCase()] = { entry: t.ENTRY ? (0, xml_utils_1.unescape)(t.ENTRY) : "", maxLength: parseInt(t.LENGTH, 10) };
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -39,20 +39,19 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
|
|
|
39
39
|
return { updated: true, runtime: end - start };
|
|
40
40
|
}
|
|
41
41
|
parseXML() {
|
|
42
|
-
var _a, _b;
|
|
42
|
+
var _a, _b, _c, _d, _e;
|
|
43
43
|
const result = { proxyData: [] };
|
|
44
44
|
const parsed = super.parseRaw2();
|
|
45
45
|
if (parsed === undefined
|
|
46
46
|
|| parsed.abapGit === undefined
|
|
47
|
-
|| ((_a = parsed.abapGit["asx:abap"]) === null ||
|
|
47
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
48
48
|
return result;
|
|
49
49
|
}
|
|
50
|
-
const values = parsed.abapGit["asx:abap"]["asx:values"];
|
|
51
|
-
result.proxyData = (0, xml_utils_1.xmlToArray)((
|
|
50
|
+
const values = (_d = (_c = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"];
|
|
51
|
+
result.proxyData = (0, xml_utils_1.xmlToArray)((_e = values.PROXY_DATA) === null || _e === void 0 ? void 0 : _e.item);
|
|
52
52
|
return result;
|
|
53
53
|
}
|
|
54
54
|
generateABAPObjects() {
|
|
55
|
-
var _a, _b, _c, _d, _e;
|
|
56
55
|
this.parse();
|
|
57
56
|
const result = [];
|
|
58
57
|
if (!this.parsedXML) {
|
|
@@ -60,7 +59,7 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
|
|
|
60
59
|
}
|
|
61
60
|
// Find interface definition
|
|
62
61
|
const intfItem = this.parsedXML.proxyData.find(i => i.R3_TYPE === "INTF");
|
|
63
|
-
if (!intfItem ||
|
|
62
|
+
if (!intfItem || typeof intfItem.R3_NAME !== "string") {
|
|
64
63
|
return result;
|
|
65
64
|
}
|
|
66
65
|
const intfName = intfItem.R3_NAME.toLowerCase();
|
|
@@ -69,10 +68,10 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
|
|
|
69
68
|
// Build interface code
|
|
70
69
|
let code = `INTERFACE ${intfName} PUBLIC.\n`;
|
|
71
70
|
for (const method of methods) {
|
|
72
|
-
|
|
73
|
-
if (!methodName) {
|
|
71
|
+
if (typeof method.R3_NAME !== "string") {
|
|
74
72
|
continue;
|
|
75
73
|
}
|
|
74
|
+
const methodName = method.R3_NAME.toLowerCase();
|
|
76
75
|
// Find parameters for this method
|
|
77
76
|
const importingParameters = this.parsedXML.proxyData.filter(i => i.R3_TYPE === "PAIM" && i.OBJ_NAME1 === method.OBJ_NAME1);
|
|
78
77
|
const exportingParameters = this.parsedXML.proxyData.filter(i => i.R3_TYPE === "PAEX" && i.OBJ_NAME1 === method.OBJ_NAME1);
|
|
@@ -81,8 +80,8 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
|
|
|
81
80
|
code += ` IMPORTING\n`;
|
|
82
81
|
for (let i = 0; i < importingParameters.length; i++) {
|
|
83
82
|
const param = importingParameters[i];
|
|
84
|
-
const paramName =
|
|
85
|
-
const paramType =
|
|
83
|
+
const paramName = typeof param.OBJ_NAME2 === "string" ? param.OBJ_NAME2.toLowerCase() : undefined;
|
|
84
|
+
const paramType = typeof param.OBJ_NAME_R === "string" ? param.OBJ_NAME_R.toLowerCase() : undefined;
|
|
86
85
|
const isLast = i === importingParameters.length - 1 && exportingParameters.length === 0;
|
|
87
86
|
code += ` ${paramName} TYPE ${paramType}${isLast ? "." : ""}\n`;
|
|
88
87
|
}
|
|
@@ -91,8 +90,8 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
|
|
|
91
90
|
code += ` EXPORTING\n`;
|
|
92
91
|
for (let i = 0; i < exportingParameters.length; i++) {
|
|
93
92
|
const param = exportingParameters[i];
|
|
94
|
-
const paramName =
|
|
95
|
-
const paramType =
|
|
93
|
+
const paramName = typeof param.OBJ_NAME2 === "string" ? param.OBJ_NAME2.toLowerCase() : undefined;
|
|
94
|
+
const paramType = typeof param.OBJ_NAME_R === "string" ? param.OBJ_NAME_R.toLowerCase() : undefined;
|
|
96
95
|
const isLast = i === exportingParameters.length - 1;
|
|
97
96
|
code += ` ${paramName} TYPE ${paramType}${isLast ? "." : ""}\n`;
|
|
98
97
|
}
|
|
@@ -337,7 +337,7 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
337
337
|
return false;
|
|
338
338
|
}
|
|
339
339
|
parseXML() {
|
|
340
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
340
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;
|
|
341
341
|
const parsed = super.parseRaw2();
|
|
342
342
|
if (parsed === undefined) {
|
|
343
343
|
return;
|
|
@@ -347,19 +347,22 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
347
347
|
return;
|
|
348
348
|
}
|
|
349
349
|
// enhancement category
|
|
350
|
-
if (((_b = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null ||
|
|
350
|
+
if (((_d = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD02V) === null || _d === void 0 ? void 0 : _d.EXCLASS) === undefined) {
|
|
351
351
|
this.parsedData.enhancementCategory = EnhancementCategory.NotClassified;
|
|
352
352
|
}
|
|
353
353
|
else {
|
|
354
|
-
this.parsedData.enhancementCategory = (
|
|
354
|
+
this.parsedData.enhancementCategory = (_h = (_g = (_f = (_e = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _e === void 0 ? void 0 : _e["asx:abap"]) === null || _f === void 0 ? void 0 : _f["asx:values"]) === null || _g === void 0 ? void 0 : _g.DD02V) === null || _h === void 0 ? void 0 : _h.EXCLASS;
|
|
355
355
|
}
|
|
356
356
|
// table category
|
|
357
|
-
this.parsedData.tableCategory = (
|
|
358
|
-
this.parsedData.description = (
|
|
359
|
-
this.parsedData.dataClass = (
|
|
357
|
+
this.parsedData.tableCategory = (_m = (_l = (_k = (_j = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _j === void 0 ? void 0 : _j["asx:abap"]) === null || _k === void 0 ? void 0 : _k["asx:values"]) === null || _l === void 0 ? void 0 : _l.DD02V) === null || _m === void 0 ? void 0 : _m.TABCLASS;
|
|
358
|
+
this.parsedData.description = (_r = (_q = (_p = (_o = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _o === void 0 ? void 0 : _o["asx:abap"]) === null || _p === void 0 ? void 0 : _p["asx:values"]) === null || _q === void 0 ? void 0 : _q.DD02V) === null || _r === void 0 ? void 0 : _r.DDTEXT;
|
|
359
|
+
this.parsedData.dataClass = (_v = (_u = (_t = (_s = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _s === void 0 ? void 0 : _s["asx:abap"]) === null || _t === void 0 ? void 0 : _t["asx:values"]) === null || _u === void 0 ? void 0 : _u.DD09L) === null || _v === void 0 ? void 0 : _v.TABART;
|
|
360
360
|
// fields
|
|
361
|
-
const fields = (
|
|
361
|
+
const fields = (_y = (_x = (_w = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _w === void 0 ? void 0 : _w["asx:abap"]) === null || _x === void 0 ? void 0 : _x["asx:values"]) === null || _y === void 0 ? void 0 : _y.DD03P_TABLE;
|
|
362
362
|
for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD03P)) {
|
|
363
|
+
if (typeof (field === null || field === void 0 ? void 0 : field.FIELDNAME) !== "string") {
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
363
366
|
this.parsedData.fields.push({
|
|
364
367
|
FIELDNAME: field.FIELDNAME,
|
|
365
368
|
ROLLNAME: field.ROLLNAME,
|
|
@@ -379,13 +382,13 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
379
382
|
});
|
|
380
383
|
}
|
|
381
384
|
// secondary indexes
|
|
382
|
-
const indexes = (
|
|
385
|
+
const indexes = (_1 = (_0 = (_z = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _z === void 0 ? void 0 : _z["asx:abap"]) === null || _0 === void 0 ? void 0 : _0["asx:values"]) === null || _1 === void 0 ? void 0 : _1.DD12V;
|
|
383
386
|
;
|
|
384
387
|
this.parsedData.secondaryIndexes = [];
|
|
385
388
|
for (const index of (0, xml_utils_1.xmlToArray)(indexes === null || indexes === void 0 ? void 0 : indexes.DD12V)) {
|
|
386
389
|
const indexName = index.INDEXNAME;
|
|
387
390
|
const indexFields = [];
|
|
388
|
-
const indexFieldsXml = (
|
|
391
|
+
const indexFieldsXml = (_4 = (_3 = (_2 = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _2 === void 0 ? void 0 : _2["asx:abap"]) === null || _3 === void 0 ? void 0 : _3["asx:values"]) === null || _4 === void 0 ? void 0 : _4.DD17V;
|
|
389
392
|
for (const indexField of (0, xml_utils_1.xmlToArray)(indexFieldsXml === null || indexFieldsXml === void 0 ? void 0 : indexFieldsXml.DD17V)) {
|
|
390
393
|
if (indexField.INDEXNAME === indexName) {
|
|
391
394
|
// assumption: fields are listed by POSITION in the xml
|
|
@@ -195,7 +195,7 @@ class TableType extends _abstract_object_1.AbstractObject {
|
|
|
195
195
|
}
|
|
196
196
|
////////////////////
|
|
197
197
|
parseXML() {
|
|
198
|
-
var _a, _b;
|
|
198
|
+
var _a, _b, _c, _d;
|
|
199
199
|
if (this.parsedXML !== undefined) {
|
|
200
200
|
return;
|
|
201
201
|
}
|
|
@@ -207,11 +207,14 @@ class TableType extends _abstract_object_1.AbstractObject {
|
|
|
207
207
|
if (parsed === undefined || parsed.abapGit === undefined) {
|
|
208
208
|
return;
|
|
209
209
|
}
|
|
210
|
-
const values = parsed.abapGit["asx:abap"]["asx:values"];
|
|
210
|
+
const values = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"];
|
|
211
211
|
if (values === undefined) {
|
|
212
212
|
return;
|
|
213
213
|
}
|
|
214
214
|
const dd40v = values.DD40V;
|
|
215
|
+
if (dd40v === undefined) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
215
218
|
this.parsedXML.rowtype = dd40v.ROWTYPE ? dd40v.ROWTYPE : "";
|
|
216
219
|
this.parsedXML.rowkind = dd40v.ROWKIND ? dd40v.ROWKIND : "";
|
|
217
220
|
this.parsedXML.datatype = dd40v.DATATYPE;
|
|
@@ -221,13 +224,13 @@ class TableType extends _abstract_object_1.AbstractObject {
|
|
|
221
224
|
this.parsedXML.keykind = dd40v.KEYKIND;
|
|
222
225
|
this.parsedXML.ddtext = dd40v.DDTEXT;
|
|
223
226
|
this.parsedXML.keydef = dd40v.KEYDEF;
|
|
224
|
-
for (const x of (0, xml_utils_1.xmlToArray)((
|
|
227
|
+
for (const x of (0, xml_utils_1.xmlToArray)((_c = values.DD42V) === null || _c === void 0 ? void 0 : _c.DD42V)) {
|
|
225
228
|
this.parsedXML.dd42v.push({
|
|
226
229
|
keyname: x.SECKEYNAME || "",
|
|
227
230
|
keyfield: x.KEYFIELD || "",
|
|
228
231
|
});
|
|
229
232
|
}
|
|
230
|
-
for (const x of (0, xml_utils_1.xmlToArray)((
|
|
233
|
+
for (const x of (0, xml_utils_1.xmlToArray)((_d = values.DD43V) === null || _d === void 0 ? void 0 : _d.DD43V)) {
|
|
231
234
|
this.parsedXML.dd43v.push({
|
|
232
235
|
keyname: x.SECKEYNAME || "",
|
|
233
236
|
accessmode: x.ACCESSMODE || "",
|
|
@@ -146,7 +146,7 @@ class View extends _abstract_object_1.AbstractObject {
|
|
|
146
146
|
}
|
|
147
147
|
///////////////
|
|
148
148
|
parseXML() {
|
|
149
|
-
var _a, _b, _c;
|
|
149
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
150
150
|
this.parsedData = {
|
|
151
151
|
header: {
|
|
152
152
|
VIEWCLASS: "",
|
|
@@ -159,13 +159,18 @@ class View extends _abstract_object_1.AbstractObject {
|
|
|
159
159
|
if (parsed === undefined || parsed.abapGit === undefined) {
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
|
-
const header = (_a = parsed.abapGit["asx:abap"]["asx:values"]) === null ||
|
|
162
|
+
const header = (_c = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === null || _c === void 0 ? void 0 : _c.DD25V;
|
|
163
163
|
this.parsedData.header = {
|
|
164
164
|
VIEWCLASS: (header === null || header === void 0 ? void 0 : header.VIEWCLASS) || "",
|
|
165
165
|
DDTEXT: (header === null || header === void 0 ? void 0 : header.DDTEXT) || "",
|
|
166
166
|
};
|
|
167
|
-
const fields = (
|
|
167
|
+
const fields = (_f = (_e = (_d = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _d === void 0 ? void 0 : _d["asx:abap"]) === null || _e === void 0 ? void 0 : _e["asx:values"]) === null || _f === void 0 ? void 0 : _f.DD27P_TABLE;
|
|
168
168
|
for (const field of (0, xml_utils_1.xmlToArray)(fields === null || fields === void 0 ? void 0 : fields.DD27P)) {
|
|
169
|
+
if (typeof (field === null || field === void 0 ? void 0 : field.VIEWFIELD) !== "string"
|
|
170
|
+
|| typeof (field === null || field === void 0 ? void 0 : field.TABNAME) !== "string"
|
|
171
|
+
|| typeof (field === null || field === void 0 ? void 0 : field.FIELDNAME) !== "string") {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
169
174
|
this.parsedData.fields.push({
|
|
170
175
|
VIEWFIELD: field.VIEWFIELD,
|
|
171
176
|
TABNAME: field.TABNAME,
|
|
@@ -173,7 +178,7 @@ class View extends _abstract_object_1.AbstractObject {
|
|
|
173
178
|
KEYFLAG: field.KEYFLAG,
|
|
174
179
|
});
|
|
175
180
|
}
|
|
176
|
-
const join = (
|
|
181
|
+
const join = (_j = (_h = (_g = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _g === void 0 ? void 0 : _g["asx:abap"]) === null || _h === void 0 ? void 0 : _h["asx:values"]) === null || _j === void 0 ? void 0 : _j.DD28J_TABLE;
|
|
177
182
|
for (const j of (0, xml_utils_1.xmlToArray)(join === null || join === void 0 ? void 0 : join.DD28J)) {
|
|
178
183
|
this.parsedData.join.push({
|
|
179
184
|
LTAB: j.LTAB,
|
|
@@ -43,7 +43,7 @@ class WebMIME extends _abstract_object_1.AbstractObject {
|
|
|
43
43
|
return undefined;
|
|
44
44
|
}
|
|
45
45
|
parse() {
|
|
46
|
-
var _a;
|
|
46
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
47
47
|
if (this.parsedXML) {
|
|
48
48
|
return { updated: false, runtime: 0 };
|
|
49
49
|
}
|
|
@@ -52,11 +52,14 @@ class WebMIME extends _abstract_object_1.AbstractObject {
|
|
|
52
52
|
const parsed = super.parseRaw2();
|
|
53
53
|
if (parsed === undefined
|
|
54
54
|
|| parsed.abapGit === undefined
|
|
55
|
-
|| parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
|
|
55
|
+
|| ((_b = (_a = parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
56
56
|
return { updated: false, runtime: 0 };
|
|
57
57
|
}
|
|
58
|
-
this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].TEXT;
|
|
59
|
-
for (const param of (0, xml_utils_1.xmlToArray)((
|
|
58
|
+
this.parsedXML.description = (_e = (_d = (_c = parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.TEXT;
|
|
59
|
+
for (const param of (0, xml_utils_1.xmlToArray)((_j = (_h = (_g = (_f = parsed.abapGit) === null || _f === void 0 ? void 0 : _f["asx:abap"]) === null || _g === void 0 ? void 0 : _g["asx:values"]) === null || _h === void 0 ? void 0 : _h.PARAMS) === null || _j === void 0 ? void 0 : _j.WWWPARAMS)) {
|
|
60
|
+
if (typeof (param === null || param === void 0 ? void 0 : param.NAME) !== "string") {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
60
63
|
this.parsedXML.params[param.NAME.toLowerCase()] = param.VALUE;
|
|
61
64
|
}
|
|
62
65
|
const end = Date.now();
|
package/build/src/registry.js
CHANGED
|
@@ -12,6 +12,8 @@ const objects_1 = require("../objects");
|
|
|
12
12
|
const _reference_1 = require("../abap/5_syntax/_reference");
|
|
13
13
|
const basic_1 = require("../abap/types/basic");
|
|
14
14
|
const _statement_1 = require("../abap/2_statements/statements/_statement");
|
|
15
|
+
const statements_1 = require("../abap/2_statements/statements");
|
|
16
|
+
const expressions_1 = require("../abap/2_statements/expressions");
|
|
15
17
|
class ClearExportingParametersConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
16
18
|
constructor() {
|
|
17
19
|
super(...arguments);
|
|
@@ -43,6 +45,8 @@ Note: EXPORTING parameters passed by VALUE are always initialized and are theref
|
|
|
43
45
|
Reading and writing the parameter in the same statement (e.g. "ev_result = ev_result + 1") is reported,
|
|
44
46
|
as the source is evaluated before the parameter is assigned.
|
|
45
47
|
Objects containing parser or syntax errors are not reported.
|
|
48
|
+
"IS SUPPLIED"/"IS REQUESTED" checks are not considered reads, and "GET REFERENCE OF" plus
|
|
49
|
+
"ASSIGN ... TO <fs>" are considered writes, as the value can be written via the reference.
|
|
46
50
|
|
|
47
51
|
Class and interface method implementations and function modules are checked.`,
|
|
48
52
|
tags: [_irule_1.RuleTag.Styleguide],
|
|
@@ -168,6 +172,16 @@ ENDCLASS.`,
|
|
|
168
172
|
}
|
|
169
173
|
const pos = reference.position.getStart();
|
|
170
174
|
if (reference.referenceType === _reference_1.ReferenceType.DataReadReference) {
|
|
175
|
+
if (this.isSuppliedOrRequested(reference, obj)) {
|
|
176
|
+
continue; // "IS SUPPLIED" / "IS REQUESTED" does not read the value
|
|
177
|
+
}
|
|
178
|
+
if (this.isReferenceOrAssign(reference, obj)) {
|
|
179
|
+
// "GET REFERENCE OF" and "ASSIGN ... TO <fs>" may be used for writing the value
|
|
180
|
+
if (earliestWrite === undefined || pos.isBefore(earliestWrite.position.getStart())) {
|
|
181
|
+
earliestWrite = reference;
|
|
182
|
+
}
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
171
185
|
if (firstRead === undefined || pos.isBefore(firstRead.position.getStart())) {
|
|
172
186
|
firstRead = reference;
|
|
173
187
|
}
|
|
@@ -190,6 +204,46 @@ ENDCLASS.`,
|
|
|
190
204
|
const message = `EXPORTING parameter "${parameter.getName().toLowerCase()}" read before it is cleared or assigned`;
|
|
191
205
|
return issue_1.Issue.atIdentifier(firstRead.position, message, this.getMetadata().key, this.conf.severity);
|
|
192
206
|
}
|
|
207
|
+
isReferenceOrAssign(reference, obj) {
|
|
208
|
+
const file = obj.getABAPFileByName(reference.position.getFilename());
|
|
209
|
+
const pos = reference.position.getStart();
|
|
210
|
+
for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
|
|
211
|
+
const start = statement.getStart();
|
|
212
|
+
const end = statement.getEnd();
|
|
213
|
+
if (pos.equals(start) === false && (pos.isAfter(start) === false || pos.isBefore(end) === false)) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const type = statement.get();
|
|
217
|
+
return type instanceof statements_1.GetReference || type instanceof statements_1.Assign;
|
|
218
|
+
}
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
isSuppliedOrRequested(reference, obj) {
|
|
222
|
+
const file = obj.getABAPFileByName(reference.position.getFilename());
|
|
223
|
+
const pos = reference.position.getStart();
|
|
224
|
+
for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
|
|
225
|
+
const start = statement.getStart();
|
|
226
|
+
const end = statement.getEnd();
|
|
227
|
+
if (pos.equals(start) === false && (pos.isAfter(start) === false || pos.isBefore(end) === false)) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
for (const compare of statement.findAllExpressionsRecursive(expressions_1.Compare)) {
|
|
231
|
+
const upper = compare.concatTokens().toUpperCase();
|
|
232
|
+
if (upper.includes(" IS SUPPLIED") === false
|
|
233
|
+
&& upper.includes(" IS REQUESTED") === false
|
|
234
|
+
&& upper.includes(" IS NOT SUPPLIED") === false
|
|
235
|
+
&& upper.includes(" IS NOT REQUESTED") === false) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const cStart = compare.getFirstToken().getStart();
|
|
239
|
+
const cEnd = compare.getLastToken().getEnd();
|
|
240
|
+
if ((pos.equals(cStart) || pos.isAfter(cStart)) && pos.isBefore(cEnd)) {
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
193
247
|
statementStart(reference, obj) {
|
|
194
248
|
const file = obj.getABAPFileByName(reference.position.getFilename());
|
|
195
249
|
for (const statement of (file === null || file === void 0 ? void 0 : file.getStatements()) || []) {
|
|
@@ -128,11 +128,18 @@ Consider using ABAP Doc for documentation.`,
|
|
|
128
128
|
return this.checkXML(xml, file);
|
|
129
129
|
}
|
|
130
130
|
checkXML(xml, file) {
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
var _a, _b, _c, _d, _e;
|
|
132
|
+
let parsed;
|
|
133
|
+
try {
|
|
134
|
+
parsed = new fast_xml_parser_1.XMLParser({ parseTagValue: false, ignoreAttributes: true, trimValues: false }).parse(xml);
|
|
135
|
+
}
|
|
136
|
+
catch (_f) {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
if (((_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _a === void 0 ? void 0 : _a["asx:abap"]) === null || _b === void 0 ? void 0 : _b["asx:values"]) === undefined) {
|
|
133
140
|
return [];
|
|
134
141
|
}
|
|
135
|
-
const desc = parsed.abapGit["asx:abap"]["asx:values"].DESCRIPTIONS;
|
|
142
|
+
const desc = (_e = (_d = (_c = parsed === null || parsed === void 0 ? void 0 : parsed.abapGit) === null || _c === void 0 ? void 0 : _c["asx:abap"]) === null || _d === void 0 ? void 0 : _d["asx:values"]) === null || _e === void 0 ? void 0 : _e.DESCRIPTIONS;
|
|
136
143
|
if (desc === undefined) {
|
|
137
144
|
return [];
|
|
138
145
|
}
|
|
@@ -191,6 +191,40 @@ class XMLConsistency {
|
|
|
191
191
|
const issues = [];
|
|
192
192
|
const texts = obj.getTexts();
|
|
193
193
|
const maxLengths = obj.getTextMaxLengths();
|
|
194
|
+
const hasLabelTexts = (texts === null || texts === void 0 ? void 0 : texts.short) !== undefined
|
|
195
|
+
|| (texts === null || texts === void 0 ? void 0 : texts.medium) !== undefined
|
|
196
|
+
|| (texts === null || texts === void 0 ? void 0 : texts.long) !== undefined
|
|
197
|
+
|| (texts === null || texts === void 0 ? void 0 : texts.heading) !== undefined;
|
|
198
|
+
if ((texts === null || texts === void 0 ? void 0 : texts.short) !== undefined) {
|
|
199
|
+
const issue = this.checkRequiredField(file, "SCRLEN1", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.short);
|
|
200
|
+
if (issue) {
|
|
201
|
+
issues.push(issue);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if ((texts === null || texts === void 0 ? void 0 : texts.medium) !== undefined) {
|
|
205
|
+
const issue = this.checkRequiredField(file, "SCRLEN2", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.medium);
|
|
206
|
+
if (issue) {
|
|
207
|
+
issues.push(issue);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if ((texts === null || texts === void 0 ? void 0 : texts.long) !== undefined) {
|
|
211
|
+
const issue = this.checkRequiredField(file, "SCRLEN3", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.long);
|
|
212
|
+
if (issue) {
|
|
213
|
+
issues.push(issue);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if ((texts === null || texts === void 0 ? void 0 : texts.heading) !== undefined) {
|
|
217
|
+
const issue = this.checkRequiredField(file, "HEADLEN", maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.heading);
|
|
218
|
+
if (issue) {
|
|
219
|
+
issues.push(issue);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (hasLabelTexts) {
|
|
223
|
+
const issue = this.checkRequiredField(file, "DTELMASTER", obj.getDtelMaster());
|
|
224
|
+
if (issue) {
|
|
225
|
+
issues.push(issue);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
194
228
|
for (const issue of [
|
|
195
229
|
this.checkTextLength(file, "DDTEXT", obj.getDescription(), 60),
|
|
196
230
|
this.checkTextLength(file, "SCRTEXT_S", texts === null || texts === void 0 ? void 0 : texts.short, maxLengths === null || maxLengths === void 0 ? void 0 : maxLengths.short),
|
|
@@ -218,6 +252,12 @@ class XMLConsistency {
|
|
|
218
252
|
}
|
|
219
253
|
return issues;
|
|
220
254
|
}
|
|
255
|
+
checkRequiredField(file, fieldName, value) {
|
|
256
|
+
if (value === undefined || value === "") {
|
|
257
|
+
return issue_1.Issue.atRow(file, 1, `Missing required field ${fieldName} in DD04V`, this.getMetadata().key, this.conf.severity);
|
|
258
|
+
}
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
221
261
|
runDomain(obj, file) {
|
|
222
262
|
var _a, _b;
|
|
223
263
|
const maxTextLength = 60;
|
package/build/src/xml_utils.js
CHANGED
|
@@ -14,14 +14,14 @@ function xmlToArray(data) {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
function unescape(str) {
|
|
17
|
-
if (str
|
|
17
|
+
if (typeof str !== "string") {
|
|
18
18
|
return "";
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return
|
|
20
|
+
let result = str.replace(/&/g, "&");
|
|
21
|
+
result = result.replace(/>/g, ">");
|
|
22
|
+
result = result.replace(/</g, "<");
|
|
23
|
+
result = result.replace(/"/g, "\"");
|
|
24
|
+
result = result.replace(/'/g, "'");
|
|
25
|
+
return result;
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=xml_utils.js.map
|