@abaplint/core 2.102.67 → 2.102.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/build/abaplint.d.ts +12 -11
  2. package/build/src/abap/1_lexer/lexer.js +2 -1
  3. package/build/src/abap/1_lexer/tokens/{_token.js → abstract_token.js} +8 -7
  4. package/build/src/abap/1_lexer/tokens/at.js +3 -21
  5. package/build/src/abap/1_lexer/tokens/atw.js +11 -0
  6. package/build/src/abap/1_lexer/tokens/bracket_left.js +3 -21
  7. package/build/src/abap/1_lexer/tokens/bracket_leftw.js +11 -0
  8. package/build/src/abap/1_lexer/tokens/bracket_right.js +3 -21
  9. package/build/src/abap/1_lexer/tokens/bracket_rightw.js +11 -0
  10. package/build/src/abap/1_lexer/tokens/colon.js +2 -2
  11. package/build/src/abap/1_lexer/tokens/comment.js +2 -2
  12. package/build/src/abap/1_lexer/tokens/dash.js +3 -21
  13. package/build/src/abap/1_lexer/tokens/dashw.js +11 -0
  14. package/build/src/abap/1_lexer/tokens/identifier.js +2 -2
  15. package/build/src/abap/1_lexer/tokens/index.js +37 -6
  16. package/build/src/abap/1_lexer/tokens/instance_arrow.js +3 -21
  17. package/build/src/abap/1_lexer/tokens/instance_arroww.js +11 -0
  18. package/build/src/abap/1_lexer/tokens/paren_left.js +3 -21
  19. package/build/src/abap/1_lexer/tokens/paren_leftw.js +11 -0
  20. package/build/src/abap/1_lexer/tokens/paren_right.js +3 -21
  21. package/build/src/abap/1_lexer/tokens/paren_rightw.js +11 -0
  22. package/build/src/abap/1_lexer/tokens/plus.js +3 -21
  23. package/build/src/abap/1_lexer/tokens/plusw.js +11 -0
  24. package/build/src/abap/1_lexer/tokens/pragma.js +2 -2
  25. package/build/src/abap/1_lexer/tokens/punctuation.js +2 -2
  26. package/build/src/abap/1_lexer/tokens/static_arrow.js +3 -21
  27. package/build/src/abap/1_lexer/tokens/static_arroww.js +11 -0
  28. package/build/src/abap/1_lexer/tokens/string.js +3 -15
  29. package/build/src/abap/1_lexer/tokens/string_template.js +8 -0
  30. package/build/src/abap/1_lexer/tokens/string_template_begin.js +8 -0
  31. package/build/src/abap/1_lexer/tokens/string_template_end.js +8 -0
  32. package/build/src/abap/1_lexer/tokens/string_template_middle.js +8 -0
  33. package/build/src/abap/1_lexer/tokens/wat.js +11 -0
  34. package/build/src/abap/1_lexer/tokens/watw.js +11 -0
  35. package/build/src/abap/1_lexer/tokens/wbracket_left.js +11 -0
  36. package/build/src/abap/1_lexer/tokens/wbracket_leftw.js +11 -0
  37. package/build/src/abap/1_lexer/tokens/wbracket_right.js +11 -0
  38. package/build/src/abap/1_lexer/tokens/wbracket_rightw.js +11 -0
  39. package/build/src/abap/1_lexer/tokens/wdash.js +11 -0
  40. package/build/src/abap/1_lexer/tokens/wdashw.js +11 -0
  41. package/build/src/abap/1_lexer/tokens/winstance_arrow.js +11 -0
  42. package/build/src/abap/1_lexer/tokens/winstance_arroww.js +11 -0
  43. package/build/src/abap/1_lexer/tokens/wparen_left.js +11 -0
  44. package/build/src/abap/1_lexer/tokens/wparen_leftw.js +11 -0
  45. package/build/src/abap/1_lexer/tokens/wparen_right.js +11 -0
  46. package/build/src/abap/1_lexer/tokens/wparen_rightw.js +11 -0
  47. package/build/src/abap/1_lexer/tokens/wplus.js +11 -0
  48. package/build/src/abap/1_lexer/tokens/wplusw.js +11 -0
  49. package/build/src/abap/1_lexer/tokens/wstatic_arrow.js +11 -0
  50. package/build/src/abap/1_lexer/tokens/wstatic_arroww.js +11 -0
  51. package/build/src/abap/2_statements/expand_macros.js +3 -3
  52. package/build/src/abap/2_statements/expressions/sql_into_list.js +3 -2
  53. package/build/src/abap/nodes/statement_node.js +12 -8
  54. package/build/src/abap/types/class_definition.js +25 -0
  55. package/build/src/abap/types/interface_definition.js +17 -5
  56. package/build/src/index.js +4 -3
  57. package/build/src/issue.js +2 -1
  58. package/build/src/lsp/semantic.js +2 -1
  59. package/build/src/objects/rename/renamer_helper.js +2 -2
  60. package/build/src/position.js +1 -17
  61. package/build/src/pretty_printer/indent.js +3 -3
  62. package/build/src/pretty_printer/pretty_printer.js +2 -2
  63. package/build/src/registry.js +1 -1
  64. package/build/src/rules/downport.js +2 -1
  65. package/build/src/rules/expand_macros.js +2 -2
  66. package/build/src/rules/indentation.js +2 -1
  67. package/build/src/rules/keyword_case.js +2 -2
  68. package/build/src/rules/line_break_multiple_parameters.js +2 -2
  69. package/build/src/rules/many_parentheses.js +9 -3
  70. package/build/src/rules/max_one_statement.js +2 -2
  71. package/build/src/rules/unused_variables.js +8 -0
  72. package/build/src/virtual_position.js +21 -0
  73. package/package.json +3 -3
