@abaplint/core 2.101.3 → 2.101.5
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.
|
@@ -7,7 +7,6 @@ const source_1 = require("./source");
|
|
|
7
7
|
const _type_utils_1 = require("../_type_utils");
|
|
8
8
|
class StringTemplate {
|
|
9
9
|
runSyntax(node, scope, filename) {
|
|
10
|
-
var _a;
|
|
11
10
|
const typeUtils = new _type_utils_1.TypeUtils(scope);
|
|
12
11
|
for (const templateSource of node.findAllExpressions(Expressions.StringTemplateSource)) {
|
|
13
12
|
const s = templateSource.findDirectExpression(Expressions.Source);
|
|
@@ -18,9 +17,22 @@ class StringTemplate {
|
|
|
18
17
|
else if (typeUtils.isCharLike(type) === false && typeUtils.isHexLike(type) === false) {
|
|
19
18
|
throw new Error("Not character like, " + type.constructor.name);
|
|
20
19
|
}
|
|
21
|
-
|
|
20
|
+
const format = templateSource.findDirectExpression(Expressions.StringTemplateFormatting);
|
|
21
|
+
const formatConcat = format === null || format === void 0 ? void 0 : format.concatTokens();
|
|
22
|
+
for (const formatSource of (format === null || format === void 0 ? void 0 : format.findAllExpressions(Expressions.Source)) || []) {
|
|
22
23
|
new source_1.Source().runSyntax(formatSource, scope, filename);
|
|
23
24
|
}
|
|
25
|
+
if ((formatConcat === null || formatConcat === void 0 ? void 0 : formatConcat.includes("ALPHA = "))
|
|
26
|
+
&& !(type instanceof basic_1.UnknownType)
|
|
27
|
+
&& !(type instanceof basic_1.VoidType)
|
|
28
|
+
&& !(type instanceof basic_1.StringType)
|
|
29
|
+
&& !(type instanceof basic_1.CLikeType)
|
|
30
|
+
&& !(type instanceof basic_1.CharacterType)
|
|
31
|
+
&& !(type instanceof basic_1.NumericGenericType)
|
|
32
|
+
&& !(type instanceof basic_1.NumericType)
|
|
33
|
+
&& !(type instanceof basic_1.AnyType)) {
|
|
34
|
+
throw new Error("Cannot apply ALPHA to this type");
|
|
35
|
+
}
|
|
24
36
|
}
|
|
25
37
|
return new basic_1.StringType({ qualifiedName: "STRING" });
|
|
26
38
|
}
|
|
@@ -8,45 +8,50 @@ const _reference_1 = require("../_reference");
|
|
|
8
8
|
const basic_1 = require("../../types/basic");
|
|
9
9
|
const message_source_1 = require("../expressions/message_source");
|
|
10
10
|
const raise_with_1 = require("../expressions/raise_with");
|
|
11
|
+
const _object_oriented_1 = require("../_object_oriented");
|
|
12
|
+
const method_parameters_1 = require("../expressions/method_parameters");
|
|
11
13
|
class Raise {
|
|
12
14
|
runSyntax(node, scope, filename) {
|
|
13
15
|
// todo
|
|
14
|
-
var _a, _b, _c;
|
|
16
|
+
var _a, _b, _c, _d, _e;
|
|
17
|
+
const helper = new _object_oriented_1.ObjectOriented(scope);
|
|
18
|
+
let method;
|
|
15
19
|
const classTok = (_a = node.findDirectExpression(Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
const found = scope.existsObject(
|
|
20
|
+
const className = classTok === null || classTok === void 0 ? void 0 : classTok.getStr();
|
|
21
|
+
if (className) {
|
|
22
|
+
const found = scope.existsObject(className);
|
|
19
23
|
if (found.found === true && found.id) {
|
|
20
24
|
scope.addReference(classTok, found.id, found.type, filename);
|
|
25
|
+
const def = scope.findObjectDefinition(className);
|
|
26
|
+
method = (_b = helper.searchMethodName(def, "CONSTRUCTOR")) === null || _b === void 0 ? void 0 : _b.method;
|
|
21
27
|
}
|
|
22
|
-
else if (scope.getDDIC().inErrorNamespace(
|
|
23
|
-
const extra = { ooName:
|
|
28
|
+
else if (scope.getDDIC().inErrorNamespace(className) === false) {
|
|
29
|
+
const extra = { ooName: className, ooType: "Void" };
|
|
24
30
|
scope.addReference(classTok, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
|
|
31
|
+
method = new basic_1.VoidType(className);
|
|
25
32
|
}
|
|
26
33
|
else {
|
|
27
|
-
throw new Error("RAISE, unknown class " +
|
|
34
|
+
throw new Error("RAISE, unknown class " + className);
|
|
28
35
|
}
|
|
29
36
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
const c = node.findExpressionAfterToken("EXCEPTION");
|
|
38
|
+
if (c instanceof nodes_1.ExpressionNode && (c.get() instanceof Expressions.SimpleSource2 || c.get() instanceof Expressions.Source)) {
|
|
39
|
+
const type = new source_1.Source().runSyntax(c, scope, filename);
|
|
40
|
+
if (type instanceof basic_1.VoidType) {
|
|
41
|
+
method = type;
|
|
42
|
+
}
|
|
43
|
+
else if (type instanceof basic_1.ObjectReferenceType) {
|
|
44
|
+
const def = scope.findObjectDefinition(type.getIdentifierName());
|
|
45
|
+
method = (_c = helper.searchMethodName(def, "CONSTRUCTOR")) === null || _c === void 0 ? void 0 : _c.method;
|
|
46
|
+
}
|
|
47
|
+
else if (type !== undefined) {
|
|
48
|
+
throw new Error("RAISE EXCEPTION, must be object reference, got " + type.constructor.name);
|
|
41
49
|
}
|
|
42
|
-
prev = c.concatTokens().toUpperCase();
|
|
43
50
|
}
|
|
44
|
-
//
|
|
51
|
+
// check parameters vs constructor
|
|
45
52
|
const param = node.findDirectExpression(Expressions.ParameterListS);
|
|
46
53
|
if (param) {
|
|
47
|
-
|
|
48
|
-
new source_1.Source().runSyntax(s, scope, filename);
|
|
49
|
-
}
|
|
54
|
+
new method_parameters_1.MethodParameters().checkExporting(param, scope, method, filename, true);
|
|
50
55
|
}
|
|
51
56
|
for (const s of node.findDirectExpressions(Expressions.RaiseWith)) {
|
|
52
57
|
new raise_with_1.RaiseWith().runSyntax(s, scope, filename);
|
|
@@ -60,8 +65,8 @@ class Raise {
|
|
|
60
65
|
for (const s of node.findDirectExpressions(Expressions.MessageSource)) {
|
|
61
66
|
new message_source_1.MessageSource().runSyntax(s, scope, filename);
|
|
62
67
|
}
|
|
63
|
-
const id = (
|
|
64
|
-
const number = (
|
|
68
|
+
const id = (_d = node.findExpressionAfterToken("ID")) === null || _d === void 0 ? void 0 : _d.concatTokens();
|
|
69
|
+
const number = (_e = node.findDirectExpression(Expressions.MessageNumber)) === null || _e === void 0 ? void 0 : _e.concatTokens();
|
|
65
70
|
if ((id === null || id === void 0 ? void 0 : id.startsWith("'")) && number) {
|
|
66
71
|
const messageClass = id.substring(1, id.length - 1).toUpperCase();
|
|
67
72
|
scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, number);
|
package/build/src/registry.js
CHANGED
|
@@ -71,14 +71,18 @@ class ModifyOnlyOwnDBTables {
|
|
|
71
71
|
}
|
|
72
72
|
const concat = databaseTable.concatTokens().toUpperCase();
|
|
73
73
|
if (regExp.test(concat) === false) {
|
|
74
|
-
// must contain a ReferenceType.TableVoidReference
|
|
74
|
+
// must contain a ReferenceType.TableVoidReference or a ReferenceType.TableReference if its a dependency
|
|
75
75
|
if (spaghetti === undefined) {
|
|
76
76
|
spaghetti = new syntax_1.SyntaxLogic(this.reg, obj).run().spaghetti;
|
|
77
77
|
}
|
|
78
78
|
const start = databaseTable.getFirstToken().getStart();
|
|
79
79
|
const scope = spaghetti.lookupPosition(start, file.getFilename());
|
|
80
|
-
const
|
|
81
|
-
if (
|
|
80
|
+
const found1 = scope === null || scope === void 0 ? void 0 : scope.findTableVoidReference(start);
|
|
81
|
+
if (found1) {
|
|
82
|
+
output.push(issue_1.Issue.atStatement(file, s, this.getMetadata().title, this.getMetadata().key, this.getConfig().severity));
|
|
83
|
+
}
|
|
84
|
+
const found2 = scope === null || scope === void 0 ? void 0 : scope.findTableReference(start);
|
|
85
|
+
if (found2) {
|
|
82
86
|
output.push(issue_1.Issue.atStatement(file, s, this.getMetadata().title, this.getMetadata().key, this.getConfig().severity));
|
|
83
87
|
}
|
|
84
88
|
}
|