@abaplint/core 2.120.18 → 2.120.20
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 +3 -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/_current_scope.js +14 -0
- package/build/src/abap/5_syntax/_type_utils.js +2 -1
- package/build/src/abap/5_syntax/expressions/attribute_chain.js +105 -4
- package/build/src/abap/5_syntax/expressions/message_source.js +3 -0
- package/build/src/abap/5_syntax/expressions/method_call_chain.js +5 -0
- package/build/src/abap/5_syntax/expressions/method_source.js +7 -0
- package/build/src/abap/5_syntax/expressions/target.js +1 -1
- package/build/src/abap/types/class_definition.js +9 -0
- 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 +4 -3
package/build/abaplint.d.ts
CHANGED
|
@@ -1263,6 +1263,7 @@ declare class ClassDefinition_3 extends Identifier implements IClassDefinition {
|
|
|
1263
1263
|
private checkClassConstructorStatic;
|
|
1264
1264
|
private checkInterfaceVisibility;
|
|
1265
1265
|
private checkMethodsFromSuperClasses;
|
|
1266
|
+
private checkMethodNameConflicts;
|
|
1266
1267
|
private findFriends;
|
|
1267
1268
|
private addReference;
|
|
1268
1269
|
private parse;
|
|
@@ -1645,6 +1646,7 @@ export declare class CurrentScope {
|
|
|
1645
1646
|
push(stype: ScopeType, sname: string, start: Position, filename: string): void;
|
|
1646
1647
|
isOO(): boolean;
|
|
1647
1648
|
isAnyOO(): boolean;
|
|
1649
|
+
isInStaticMethod(): boolean;
|
|
1648
1650
|
addLocalFriend(className: string, friendName: string): void;
|
|
1649
1651
|
isLocalFriend(className: string, friendName: string): boolean;
|
|
1650
1652
|
getEnclosingClassName(): string | undefined;
|
|
@@ -1807,6 +1809,7 @@ declare class DataElement extends AbstractObject {
|
|
|
1807
1809
|
long?: string;
|
|
1808
1810
|
heading?: string;
|
|
1809
1811
|
}[] | undefined;
|
|
1812
|
+
getDtelMaster(): string | undefined;
|
|
1810
1813
|
parseType(reg: IRegistry): AbstractType;
|
|
1811
1814
|
parse(): {
|
|
1812
1815
|
updated: boolean;
|
|
@@ -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));
|
|
@@ -462,6 +462,20 @@ class CurrentScope {
|
|
|
462
462
|
}
|
|
463
463
|
return false;
|
|
464
464
|
}
|
|
465
|
+
isInStaticMethod() {
|
|
466
|
+
let curr = this.current;
|
|
467
|
+
while (curr !== undefined) {
|
|
468
|
+
const stype = curr.getIdentifier().stype;
|
|
469
|
+
if (stype === _scope_type_1.ScopeType.MethodInstance) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
else if (stype === _scope_type_1.ScopeType.ClassImplementation) {
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
curr = curr.getParent();
|
|
476
|
+
}
|
|
477
|
+
return false;
|
|
478
|
+
}
|
|
465
479
|
addLocalFriend(className, friendName) {
|
|
466
480
|
var _a;
|
|
467
481
|
const key = className.toUpperCase();
|
|
@@ -510,7 +510,8 @@ class TypeUtils {
|
|
|
510
510
|
}
|
|
511
511
|
}
|
|
512
512
|
else if (source instanceof basic_1.XStringType) {
|
|
513
|
-
if (target instanceof basic_1.
|
|
513
|
+
if (target instanceof basic_1.CharacterType
|
|
514
|
+
|| target instanceof basic_1.CLikeType
|
|
514
515
|
|| target instanceof basic_1.IntegerType
|
|
515
516
|
|| target instanceof basic_1.StringType
|
|
516
517
|
|| target instanceof basic_1.ObjectReferenceType
|
|
@@ -1,17 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.AttributeChain = void 0;
|
|
37
|
+
const nodes_1 = require("../../nodes");
|
|
38
|
+
const Expressions = __importStar(require("../../2_statements/expressions"));
|
|
4
39
|
const void_type_1 = require("../../types/basic/void_type");
|
|
5
|
-
const
|
|
40
|
+
const basic_1 = require("../../types/basic");
|
|
6
41
|
const _object_oriented_1 = require("../_object_oriented");
|
|
7
42
|
const expressions_1 = require("../../2_statements/expressions");
|
|
8
43
|
const _syntax_input_1 = require("../_syntax_input");
|
|
44
|
+
const component_name_1 = require("./component_name");
|
|
45
|
+
const attribute_name_1 = require("./attribute_name");
|
|
46
|
+
const table_expression_1 = require("./table_expression");
|
|
47
|
+
const field_offset_1 = require("./field_offset");
|
|
48
|
+
const field_length_1 = require("./field_length");
|
|
9
49
|
class AttributeChain {
|
|
10
50
|
static runSyntax(inputContext, node, input, type) {
|
|
11
51
|
if (inputContext instanceof void_type_1.VoidType) {
|
|
12
52
|
return inputContext;
|
|
13
53
|
}
|
|
14
|
-
else if (!(inputContext instanceof
|
|
54
|
+
else if (!(inputContext instanceof basic_1.ObjectReferenceType)) {
|
|
15
55
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), "Not an object reference(AttributeChain)"));
|
|
16
56
|
return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
17
57
|
}
|
|
@@ -41,8 +81,69 @@ class AttributeChain {
|
|
|
41
81
|
for (const t of type) {
|
|
42
82
|
input.scope.addReference(nameToken, context, t, input.filename);
|
|
43
83
|
}
|
|
44
|
-
|
|
45
|
-
|
|
84
|
+
let contextType = context.getType();
|
|
85
|
+
const children = node.getChildren();
|
|
86
|
+
for (let i = 1; i < children.length; i++) {
|
|
87
|
+
const child = children[i];
|
|
88
|
+
if (contextType instanceof void_type_1.VoidType || contextType instanceof basic_1.UnknownType) {
|
|
89
|
+
return contextType;
|
|
90
|
+
}
|
|
91
|
+
else if (child.get() instanceof Expressions.ArrowOrDash) {
|
|
92
|
+
const operator = child.getFirstToken().getStr();
|
|
93
|
+
if (operator === "-" && !(contextType instanceof basic_1.StructureType)) {
|
|
94
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "AttributeChain, not a structure"));
|
|
95
|
+
return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
96
|
+
}
|
|
97
|
+
else if ((operator === "->" || operator === "=>")
|
|
98
|
+
&& !(contextType instanceof basic_1.ObjectReferenceType)
|
|
99
|
+
&& !(contextType instanceof basic_1.DataReference)) {
|
|
100
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "AttributeChain, not a reference"));
|
|
101
|
+
return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (child.get() instanceof Expressions.ComponentName) {
|
|
105
|
+
if (contextType instanceof basic_1.ObjectReferenceType || contextType instanceof basic_1.DataReference) {
|
|
106
|
+
contextType = attribute_name_1.AttributeName.runSyntax(contextType, child, input, type);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
contextType = component_name_1.ComponentName.runSyntax(contextType, child, input);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (child.getFirstToken().getStr() === "*" && contextType instanceof basic_1.DataReference) {
|
|
113
|
+
contextType = contextType.getType();
|
|
114
|
+
}
|
|
115
|
+
else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.TableExpression) {
|
|
116
|
+
if (!(contextType instanceof basic_1.TableType)) {
|
|
117
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, child.getFirstToken(), "Table expression, expected table"));
|
|
118
|
+
return void_type_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
119
|
+
}
|
|
120
|
+
table_expression_1.TableExpression.runSyntax(child, input, contextType);
|
|
121
|
+
contextType = contextType.getRowType();
|
|
122
|
+
}
|
|
123
|
+
else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.FieldOffset) {
|
|
124
|
+
const offset = field_offset_1.FieldOffset.runSyntax(child, input);
|
|
125
|
+
if (offset !== undefined) {
|
|
126
|
+
if (contextType instanceof basic_1.CharacterType) {
|
|
127
|
+
contextType = new basic_1.CharacterType(contextType.getLength() - offset);
|
|
128
|
+
}
|
|
129
|
+
else if (contextType instanceof basic_1.HexType) {
|
|
130
|
+
contextType = new basic_1.HexType(contextType.getLength() - offset);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.FieldLength) {
|
|
135
|
+
const length = field_length_1.FieldLength.runSyntax(child, input);
|
|
136
|
+
if (length !== undefined) {
|
|
137
|
+
if (contextType instanceof basic_1.CharacterType) {
|
|
138
|
+
contextType = new basic_1.CharacterType(length);
|
|
139
|
+
}
|
|
140
|
+
else if (contextType instanceof basic_1.HexType) {
|
|
141
|
+
contextType = new basic_1.HexType(length);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return contextType;
|
|
46
147
|
}
|
|
47
148
|
}
|
|
48
149
|
exports.AttributeChain = AttributeChain;
|
|
@@ -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();
|
|
@@ -90,6 +90,11 @@ class MethodCallChain {
|
|
|
90
90
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
|
|
91
91
|
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
92
92
|
}
|
|
93
|
+
if (current === first && (method === null || method === void 0 ? void 0 : method.isStatic()) === false && input.scope.isInStaticMethod() === true) {
|
|
94
|
+
const message = "Method \"" + methodName + "\" not static";
|
|
95
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
|
|
96
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
97
|
+
}
|
|
93
98
|
const voidedName = context instanceof basic_1.VoidType ? context.getVoided() : undefined;
|
|
94
99
|
const extra = helper.methodReferenceExtras(foundDef, className || voidedName);
|
|
95
100
|
input.scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, input.filename, extra);
|
|
@@ -59,9 +59,11 @@ class MethodSource {
|
|
|
59
59
|
throw new assert_error_1.AssertError("MethodSource, first child expected");
|
|
60
60
|
}
|
|
61
61
|
let context = this.findTop(first, input, children);
|
|
62
|
+
let implicitMe = false;
|
|
62
63
|
if (context === undefined) {
|
|
63
64
|
context = (_a = input.scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
|
|
64
65
|
children.unshift(first);
|
|
66
|
+
implicitMe = true;
|
|
65
67
|
}
|
|
66
68
|
if (input.scope.getLanguageVersion() === version_1.LanguageVersion.Cloud
|
|
67
69
|
&& first.get() instanceof Expressions.Dynamic
|
|
@@ -121,6 +123,11 @@ class MethodSource {
|
|
|
121
123
|
const def = input.scope.findObjectDefinition(className);
|
|
122
124
|
// eslint-disable-next-line prefer-const
|
|
123
125
|
let { method, def: foundDef } = helper.searchMethodName(def, methodName);
|
|
126
|
+
if (implicitMe && current === first && (method === null || method === void 0 ? void 0 : method.isStatic()) === false && input.scope.isInStaticMethod() === true) {
|
|
127
|
+
const message = "Method \"" + methodName + "\" not static";
|
|
128
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, methodToken, message));
|
|
129
|
+
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
130
|
+
}
|
|
124
131
|
if (method === undefined && (methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase()) === "CONSTRUCTOR") {
|
|
125
132
|
context = basic_1.VoidType.get("CONSTRUCTOR"); // todo, this is a workaround, constructors always exists
|
|
126
133
|
}
|
|
@@ -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
|
}
|
|
@@ -97,6 +97,7 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
97
97
|
// perform checks after everything has been initialized
|
|
98
98
|
this.checkInterfaceVisibility(input, node);
|
|
99
99
|
this.checkMethodsFromSuperClasses(input);
|
|
100
|
+
this.checkMethodNameConflicts(input);
|
|
100
101
|
this.checkClassNameLength(input);
|
|
101
102
|
this.checkMethodNameLength(input);
|
|
102
103
|
this.checkClassConstructorStatic(input);
|
|
@@ -228,6 +229,14 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
228
229
|
}
|
|
229
230
|
}
|
|
230
231
|
}
|
|
232
|
+
checkMethodNameConflicts(input) {
|
|
233
|
+
for (const m of this.methodDefs.getAll()) {
|
|
234
|
+
if (this.attributes.findByName(m.getName()) !== undefined
|
|
235
|
+
|| this.types.getByName(m.getName()) !== undefined) {
|
|
236
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, m.getToken(), `"${m.getName()}" already defined`));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
231
240
|
findFriends(def, input) {
|
|
232
241
|
var _a;
|
|
233
242
|
const result = [];
|
|
@@ -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
|
}
|