@@ -1,20 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StringTemplateMiddle = exports.StringTemplateEnd = exports.StringTemplateBegin = exports.StringTemplate = exports.StringToken = void 0;
4
- const _token_1 = require("./_token");
5
- class StringToken extends _token_1.Token {
3
+ exports.StringToken = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StringToken extends abstract_token_1.AbstractToken {
6
6
  }
7
7
  exports.StringToken = StringToken;
8
- class StringTemplate extends _token_1.Token {
9
- }
10
- exports.StringTemplate = StringTemplate;
11
- class StringTemplateBegin extends _token_1.Token {
12
- }
13
- exports.StringTemplateBegin = StringTemplateBegin;
14
- class StringTemplateEnd extends _token_1.Token {
15
- }
16
- exports.StringTemplateEnd = StringTemplateEnd;
17
- class StringTemplateMiddle extends _token_1.Token {
18
- }
19
- exports.StringTemplateMiddle = StringTemplateMiddle;
20
8
  //# sourceMappingURL=string.js.map
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringTemplate = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StringTemplate extends abstract_token_1.AbstractToken {
6
+ }
7
+ exports.StringTemplate = StringTemplate;
8
+ //# sourceMappingURL=string_template.js.map
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringTemplateBegin = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StringTemplateBegin extends abstract_token_1.AbstractToken {
6
+ }
7
+ exports.StringTemplateBegin = StringTemplateBegin;
8
+ //# sourceMappingURL=string_template_begin.js.map
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringTemplateEnd = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StringTemplateEnd extends abstract_token_1.AbstractToken {
6
+ }
7
+ exports.StringTemplateEnd = StringTemplateEnd;
8
+ //# sourceMappingURL=string_template_end.js.map
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringTemplateMiddle = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class StringTemplateMiddle extends abstract_token_1.AbstractToken {
6
+ }
7
+ exports.StringTemplateMiddle = StringTemplateMiddle;
8
+ //# sourceMappingURL=string_template_middle.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WAt = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WAt extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " @";
8
+ }
9
+ }
10
+ exports.WAt = WAt;
11
+ //# sourceMappingURL=wat.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WAtW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WAtW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " @ ";
8
+ }
9
+ }
10
+ exports.WAtW = WAtW;
11
+ //# sourceMappingURL=watw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WBracketLeft = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WBracketLeft extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " [";
8
+ }
9
+ }
10
+ exports.WBracketLeft = WBracketLeft;
11
+ //# sourceMappingURL=wbracket_left.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WBracketLeftW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WBracketLeftW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " [ ";
8
+ }
9
+ }
10
+ exports.WBracketLeftW = WBracketLeftW;
11
+ //# sourceMappingURL=wbracket_leftw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WBracketRight = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WBracketRight extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " ]";
8
+ }
9
+ }
10
+ exports.WBracketRight = WBracketRight;
11
+ //# sourceMappingURL=wbracket_right.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WBracketRightW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WBracketRightW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " ] ";
8
+ }
9
+ }
10
+ exports.WBracketRightW = WBracketRightW;
11
+ //# sourceMappingURL=wbracket_rightw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WDash = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WDash extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " -";
8
+ }
9
+ }
10
+ exports.WDash = WDash;
11
+ //# sourceMappingURL=wdash.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WDashW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WDashW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " - ";
8
+ }
9
+ }
10
+ exports.WDashW = WDashW;
11
+ //# sourceMappingURL=wdashw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WInstanceArrow = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WInstanceArrow extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " ->";
8
+ }
9
+ }
10
+ exports.WInstanceArrow = WInstanceArrow;
11
+ //# sourceMappingURL=winstance_arrow.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WInstanceArrowW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WInstanceArrowW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " -> ";
8
+ }
9
+ }
10
+ exports.WInstanceArrowW = WInstanceArrowW;
11
+ //# sourceMappingURL=winstance_arroww.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WParenLeft = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WParenLeft extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " (";
8
+ }
9
+ }
10
+ exports.WParenLeft = WParenLeft;
11
+ //# sourceMappingURL=wparen_left.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WParenLeftW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WParenLeftW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " ( ";
8
+ }
9
+ }
10
+ exports.WParenLeftW = WParenLeftW;
11
+ //# sourceMappingURL=wparen_leftw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WParenRight = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WParenRight extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " )";
8
+ }
9
+ }
10
+ exports.WParenRight = WParenRight;
11
+ //# sourceMappingURL=wparen_right.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WParenRightW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WParenRightW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " ) ";
8
+ }
9
+ }
10
+ exports.WParenRightW = WParenRightW;
11
+ //# sourceMappingURL=wparen_rightw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WPlus = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WPlus extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " +";
8
+ }
9
+ }
10
+ exports.WPlus = WPlus;
11
+ //# sourceMappingURL=wplus.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WPlusW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WPlusW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " + ";
8
+ }
9
+ }
10
+ exports.WPlusW = WPlusW;
11
+ //# sourceMappingURL=wplusw.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WStaticArrow = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WStaticArrow extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " =>";
8
+ }
9
+ }
10
+ exports.WStaticArrow = WStaticArrow;
11
+ //# sourceMappingURL=wstatic_arrow.js.map
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WStaticArrowW = void 0;
4
+ const abstract_token_1 = require("./abstract_token");
5
+ class WStaticArrowW extends abstract_token_1.AbstractToken {
6
+ static railroad() {
7
+ return " => ";
8
+ }
9
+ }
10
+ exports.WStaticArrowW = WStaticArrowW;
11
+ //# sourceMappingURL=wstatic_arroww.js.map
@@ -10,7 +10,7 @@ const token_node_1 = require("../nodes/token_node");
10
10
  const statement_parser_1 = require("./statement_parser");
