This is an automated email from the ASF dual-hosted git repository.
tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new e952835b100 kie-issues#1865: On the DMN Editor, the identifiers rename
is not being applied to Inputs in Decision Tables. (#2975)
e952835b100 is described below
commit e952835b1005425b01b29f7d181ffa14af70597e
Author: Daniel José dos Santos <[email protected]>
AuthorDate: Sat Mar 8 03:13:52 2025 -0300
kie-issues#1865: On the DMN Editor, the identifiers rename is not being
applied to Inputs in Decision Tables. (#2975)
---
.../src/parser/IdentifiersRepository.ts | 88 +++++++++++++---------
1 file changed, 54 insertions(+), 34 deletions(-)
diff --git
a/packages/dmn-feel-antlr4-parser/src/parser/IdentifiersRepository.ts
b/packages/dmn-feel-antlr4-parser/src/parser/IdentifiersRepository.ts
index a2d8b7f7067..8ee1ea69e3f 100644
--- a/packages/dmn-feel-antlr4-parser/src/parser/IdentifiersRepository.ts
+++ b/packages/dmn-feel-antlr4-parser/src/parser/IdentifiersRepository.ts
@@ -33,6 +33,7 @@ import {
DMN15__tFor,
DMN15__tFunctionDefinition,
DMN15__tInformationRequirement,
+ DMN15__tInputClause,
DMN15__tInputData,
DMN15__tInvocation,
DMN15__tItemDefinition,
@@ -209,9 +210,9 @@ export class IdentifiersRepository {
}
private loadIdentifiersFromInputData(drg: DmnInputData) {
- this.addIdentifier({
+ this.addIdentifierContext({
uuid: drg["@_id"] ?? "",
- name: drg["@_name"],
+ identifierDefinedByTheContext: drg["@_name"],
kind: FeelSyntacticSymbolNature.GlobalVariable,
parentContext: undefined,
typeRef: drg.variable?.["@_typeRef"],
@@ -231,9 +232,9 @@ export class IdentifiersRepository {
}
private loadIdentifiersFromDecisionService(drg: DmnDecisionService) {
- this.addIdentifier({
+ this.addIdentifierContext({
uuid: drg["@_id"] ?? "",
- name: drg["@_name"],
+ identifierDefinedByTheContext: drg["@_name"],
kind: FeelSyntacticSymbolNature.Invocable,
parentContext: undefined,
typeRef: drg.variable?.["@_typeRef"],
@@ -253,9 +254,9 @@ export class IdentifiersRepository {
}
private loadIdentifiersFromBkm(drg: DmnBusinessKnowledgeModel) {
- const parent = this.addIdentifier({
+ const parent = this.addIdentifierContext({
uuid: drg["@_id"] ?? "",
- name: drg["@_name"],
+ identifierDefinedByTheContext: drg["@_name"],
kind: FeelSyntacticSymbolNature.Invocable,
parentContext: undefined,
typeRef: drg.variable?.["@_typeRef"],
@@ -278,9 +279,9 @@ export class IdentifiersRepository {
if (drg.encapsulatedLogic.formalParameter) {
for (const parameter of drg.encapsulatedLogic.formalParameter) {
- parentElement = this.addIdentifier({
+ parentElement = this.addIdentifierContext({
uuid: parameter["@_id"] ?? "",
- name: parameter["@_name"] ?? "<parameter>",
+ identifierDefinedByTheContext: parameter["@_name"] ??
"<parameter>",
kind: FeelSyntacticSymbolNature.Parameter,
parentContext: parentElement,
applyValueToSource: (value) => {
@@ -297,9 +298,9 @@ export class IdentifiersRepository {
}
private loadIdentifiersFromDecision(drg: DmnDecisionNode) {
- const parent: IdentifierContext = this.addIdentifier({
+ const parent: IdentifierContext = this.addIdentifierContext({
uuid: drg["@_id"] ?? "",
- name: drg["@_name"],
+ identifierDefinedByTheContext: drg["@_name"],
kind: FeelSyntacticSymbolNature.InvisibleVariables,
parentContext: undefined,
typeRef: drg.variable?.["@_typeRef"],
@@ -334,9 +335,9 @@ export class IdentifiersRepository {
}
}
- private addIdentifier(args: {
+ private addIdentifierContext(args: {
uuid: string;
- name: string;
+ identifierDefinedByTheContext: string;
kind: FeelSyntacticSymbolNature;
parentContext?: IdentifierContext;
typeRef?: string;
@@ -346,7 +347,7 @@ export class IdentifiersRepository {
}) {
const variableContext = this.createIdentifierContext(
this.buildIdentifierUuid(args.uuid),
- this.buildName(args.name),
+ this.buildName(args.identifierDefinedByTheContext),
args.kind,
args.parentContext,
args.typeRef,
@@ -369,7 +370,7 @@ export class IdentifiersRepository {
private createIdentifierContext(
uuid: string,
- name: string,
+ identifierDefinedByTheContext: string,
variableType: FeelSyntacticSymbolNature,
parent: IdentifierContext | undefined,
typeRef: string | undefined,
@@ -384,7 +385,7 @@ export class IdentifiersRepository {
inputIdentifiers: new Array<string>(),
allowDynamicVariables: allowDynamicVariables,
identifier: {
- value: name,
+ value: identifierDefinedByTheContext,
feelSyntacticSymbolNature: variableType,
typeRef: this.getTypeRef(typeRef),
expressionsThatUseTheIdentifier: new Map<string, Expression>(),
@@ -464,9 +465,9 @@ export class IdentifiersRepository {
const id = element["@_id"] ?? "";
const expression = new Expression(id, element);
this._expressionsIndexedByUuid.set(id, expression);
- this.addIdentifier({
+ this.addIdentifierContext({
uuid: id,
- name: "",
+ identifierDefinedByTheContext: "",
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parent,
});
@@ -492,9 +493,9 @@ export class IdentifiersRepository {
}
private addContextEntry(parentNode: IdentifierContext, contextEntry:
DmnContextEntry) {
- const variableNode = this.addIdentifier({
+ const variableNode = this.addIdentifierContext({
uuid: contextEntry.variable?.["@_id"] ?? "",
- name: contextEntry.variable?.["@_name"] ?? "",
+ identifierDefinedByTheContext: contextEntry.variable?.["@_name"] ?? "",
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parentNode,
typeRef: contextEntry.variable?.["@_typeRef"],
@@ -554,9 +555,9 @@ export class IdentifiersRepository {
if (element.formalParameter) {
for (const parameter of element.formalParameter) {
- parentElement = this.addIdentifier({
+ parentElement = this.addIdentifierContext({
uuid: parameter["@_id"] ?? "",
- name: parameter["@_name"] ?? "<parameter>",
+ identifierDefinedByTheContext: parameter["@_name"] ?? "<parameter>",
kind: FeelSyntacticSymbolNature.Parameter,
parentContext: parentElement,
applyValueToSource: (value) => {
@@ -635,9 +636,9 @@ export class IdentifiersRepository {
if (expression.in.expression) {
type = expression.in.expression["@_typeRef"];
}
- return this.addIdentifier({
+ return this.addIdentifierContext({
uuid: expression["@_id"] ?? "",
- name: "item",
+ identifierDefinedByTheContext: "item",
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parent,
typeRef: type,
@@ -655,9 +656,9 @@ export class IdentifiersRepository {
if (expression.in.expression) {
type = expression.in.expression["@_typeRef"];
}
- localParent = this.addIdentifier({
+ localParent = this.addIdentifierContext({
uuid: expression["@_id"] ?? "",
- name: expression["@_iteratorVariable"],
+ identifierDefinedByTheContext: expression["@_iteratorVariable"],
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parent,
typeRef: type,
@@ -759,9 +760,9 @@ export class IdentifiersRepository {
}
private addDecisionTableEntryNode(parent: IdentifierContext, entryNode:
ExpressionSource) {
- const ruleInputElementNode = this.addIdentifier({
+ const ruleInputElementNode = this.addIdentifierContext({
uuid: entryNode["@_id"] ?? "",
- name: "",
+ identifierDefinedByTheContext: "",
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parent,
});
@@ -769,28 +770,47 @@ export class IdentifiersRepository {
this.addExpression(parent, entryNode);
}
+ private addDecisionTableInputEntryNode(parent: IdentifierContext,
inputEntryNode: DMN15__tInputClause) {
+ const identifierContext = this.addIdentifierContext({
+ uuid: inputEntryNode["@_id"] ?? "",
+ identifierDefinedByTheContext: "",
+ kind: FeelSyntacticSymbolNature.LocalVariable,
+ parentContext: parent,
+ });
+ parent.children.set(identifierContext.uuid, identifierContext);
+
+ // Notice that the expression of the inputEntryNode it is in an inner
element, NOT in the inputEntryNode by itself.
+ this.addExpression(parent, inputEntryNode.inputExpression);
+ }
+
private addDecisionTable(parent: IdentifierContext, decisionTable:
DmnDecisionTable) {
- const variableNode = this.addIdentifier({
+ const addedIdentifierContext = this.addIdentifierContext({
uuid: decisionTable["@_id"] ?? "",
- name: "",
+ identifierDefinedByTheContext: "",
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parent,
});
- parent.children.set(variableNode.uuid, variableNode);
+ parent.children.set(addedIdentifierContext.uuid, addedIdentifierContext);
+
+ // We need to create Identifier Context for each cell of the Decision
Table to be able to have
+ // autocomplete and refactor inside of those, otherwise the parser will
not find the context to get the identifiers.
if (decisionTable.rule) {
for (const ruleElement of decisionTable.rule) {
ruleElement.inputEntry?.forEach((inputElement) =>
this.addDecisionTableEntryNode(parent, inputElement));
ruleElement.outputEntry?.forEach((outputElement) =>
this.addDecisionTableEntryNode(parent, outputElement));
}
}
+
+ // The Decision Table inputs also have expressions and its own contexts.
if (decisionTable.input) {
for (const inputClause of decisionTable.input) {
- this.addDecisionTableEntryNode(parent, inputClause);
+ this.addDecisionTableInputEntryNode(addedIdentifierContext,
inputClause);
}
}
- this.addIdentifier({
- uuid: variableNode.uuid,
- name: "",
+
+ this.addIdentifierContext({
+ uuid: addedIdentifierContext.uuid,
+ identifierDefinedByTheContext: "",
kind: FeelSyntacticSymbolNature.LocalVariable,
parentContext: parent,
applyTypeRefToSource: (value) => {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]