11
11
  const memory_file_1 = require("../../files/memory_file");
12
12
  const lexer_1 = require("../1_lexer/lexer");
13
- const position_1 = require("../../position");
13
+ const virtual_position_1 = require("../../virtual_position");
14
14
  class Macros {
15
15
  constructor(globalMacros) {
16
16
  this.macros = {};
@@ -149,8 +149,8 @@ class ExpandMacros {
149
149
  }
150
150
  // argh, macros is a nightmare
151
151
  let end = now.getStart();
152
- if (end instanceof position_1.VirtualPosition) {
153
- end = new position_1.VirtualPosition(end, end.vrow, end.vcol + now.getStr().length);
152
+ if (end instanceof virtual_position_1.VirtualPosition) {
153
+ end = new virtual_position_1.VirtualPosition(end, end.vrow, end.vcol + now.getStr().length);
154
154
  }
155
155
  else {
156
156
  end = now.getEnd();
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SQLIntoList = void 0;
4
4
  const combi_1 = require("../combi");
5
5
  const _1 = require(".");
6
- const paren_left_1 = require("../../1_lexer/tokens/paren_left");
6
+ const wparen_leftw_1 = require("../../1_lexer/tokens/wparen_leftw");
7
+ const wparen_left_1 = require("../../1_lexer/tokens/wparen_left");
7
8
  class SQLIntoList extends combi_1.Expression {
8
9
  getRunnable() {
9
- const intoList = (0, combi_1.seq)((0, combi_1.altPrio)((0, combi_1.tok)(paren_left_1.WParenLeft), (0, combi_1.tok)(paren_left_1.WParenLeftW)), (0, combi_1.starPrio)((0, combi_1.seq)(_1.SQLTarget, ",")), _1.SQLTarget, ")");
10
+ const intoList = (0, combi_1.seq)((0, combi_1.altPrio)((0, combi_1.tok)(wparen_left_1.WParenLeft), (0, combi_1.tok)(wparen_leftw_1.WParenLeftW)), (0, combi_1.starPrio)((0, combi_1.seq)(_1.SQLTarget, ",")), _1.SQLTarget, ")");
10
11
  return (0, combi_1.seq)("INTO", intoList);
11
12
  }
12
13
  }
@@ -7,6 +7,10 @@ const expression_node_1 = require("./expression_node");
7
7
  const comment_1 = require("../1_lexer/tokens/comment");
8
8
  const pragma_1 = require("../1_lexer/tokens/pragma");
9
9
  const string_1 = require("../1_lexer/tokens/string");
10
+ const string_template_middle_1 = require("../1_lexer/tokens/string_template_middle");
11
+ const string_template_end_1 = require("../1_lexer/tokens/string_template_end");
12
+ const string_template_begin_1 = require("../1_lexer/tokens/string_template_begin");
13
+ const string_template_1 = require("../1_lexer/tokens/string_template");
10
14
  class StatementNode extends _abstract_node_1.AbstractNode {
11
15
  constructor(statement, colon, pragmas) {
12
16
  super();
@@ -115,10 +119,10 @@ class StatementNode extends _abstract_node_1.AbstractNode {
115
119
  for (const token of this.getTokens()) {
116
120
  if (token instanceof comment_1.Comment
117
121
  || token instanceof string_1.StringToken
118
- || token instanceof string_1.StringTemplate
119
- || token instanceof string_1.StringTemplateBegin
120
- || token instanceof string_1.StringTemplateMiddle
121
- || token instanceof string_1.StringTemplateEnd) {
122
+ || token instanceof string_template_1.StringTemplate
123
+ || token instanceof string_template_begin_1.StringTemplateBegin
124
+ || token instanceof string_template_middle_1.StringTemplateMiddle
125
+ || token instanceof string_template_end_1.StringTemplateEnd) {
122
126
  continue;
123
127
  }
124
128
  if (str === "") {
@@ -251,10 +255,10 @@ class StatementNode extends _abstract_node_1.AbstractNode {
251
255
  for (const token of this.getTokens()) {
252
256
  if (token instanceof comment_1.Comment
253
257
  || token instanceof string_1.StringToken
254
- || token instanceof string_1.StringTemplate
255
- || token instanceof string_1.StringTemplateBegin
256
- || token instanceof string_1.StringTemplateMiddle
257
- || token instanceof string_1.StringTemplateEnd) {
258
+ || token instanceof string_template_1.StringTemplate
259
+ || token instanceof string_template_begin_1.StringTemplateBegin
260
+ || token instanceof string_template_middle_1.StringTemplateMiddle
261
+ || token instanceof string_template_end_1.StringTemplateEnd) {
258
262
  continue;
259
263
  }
260
264
  if (prev && token.getStr().toUpperCase() === second && (prev === null || prev === void 0 ? void 0 : prev.getStr().toUpperCase()) === first.toUpperCase()) {
@@ -46,6 +46,8 @@ class ClassDefinition extends _identifier_1.Identifier {
46
46
  this.testing = concat.includes(" FOR TESTING");
47
47
  this.sharedMemory = concat.includes(" SHARED MEMORY ENABLED");
48
48
  this.abstract = (cdef === null || cdef === void 0 ? void 0 : cdef.findDirectTokenByText("ABSTRACT")) !== undefined;
49
+ // perform checks after everything has been initialized
50
+ this.checkMethodsFromSuperClasses(scope);
49
51
  }
50
52
  getFriends() {
51
53
  return this.friends;
@@ -98,6 +100,29 @@ class ClassDefinition extends _identifier_1.Identifier {
98
100
  const name = token === null || token === void 0 ? void 0 : token.getStr();
99
101
  return name;
100
102
  }
103
+ checkMethodsFromSuperClasses(scope) {
104
+ var _a;
105
+ let sup = this.getSuperClass();
106
+ const names = new Set();
107
+ while (sup !== undefined) {
108
+ const cdef = scope.findClassDefinition(sup);
109
+ for (const m of ((_a = cdef === null || cdef === void 0 ? void 0 : cdef.getMethodDefinitions()) === null || _a === void 0 ? void 0 : _a.getAll()) || []) {
110
+ if (m.getVisibility() === visibility_1.Visibility.Private) {
111
+ continue;
112
+ }
113
+ else if (m.getName().toUpperCase() === "CONSTRUCTOR") {
114
+ continue;
115
+ }
116
+ names.add(m.getName().toUpperCase());
117
+ }
118
+ sup = cdef === null || cdef === void 0 ? void 0 : cdef.getSuperClass();
119
+ }
120
+ for (const m of this.getMethodDefinitions().getAll()) {
121
+ if (names.has(m.getName().toUpperCase()) && m.isRedefinition() === false) {
122
+ throw new Error(`Method ${m.getName().toUpperCase()} already declared in superclass`);
123
+ }
124
+ }
125
+ }
101
126
  findFriends(def, filename, scope) {
102
127
  var _a;
103
128
  const result = [];
@@ -12,6 +12,9 @@ const event_definition_1 = require("./event_definition");
12
12
  const method_definitions_1 = require("./method_definitions");
13
13
  const aliases_1 = require("./aliases");
14
14
  const _reference_1 = require("../5_syntax/_reference");
15
+ const class_constant_1 = require("./class_constant");
16
+ const _typed_identifier_1 = require("./_typed_identifier");
17
+ const tokens_1 = require("../1_lexer/tokens");
15
18
  class InterfaceDefinition extends _identifier_1.Identifier {
16
19
  constructor(node, filename, scope) {
17
20
  if (!(node.get() instanceof Structures.Interface)) {
@@ -24,7 +27,7 @@ class InterfaceDefinition extends _identifier_1.Identifier {
24
27
  this.events = [];
25
28
  this.implementing = [];
26
29
  scope.push(_scope_type_1.ScopeType.Interface, name.getStr(), node.getFirstToken().getStart(), filename);
27
- this.parse(scope);
30
+ this.parse(scope, filename);
28
31
  scope.pop(node.getLastToken().getEnd());
29
32
  }
30
33
  getSuperClass() {
@@ -55,7 +58,7 @@ class InterfaceDefinition extends _identifier_1.Identifier {
55
58
  return this.methodDefinitions;
56
59
  }
57
60
  /////////////////
58
- parse(scope) {
61
+ parse(scope, filename) {
59
62
  var _a;
60
63
  // todo, proper sequencing, the statements should be processed line by line
61
64
  this.attributes = new class_attributes_1.Attributes(this.node, this.filename, scope);
@@ -66,9 +69,18 @@ class InterfaceDefinition extends _identifier_1.Identifier {
66
69
  const [objName, fieldName] = a.getComponent().split("~");
67
70
  const idef = scope.findInterfaceDefinition(objName);
68
71
  if (idef) {
69
- const found = idef.getTypeDefinitions().getByName(fieldName);
70
- if (found) {
71
- scope.addTypeNamed(a.getName(), found);
72
+ const foundType = idef.getTypeDefinitions().getByName(fieldName);
73
+ if (foundType) {
74
+ scope.addTypeNamed(a.getName(), foundType);
75
+ }
76
+ else {
77
+ const foundField = idef.getAttributes().findByName(fieldName);
78
+ if (foundField && foundField instanceof class_constant_1.ClassConstant) {
79
+ const token = new tokens_1.Identifier(a.getStart(), a.getName());
80
+ const id = new _typed_identifier_1.TypedIdentifier(token, filename, foundField.getType());
81
+ const constant = new class_constant_1.ClassConstant(id, visibility_1.Visibility.Public, foundField.getValue());
82
+ scope.addIdentifier(constant);
83
+ }
72
84
  }
73
85
  }
74
86
  }
@@ -39,8 +39,8 @@ const _current_scope_1 = require("./abap/5_syntax/_current_scope");
39
39
  Object.defineProperty(exports, "CurrentScope", { enumerable: true, get: function () { return _current_scope_1.CurrentScope; } });
40
40
  const Objects = require("./objects");
41
41
  exports.Objects = Objects;
42
- const _token_1 = require("./abap/1_lexer/tokens/_token");
43
- Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return _token_1.Token; } });
42
+ const abstract_token_1 = require("./abap/1_lexer/tokens/abstract_token");
43
+ Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return abstract_token_1.AbstractToken; } });
44
44
  const Statements = require("./abap/2_statements/statements");
45
45
  exports.Statements = Statements;
46
46
  const Expressions = require("./abap/2_statements/expressions");
@@ -59,7 +59,8 @@ const Tokens = require("./abap/1_lexer/tokens");
59
59
  exports.Tokens = Tokens;
60
60
  const position_1 = require("./position");
61
61
  Object.defineProperty(exports, "Position", { enumerable: true, get: function () { return position_1.Position; } });
62
- Object.defineProperty(exports, "VirtualPosition", { enumerable: true, get: function () { return position_1.VirtualPosition; } });
62
+ const virtual_position_1 = require("./virtual_position");
63
+ Object.defineProperty(exports, "VirtualPosition", { enumerable: true, get: function () { return virtual_position_1.VirtualPosition; } });
63
64
  const _abstract_file_1 = require("./files/_abstract_file");
64
65
  Object.defineProperty(exports, "AbstractFile", { enumerable: true, get: function () { return _abstract_file_1.AbstractFile; } });
65
66
  const pretty_printer_1 = require("./pretty_printer/pretty_printer");
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Issue = void 0;
4
4
  const position_1 = require("./position");
5
+ const virtual_position_1 = require("./virtual_position");
5
6
  const severity_1 = require("./severity");
6
7
  class Issue {
7
8
  //////////////////////////
@@ -87,7 +88,7 @@ class Issue {
87
88
  }
88
89
  constructor(data) {
89
90
  this.data = data;
90
- if (this.data.start instanceof position_1.VirtualPosition) {
91
+ if (this.data.start instanceof virtual_position_1.VirtualPosition) {
91
92
  // no quick fixes inside macros
92
93
  this.data.fix = undefined;
93
94
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SemanticHighlighting = void 0;
4
4
  const LServer = require("vscode-languageserver-types");
5
5
  const position_1 = require("../position");
6
+ const virtual_position_1 = require("../virtual_position");
6
7
  const tokens_1 = require("../abap/1_lexer/tokens");
7
8
  const nodes_1 = require("../abap/nodes");
8
9
  const Statements = require("../abap/2_statements/statements");
@@ -46,7 +47,7 @@ class SemanticHighlighting {
46
47
  const rangeEndPosition = new position_1.Position(range.end.line + 1, range.end.character + 1);
47
48
  const tokens = [];
48
49
  for (const s of file.getStatements()) {
49
- if (s.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
50
+ if (s.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
50
51
  continue;
51
52
  }
52
53
  else if (s.getFirstToken().getStart().isAfter(rangeEndPosition)) {
@@ -5,7 +5,7 @@ const vscode_languageserver_types_1 = require("vscode-languageserver-types");
5
5
  const __1 = require("../..");
6
6
  const syntax_1 = require("../../abap/5_syntax/syntax");
7
7
  const _scope_type_1 = require("../../abap/5_syntax/_scope_type");
8
- const position_1 = require("../../position");
8
+ const virtual_position_1 = require("../../virtual_position");
9
9
  const _abap_object_1 = require("../_abap_object");
10
10
  class RenamerHelper {
11
11
  constructor(reg) {
@@ -149,7 +149,7 @@ class RenamerHelper {
149
149
  for (const r of node.getData().references) {
150
150
  if (((_a = r.resolved) === null || _a === void 0 ? void 0 : _a.equals(identifier))
151
151
  && r.referenceType !== __1.ReferenceType.InferredType
152
- && !(r.position.getStart() instanceof position_1.VirtualPosition)) {
152
+ && !(r.position.getStart() instanceof virtual_position_1.VirtualPosition)) {
153
153
  ret.push(r.position);
154
154
  }
155
155
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VirtualPosition = exports.Position = void 0;
3
+ exports.Position = void 0;
4
4
  // first position is (1,1)
5
5
  class Position {
6
6
  constructor(row, col) {
@@ -27,20 +27,4 @@ class Position {
27
27
  }
28
28
  }
29
29
  exports.Position = Position;
30
- /** used for macro calls */
31
- class VirtualPosition extends Position {
32
- constructor(virtual, row, col) {
33
- super(virtual.getRow(), virtual.getCol());
34
- this.vrow = row;
35
- this.vcol = col;
36
- }
37
- equals(p) {
38
- if (!(p instanceof VirtualPosition)) {
39
- return false;
40
- }
41
- const casted = p;
42
- return super.equals(this) && this.vrow === casted.vrow && this.vcol === casted.vcol;
43
- }
44
- }
45
- exports.VirtualPosition = VirtualPosition;
46
30
  //# sourceMappingURL=position.js.map
@@ -4,7 +4,7 @@ exports.Indent = void 0;
4
4
  const Statements = require("../abap/2_statements/statements");
5
5
  const Expressions = require("../abap/2_statements/expressions");
6
6
  const _statement_1 = require("../abap/2_statements/statements/_statement");
7
- const position_1 = require("../position");
7
+ const virtual_position_1 = require("../virtual_position");
8
8
  // todo, will break if there is multiple statements per line?
9
9
  class Indent {
10
10
  constructor(options) {
@@ -16,7 +16,7 @@ class Indent {
16
16
  const expected = this.getExpectedIndents(original);
17
17
  const lines = modified.split("\n");
18
18
  for (const statement of statements) {
19
- if (statement.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
19
+ if (statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
20
20
  continue; // macro contents
21
21
  }
22
22
  const exp = expected.shift();
@@ -40,7 +40,7 @@ class Indent {
40
40
  let parentIsEvent = false;
41
41
  let previousStatement = undefined;
42
42
  for (const statement of file.getStatements()) {
43
- if (statement.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
43
+ if (statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
44
44
  continue; // skip macro contents
45
45
  }
46
46
  const type = statement.get();
@@ -4,7 +4,7 @@ exports.PrettyPrinter = void 0;
4
4
  const _statement_1 = require("../abap/2_statements/statements/_statement");
5
5
  const fix_keyword_case_1 = require("./fix_keyword_case");
6
6
  const indent_1 = require("./indent");
7
- const position_1 = require("../position");
7
+ const virtual_position_1 = require("../virtual_position");
8
8
  const indentation_1 = require("../rules/indentation");
9
9
  class PrettyPrinter {
10
10
  constructor(file, config) {
@@ -23,7 +23,7 @@ class PrettyPrinter {
23
23
  if (statement.get() instanceof _statement_1.Unknown
24
24
  || statement.get() instanceof _statement_1.MacroContent
25
25
  || statement.get() instanceof _statement_1.MacroCall
26
- || statement.getFirstToken().getStart() instanceof position_1.VirtualPosition
26
+ || statement.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition
27
27
  || statement.get() instanceof _statement_1.Comment) {
28
28
  continue;
29
29
  }
@@ -65,7 +65,7 @@ class Registry {
65
65
  }
66
66
  static abaplintVersion() {
67
67
  // magic, see build script "version.sh"
68
- return "2.102.67";
68
+ return "2.102.69";
69
69
  }
70
70
  getDDICReferences() {
71
71
  return this.ddicReferences;
@@ -12,6 +12,7 @@ const _statement_1 = require("../abap/2_statements/statements/_statement");
12
12
  const nodes_1 = require("../abap/nodes");
13
13
  const edit_helper_1 = require("../edit_helper");
14
14
  const position_1 = require("../position");
15
+ const virtual_position_1 = require("../virtual_position");
15
16
  const _abap_object_1 = require("../objects/_abap_object");
16
17
  const version_1 = require("../version");
17
18
  const registry_1 = require("../registry");
@@ -324,7 +325,7 @@ Make sure to test the downported code, it might not always be completely correct
324
325
  }
325
326
  /** applies one rule at a time, multiple iterations are required to transform complex statements */
326
327
  checkStatement(low, high, lowFile, highSyntax, highFile) {
327
- if (low.getFirstToken().getStart() instanceof position_1.VirtualPosition) {
328
+ if (low.getFirstToken().getStart() instanceof virtual_position_1.VirtualPosition) {
328
329
  return undefined;
329
330
  }
330
331
  // downport XSDBOOL() early, as it is valid 702 syntax