Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JNG-5995 Update eclipse #273

Merged
merged 12 commits into from
Nov 27, 2024
Merged

Conversation

robertcsakany
Copy link
Member

@robertcsakany robertcsakany commented Nov 2, 2024

TaskJNG-5995 Update eclipse to 2024-09

JNG-5995 Update eclipse

@robertcsakany robertcsakany force-pushed the feature/JNG-5995_UpdateEclipse branch from 63b9c34 to 7f9c37b Compare November 19, 2024 20:36
@robertcsakany robertcsakany force-pushed the feature/JNG-5995_UpdateEclipse branch from 7f9c37b to 10b6a38 Compare November 25, 2024 03:28
@robertcsakany robertcsakany marked this pull request as ready for review November 26, 2024 01:22
@robertcsakany robertcsakany self-assigned this Nov 26, 2024
Copy link

coderabbitai bot commented Nov 26, 2024

Walkthrough

The changes involve multiple updates across various files in the project, focusing on modifying method signatures, enhancing error handling, and improving the management of positional attributes in UI components. Notably, the introduction of new parameters for maximum sizes in the workflow and the restructuring of dependency management in the pom.xml file are significant. Overall, the changes aim to streamline functionality, enhance configurability, and maintain code clarity without altering existing core logic.

Changes

File Change Summary
judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/equivalentDiscriminated.eol Updated resource reference from JSL.target.resource to JSL.resource. Method signature modified to remove id parameter.
judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/entityDeclaration.eol Changed return type of getInheritedMembers from Sequence<EntityMemberDeclaration> to Sequence.
judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/jslToPsm.etl Modified resource handling and commented out ID-setting loop for cardinalities.
judo-tatami-jsl-jsl2psm/src/main/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/Jsl2Psm.java Added useCache field to Jsl2PsmParameter. Updated context builders to include useCache.
judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/AbstractTest.java Updated transform method to include .parallel(true) and .useCache(true).
judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/TransformationParametersTest.java Updated conditions for testName to be dynamically retrieved.
judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/actor/JslModel2PsmActorTest.java Removed string argument from JslParser.getModelFromFiles and updated assertCrudOperation to use a builder pattern.
judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/actor/JslModel2PsmAnonymousActorTest.java Simplified model retrieval by removing hardcoded string.
judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedDeclaration2PrimitiveAccessorTest.java Removed testName variable and simplified input to JslParser.getModelFromStrings.
judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityDeclaration2PsmEntityTypeTest.java Removed testName variable and updated model string inputs.
judo-tatami-jsl-jsl2ui/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol Updated getPos implementation to use __pos.get(self).
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/jslToUi.etl Introduced __pos variable for position management.
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/application/actorGroupDeclaration.etl Updated position handling for NavigationItem using __pos.put(t, ...).
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuLinkDeclaration.etl Modified position handling for NavigationItem using __pos.put(t, ...).
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclaration.etl Changed position assignment logic to use __pos.put(t, 0).
judo-tatami-jsl-workflow/src/main/java/hu/blackbelt/judo/tatami/jsl/workflow/AbstractTatamiPipelineWorkflow.java Added tableNameMaxSize and columnMaxNameSize parameters to asm2RdbmsWorkParameter().
pom.xml Updated dependency versions and added new properties for logback and lombok.

Poem

In the code where rabbits play,
Changes hop in bright array.
With new paths and clearer signs,
Our workflow dances, brightly shines.
Dependencies now neatly align,
In this garden, all will be fine! 🐇✨

Warning

Rate limit exceeded

@robertcsakany has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 6 minutes and 50 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between b7c86a4 and b022333.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between b7c86a4 and b022333.

📒 Files selected for processing (1)
  • pom.xml (4 hunks)
🔇 Additional comments (5)
pom.xml (5)

55-56: LGTM: Latest stable versions added for logback and lombok.

The newly added version properties use the latest stable releases, which is good practice for dependency management.


58-58: LGTM: Core dependencies updated to latest stable versions.

The updates to SLF4J and Maven Surefire align with the Eclipse 2024-09 update objective and use the latest stable releases.

Also applies to: 60-60


90-90: LGTM: JaCoCo updated to latest stable version.

The update to JaCoCo 0.8.12 is appropriate as it's the latest stable version with full Java 17 support.


121-121: LGTM: Consistent usage of version properties.

The newly added version properties are properly referenced across all relevant dependencies and plugins, following Maven best practices for version management.

Also applies to: 133-133, 741-741


62-62: Verify compatibility of synchronized JUDO dependency updates.

All JUDO dependencies have been updated to versions built on 2024-11-26 specifically for the Eclipse update (JNG-5995). While the synchronized update is good practice, we should verify:

  1. These versions have been properly tested together
  2. There are no breaking changes in the ecosystem

Also applies to: 67-74, 76-76, 78-78, 80-82


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Outside diff range and nitpick comments (29)
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuLinkDeclaration.etl (2)

23-23: Consider adding bounds checking for indexOf operation

The position calculation using indexOf() assumes the element exists in the container's members. Consider adding error handling for cases where the element might not be found.

-            __pos.put(t, s.eContainer.members.indexOf(s));
+            var index = s.eContainer.members.indexOf(s);
+            if (index == -1) {
+                log.warn("MenuLinkNavigationItem: Unable to determine position for " + s.name);
+                index = 0;
+            }
+            __pos.put(t, index);

Also applies to: 27-27


23-23: Consider extracting position calculation to a helper operation

Since the position calculation logic is duplicated and might be used in other rules, consider extracting it to a reusable helper operation.

+ operation getElementPosition(element: Any): Integer {
+     var index = element.eContainer.members.indexOf(element);
+     if (index == -1) {
+         log.warn("Unable to determine position for " + element.name);
+         return 0;
+     }
+     return index;
+ }

  rule MenuLinkNavigationItem
      transform s: JSL!UIMenuLinkDeclaration
      to t : UI!ui::NavigationItem {
          // ... existing code ...
          if (s.eContainer.isKindOf(JSL!UIMenuGroupDeclaration)) {
              s.eContainer.equivalent("MenuItemGroup").items.add(t);
-             __pos.put(t, s.eContainer.members.indexOf(s));
+             __pos.put(t, getElementPosition(s));
          } else {
              var navigationController = rootMenu.equivalent("Application").navigationController;
              navigationController.items.add(t);
-             __pos.put(t, s.eContainer.members.indexOf(s));
+             __pos.put(t, getElementPosition(s));
          }

Also applies to: 27-27

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/application/actorGroupDeclaration.etl (2)

27-27: Consider adding position validation

The position is derived from indexOf() which could return -1 if the element isn't found. Consider adding validation to handle edge cases.

-            __pos.put(t, s.eContainer.members.indexOf(s));
+            var position = s.eContainer.members.indexOf(s);
+            if (position >= 0) {
+                __pos.put(t, position);
+            } else {
+                log.warn("Unable to determine position for menu item: " + s.name);
+            }

Also applies to: 31-31


Line range hint 18-20: Track commented-out hiddenBy implementation

There's commented-out code for hiddenBy functionality. If this is a planned feature or technical debt, it should be tracked properly.

Would you like me to create a GitHub issue to track this technical debt and implement the hiddenBy functionality?

judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/equivalentDiscriminated.eol (1)

Line range hint 2-4: Enhance error message clarity

The error message could be more structured and informative for debugging purposes.

-    throw "Transformation called in empty object: " + id + " / " + discriminator + " Transformation: " + transformation;		
+    throw "[EquivalentDiscriminated] Failed to transform undefined object:\n" +
+          "  - ID: " + id + "\n" +
+          "  - Discriminator: " + discriminator + "\n" +
+          "  - Transformation: " + transformation;
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewGroupDeclaration.etl (1)

20-20: Consider documenting the position management strategy

Since this is part of a larger change in position handling strategy, it would be helpful to document why this approach was chosen and any considerations for future maintainers.

Consider adding a comment above the line explaining:

+// Position management moved to centralized map to support Eclipse 2024-09 compatibility
 __pos.put(t, s.getPos());
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/jslToUi.etl (3)

45-45: LGTM! Good choice using ConcurrentMap for thread-safe position management.

The introduction of a centralized position management system using ConcurrentMap is a good architectural decision that ensures thread-safety.


74-79: Consider adding error handling for missing positions.

While the position assignment and sorting look correct, consider adding error handling similar to the Container section to ensure all navigation items have defined positions.

 for (navigationController : UI!ui::NavigationController in UI!ui::NavigationController.all()) {
+    var missingPos = false;
     for (item in navigationController.items) {
         item.~pos = __pos.get(item);
+        if (item.~pos.isUndefined()) {
+            missingPos = true;
+            log.error("Position is not defined: " + item.getId());
+        }
     }
+    if (missingPos) {
+        throw "Missing position parameter(s) under NavigationController";
+    }
     navigationController.items = navigationController.items.sortBy(e | e.~pos);
 }

81-86: Consider adding error handling for missing positions.

Similar to the NavigationController section, consider adding error handling to ensure all group items have defined positions.

 for (group : UI!ui::NavigationItem in UI!ui::NavigationItem.all()) {
+    var missingPos = false;
     for (item in group.items) {
         item.~pos = __pos.get(item);
+        if (item.~pos.isUndefined()) {
+            missingPos = true;
+            log.error("Position is not defined: " + item.getId());
+        }
     }
+    if (missingPos) {
+        throw "Missing position parameter(s) under NavigationItem";
+    }
     group.items = group.items.sortBy(e | e.~pos);
 }
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclarationForm.etl (1)

7-8: LGTM! Consider adding a comment explaining the position management.

The switch to using __pos map for position management is a good improvement for maintainability. Consider adding a brief comment explaining the purpose of this position management structure for better documentation.

+// Initialize position in the position management map if not already set
 if (__pos.get(t).isUndefined()) {
     __pos.put(t, 0);
 }
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclaration.etl (2)

28-28: Add undefined check for consistency.

The direct position assignment here differs from the pattern used in ViewPageContainer rule. Consider adding an undefined check for consistency:

-        __pos.put(t, 0);
+        if (__pos.get(t).isUndefined()) {
+            __pos.put(t, 0);
+        }

Line range hint 156-160: Consider addressing or removing commented code.

The commented block handling autoCloseOnSave suggests incomplete or planned functionality. If this feature is needed, consider implementing it. Otherwise, remove the commented code to maintain cleanliness.

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewWidgetDeclaration.etl (1)

Line range hint 71-86: Consider removing or documenting commented-out rules

There are several commented-out transformation rules (BooleanTypeCheckbox, EnumerationTypeRadio, StringTypeFormatted) that should either be:

  1. Removed if they are no longer needed
  2. Documented with a clear explanation if they are temporarily disabled
  3. Restored if they are still required

Keeping commented-out code without explanation can lead to maintenance issues and confusion.

Also applies to: 179-195, 284-299

judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/TransformationParametersTest.java (2)

71-91: Consider refactoring the repeated test name pattern.

The changes to use dynamic class names are good and make the code more maintainable. However, there's room for improvement in the structure.

Consider these improvements:

  1. Extract the test name generation to a helper method:
+ private String getTestMethodName(String methodName) {
+     return this.getClass().getSimpleName() + "." + methodName;
+ }
  1. Replace the if-else chain with a more maintainable pattern:
- if (testName.equals(this.getClass().getSimpleName() + ".testNoDefaultTransferObject")) {
-     return parameters.generateDefaultTransferObject(false);
- } else if (testName.equals(this.getClass().getSimpleName() + ".testEntityPrefix")) {
-     return parameters.entityNamePrefix("_Entity_");
- } // ... more conditions ...

+ record TransformationRule(String methodName, 
+     Function<Jsl2PsmParameterBuilder, Jsl2PsmParameterBuilder> transform) {}
+ 
+ private final Map<String, Function<Jsl2PsmParameterBuilder, Jsl2PsmParameterBuilder>> 
+     transformationRules = Map.of(
+         getTestMethodName("testNoDefaultTransferObject"), 
+             p -> p.generateDefaultTransferObject(false),
+         getTestMethodName("testEntityPrefix"), 
+             p -> p.entityNamePrefix("_Entity_"),
+         // ... more rules ...
+     );
+
+ @Override
+ public Jsl2PsmParameterBuilder addTransformationParameters(
+     String testName, 
+     Jsl2PsmParameterBuilder parameters
+ ) {
+     return transformationRules.getOrDefault(
+         testName, 
+         p -> p
+     ).apply(parameters);
+ }

This refactoring would:

  • Reduce code duplication
  • Make it easier to add new transformation rules
  • Improve maintainability
  • Make the code more testable

320-320: Remove extra empty line.

While having a newline at the end of the file is good practice, multiple empty lines are unnecessary.

-
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuTableDeclarationAddSelectorPage.etl (2)

128-128: Consider consistent position handling

The position handling here differs from the pattern used in TableAddSelectorTableTable. Consider using the same conditional check pattern for consistency:

-        __pos.put(t, 0);
+        if (__pos.get(s).isDefined()) {
+            __pos.put(t, __pos.get(s));
+        } else {
+            __pos.put(t, 0);
+        }

Line range hint 176-176: Address TODO and commented-out code sections

There are two areas that need attention:

  1. A TODO comment indicating that "selector should work eventually"
  2. A commented-out section for handling link-based columns

These suggest incomplete features that might affect the selector functionality.

Would you like me to:

  1. Help implement the selector functionality mentioned in the TODO?
  2. Assist in implementing the link-based column handling that's currently commented out?

Also applies to: 190-205

judo-tatami-jsl-jsl2psm/src/main/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/Jsl2Psm.java (1)

186-186: Consider adding performance monitoring and documentation for caching behavior.

The caching implementation is consistent across all contexts. However, for better maintainability and operational visibility:

  1. Consider adding documentation about:

    • Memory implications of caching
    • When to disable caching (e.g., for large models)
    • Performance characteristics
  2. Consider adding metrics for cache usage monitoring

Would you like me to help draft the documentation or suggest monitoring implementations?

Also applies to: 191-196, 199-204, 236-236

judo-tatami-jsl-workflow/src/main/java/hu/blackbelt/judo/tatami/jsl/workflow/AbstractTatamiPipelineWorkflow.java (1)

100-101: Document the new size limit parameters.

The new size limit parameters would benefit from documentation explaining their purpose and constraints.

Consider adding Javadoc to the parameter getters in the DefaultWorkflowSetupParameters class:

/**
 * Gets the maximum allowed length for table names in the RDBMS.
 * This limit is enforced during the ASM to RDBMS transformation.
 * @return the maximum length for table names
 */
public Integer getRdbmsTableNameMaxSize() {
    return rdbmsTableNameMaxSize;
}

/**
 * Gets the maximum allowed length for column names in the RDBMS.
 * This limit is enforced during the ASM to RDBMS transformation.
 * @return the maximum length for column names
 */
public Integer getRdbmsColumnMaxNameSize() {
    return rdbmsColumnMaxNameSize;
}
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewLinkDeclarationSetSelectorPage.etl (2)

48-48: Consider aligning position initialization with the new pattern

For consistency with the ViewLinkDeclarationSetSelectorTable rule, consider using the same conditional pattern:

-        __pos.put(t, 0);
+        if (__pos.get(s).isDefined()) {
+            __pos.put(t, __pos.get(s));
+        } else {
+            __pos.put(t, 0);
+        }

83-88: Fix indentation for consistency

The conditional block's indentation and spacing should match the surrounding code style.

-        if (__pos.get(s).isDefined()) {
-            __pos.put(t, __pos.get(s));
-        } else {
-            __pos.put(t, 0);
-        }
-
+    if (__pos.get(s).isDefined()) {
+        __pos.put(t, __pos.get(s));
+    } else {
+        __pos.put(t, 0);
+    }
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewLinkDeclaration.etl (2)

15-18: LGTM! Consider adding documentation for position handling.

The new map-based position handling with fallback is more robust than direct assignment. This change aligns well with similar updates across other transformation files.

Consider adding a comment explaining the __pos map's purpose and the significance of the default value 0.


21-22: Address TODO for additional mask attributes.

The TODO comment and commented-out code indicate incomplete implementation for additional mask attributes. This might affect the functionality of eager loading.

Would you like me to help implement the additional mask attributes functionality or create a GitHub issue to track this task?

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTableDeclarationAddSelectorPage.etl (2)

161-165: Consider extracting position handling logic

The position handling logic could be extracted into a helper function to improve reusability and maintain consistency across transformation rules.

Consider creating a helper function like this:

+ operation getOrDefaultPosition(source, defaultValue) {
+     if (__pos.get(source).isDefined()) {
+         return __pos.get(source);
+     }
+     return defaultValue;
+ }

  rule ViewTableDeclarationAddSelectorTableTable
      transform s: JSL!UIViewTableDeclaration
      to t: UI!ui::Table {
-         if (__pos.get(s).isDefined()) {
-             __pos.put(t, __pos.get(s));
-         } else {
-             __pos.put(t, 0);
-         }
+         __pos.put(t, getOrDefaultPosition(s, 0));

Line range hint 188-203: Track TODO for selector functionality implementation

The commented code block suggests that link handling in selectors is not yet implemented. This could limit the selector's functionality.

Would you like me to create a GitHub issue to track the implementation of link handling in selectors? This would help ensure this technical debt is properly tracked and addressed.

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/rowDeclaration.etl (3)

77-77: LGTM: Position management refactoring

The introduction of __pos.put(t, 0) aligns with the architectural change to manage positions through a map-like structure instead of direct attribute manipulation. This approach provides better encapsulation and state management.


108-109: Add documentation for position management

The position initialization logic is sound, but consider adding documentation to explain:

  • The significance of the position value
  • Why 0 is chosen as the default
  • How this position value is used in the UI rendering
+ // Initialize position to 0 if undefined
+ // Position determines the {explain what this position affects}
 if (__pos.get(t).isUndefined()) {
     __pos.put(t, 0);
 }

Line range hint 113-113: Consider making rows per page configurable

The current implementation uses a hardcoded value of 10 for selectorRowsPerPage. Consider:

  1. Making this value configurable through properties
  2. Implementing the TODO to allow dynamic row count selection
  3. Adding validation for minimum/maximum allowed values

This would provide better flexibility for different use cases and data volumes.

Would you like me to help implement a configurable pagination solution or create an issue to track this enhancement?

judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/AbstractTest.java (1)

161-162: Document the new transformation parameters

The parallel execution and caching parameters should be documented in the class-level Javadoc to help other developers understand their impact and usage.

Add the following documentation above the class declaration:

 @Slf4j
+/**
+ * Base class for JSL to PSM transformation tests.
+ * <p>
+ * The transformation is configured with:
+ * <ul>
+ *   <li>Parallel execution enabled for improved performance</li>
+ *   <li>Caching enabled to reduce redundant computations</li>
+ * </ul>
+ * Note: Test implementations should ensure thread safety when using parallel execution.
+ */
 abstract public class AbstractTest {
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between c565f52 and 62a2e25.

📒 Files selected for processing (52)
  • judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/equivalentDiscriminated.eol (1 hunks)
  • judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/entityDeclaration.eol (1 hunks)
  • judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/jslToPsm.etl (1 hunks)
  • judo-tatami-jsl-jsl2psm/src/main/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/Jsl2Psm.java (4 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/AbstractTest.java (1 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/TransformationParametersTest.java (2 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/actor/JslModel2PsmActorTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/actor/JslModel2PsmAnonymousActorTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedDeclaration2PrimitiveAccessorTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedRelation2PsmRelationTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedWithParametersTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslExpressionToJqlExpressionTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityDeclaration2PsmEntityTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityDefaultValue2PsmPrimitiveAccessorTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityRelationDeclaration2PsmRelationTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/error/JslErrorDeclaration2PsmUnmappedTransferObjectTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/functions/JslInstanceFunctionTranslationTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/importmodel/JslMultipleJslModelImportTest.java (1 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/namespace/JslNamespace2PsmNamespaceTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/operation/JslAction2PsmOperationTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/operation/JslModel2PsmCrudBehaviourTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslEntityDeclaration2PsmDefaultTransferObjectTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslMappedTranferObject2PsmTransferObjectTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslTransferObjectChoices2PsmTransferObjectTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslTransferObjectConstructor2PsmTransferObjectTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslUnmappedTranferObject2PsmTransferObjectTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslBinaryTypeDeclaration2PsmBinaryTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslBooleanTypeDeclaration2PsmBooleanTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslDateDeclaration2PsmDateTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslEnumDeclaration2PsmEnumerationTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslNumericTypeDeclaration2PsmNumericTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslStringTypeDeclaration2PsmStringTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslTimeTypeDeclaration2PsmTimeTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslTimestampTypeDeclaration2PsmTimestampTypeTest.java (0 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/jslToUi.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/application/actorGroupDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuLinkDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuTableDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuTableDeclarationAddSelectorPage.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/rowDeclaration.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclaration.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclarationForm.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewGroupDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewLinkDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewLinkDeclarationSetSelectorPage.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTableDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTableDeclarationAddSelectorPage.etl (2 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTabsDeclaration.etl (1 hunks)
  • judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewWidgetDeclaration.etl (1 hunks)
  • judo-tatami-jsl-workflow/src/main/java/hu/blackbelt/judo/tatami/jsl/workflow/AbstractTatamiPipelineWorkflow.java (1 hunks)
  • pom.xml (5 hunks)
💤 Files with no reviewable changes (27)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/actor/JslModel2PsmActorTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/actor/JslModel2PsmAnonymousActorTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedDeclaration2PrimitiveAccessorTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedRelation2PsmRelationTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslEntityDerivedWithParametersTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/derived/JslExpressionToJqlExpressionTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityDeclaration2PsmEntityTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityDefaultValue2PsmPrimitiveAccessorTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/entity/JslEntityRelationDeclaration2PsmRelationTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/error/JslErrorDeclaration2PsmUnmappedTransferObjectTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/functions/JslInstanceFunctionTranslationTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/namespace/JslNamespace2PsmNamespaceTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/operation/JslAction2PsmOperationTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/operation/JslModel2PsmCrudBehaviourTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslEntityDeclaration2PsmDefaultTransferObjectTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslMappedTranferObject2PsmTransferObjectTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslTransferObjectChoices2PsmTransferObjectTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslTransferObjectConstructor2PsmTransferObjectTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/transferobject/JslUnmappedTranferObject2PsmTransferObjectTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslBinaryTypeDeclaration2PsmBinaryTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslBooleanTypeDeclaration2PsmBooleanTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslDateDeclaration2PsmDateTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslEnumDeclaration2PsmEnumerationTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslNumericTypeDeclaration2PsmNumericTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslStringTypeDeclaration2PsmStringTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslTimeTypeDeclaration2PsmTimeTypeTest.java
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/type/JslTimestampTypeDeclaration2PsmTimestampTypeTest.java
✅ Files skipped from review due to trivial changes (1)
  • judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/importmodel/JslMultipleJslModelImportTest.java
🔇 Additional comments (32)
judo-tatami-jsl-jsl2ui/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol (2)

Line range hint 13-20: LGTM: Container-specific position retrieval logic is well-structured

The hierarchical position retrieval logic for different UI container types (ViewDeclaration, ViewGroupDeclaration, ViewTabsDeclaration) is clear and maintainable.


21-21: Verify the lifecycle and thread safety of the __pos map

The change introduces a dependency on a global __pos map. Please ensure:

  1. The map is properly initialized before any getPos calls
  2. Thread safety is maintained if multiple transformations run concurrently
  3. Memory management (cleanup) is handled appropriately

Let's verify the usage and initialization of __pos:

✅ Verification successful

Based on the shell script results, I can now provide a final response:

The __pos map implementation follows safe practices

The codebase shows that __pos is:

  1. Properly initialized as a ConcurrentMap at the start of transformation in jslToUi.etl
  2. Thread-safe through the use of ConcurrentMap
  3. Scoped to a single transformation run, meaning memory cleanup happens automatically when the transformation completes

The map is consistently used across the codebase for position tracking during UI element transformations, with proper null-safety checks using isDefined().

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for __pos initialization and usage patterns
echo "Searching for __pos initialization..."
rg -A 3 "__pos\s*=[^=]" 

echo "Searching for other __pos usages..."
rg "__pos\." 

echo "Searching for parallel execution configurations..."
rg -g "*.launch" "parallel"

Length of output: 6911

judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/entityDeclaration.eol (1)

18-19: 🛠️ Refactor suggestion

Consider maintaining type parameter for better type safety

The return type has been changed from Sequence<EntityMemberDeclaration> to just Sequence. While the implementation remains unchanged, removing the type parameter could lead to type-safety issues in consuming code.

Let's verify the usage of this operation to ensure the type change doesn't cause issues:

Consider maintaining the type parameter for better type safety:

-operation JSL!EntityDeclaration getInheritedMembers(): Sequence {
+operation JSL!EntityDeclaration getInheritedMembers(): Sequence<EntityMemberDeclaration> {
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/menuTableDeclaration.etl (2)

19-19: LGTM: Position management refactored to use centralized map

The change from direct position assignment to using __pos.put() improves position management by centralizing it. This aligns with similar changes across other transformation files.

Also applies to: 23-23


19-19: Verify safety of indexOf operation

The position calculation using eContainer.members.indexOf(s) makes some assumptions:

  1. eContainer is not null
  2. members collection exists
  3. s exists within the members collection

Consider adding appropriate guards to handle edge cases.

Consider adding safety checks:

 if (s.eContainer.isKindOf(JSL!UIMenuGroupDeclaration)) {
     s.eContainer.equivalent("MenuItemGroup").items.add(t);
-    __pos.put(t, s.eContainer.members.indexOf(s));
+    if (not s.eContainer.isUndefined() and not s.eContainer.members.isUndefined()) {
+        var index = s.eContainer.members.indexOf(s);
+        if (index >= 0) {
+            __pos.put(t, index);
+        }
+    }
 }

Also applies to: 23-23

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/application/actorGroupDeclaration.etl (1)

27-27: Verify the initialization and scope of __pos map

The change from direct position assignment to using a map-based approach (__pos.put()) appears to be part of a broader refactoring for centralized position management. While this is a good architectural decision, we should ensure proper initialization and handling of the __pos map.

Let's verify the implementation:

Also applies to: 31-31

✅ Verification successful

Position management implementation is properly initialized and used consistently

The __pos map is correctly initialized as a ConcurrentMap in the main transformation file (jslToUi.etl) and is used consistently across multiple transformation rules for position tracking. The map is populated with indices during the initial transformation phase and then referenced throughout the codebase for position management. The changes in actorGroupDeclaration.etl follow the established pattern seen in other transformation rules.

Key findings:

  • Initialization: var __pos = new ConcurrentMap(); in jslToUi.etl
  • Consistent usage pattern: All position assignments use __pos.put() with container-based indexing
  • No cleanup needed: Map is scoped to the transformation execution
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for __pos map initialization and usage patterns
# Expected: Find initialization of __pos and other usage patterns

# Search for __pos initialization and usage
rg -A 3 "__pos\s*=" .

# Search for other __pos.put calls to understand the pattern
rg -A 3 "__pos\.put" .

# Look for potential cleanup or clear operations
rg -A 3 "__pos\.(clear|remove)" .

Length of output: 16477

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTabsDeclaration.etl (2)

Line range hint 1-67: Verify Eclipse 2024-09 compatibility requirements.

Since this change is part of the Eclipse 2024-09 update, let's verify if the position attribute handling changes are required for compatibility.


8-8: Position attribute change looks good but needs verification.

The change from direct position assignment to using the __pos map aligns with the broader refactoring pattern across transformation files.

Let's verify the __pos map implementation and usage across other transformation files:

✅ Verification successful

Position handling change is correctly implemented and consistent across the codebase

The verification shows that:

  1. The __pos map is properly initialized in jslToUi.etl as a ConcurrentMap
  2. All position assignments consistently use __pos.put() across transformation files
  3. The getPos() operation is defined in visibleDeclaration.eol and used consistently
  4. No direct position assignments (t.~pos = ...) were found in the codebase
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistent usage of __pos map and any remaining direct position assignments

# Search for __pos map initialization and usage
rg -A 2 "__pos\s*=" "judo-tatami-jsl-jsl2ui/src/main/epsilon"

# Check for any remaining direct position assignments that might have been missed
ast-grep --pattern 't.~pos = $_;'

Length of output: 496


Script:

#!/bin/bash
# Let's verify the complete position handling pattern by:
# 1. Finding all __pos.put usages
# 2. Checking if there are any other position-related patterns we should be aware of

# Check all __pos.put usages
rg -A 2 "__pos\.put" "judo-tatami-jsl-jsl2ui/src/main/epsilon"

# Check for any getPos() calls to understand the complete pattern
rg -A 2 "getPos\(\)" "judo-tatami-jsl-jsl2ui/src/main/epsilon"

# Look for any other position-related patterns
rg -A 2 "\.pos" "judo-tatami-jsl-jsl2ui/src/main/epsilon"

Length of output: 13749

judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/equivalentDiscriminated.eol (2)

Line range hint 8-45: LGTM: Robust caching and error handling implementation

The implementation demonstrates good practices:

  • Proper cache checking before model lookup
  • Clear error handling for ID mismatches
  • Careful management of model elements and their IDs
  • Appropriate use of traceability links (though currently commented out)

6-6: Verify consistent resource access across transformation files

The change from JSL.target.resource to JSL.resource might affect how model elements are accessed. While the change itself looks correct, we should ensure consistency across all transformation files.

✅ Verification successful

Different resource references are expected between JSL2PSM and JSL2UI transformations

The difference in resource references (JSL.resource vs JSL.target.resource) between the two files is intentional and correct. These files belong to different transformation modules:

  • judo-tatami-jsl-jsl2psm: PSM transformation using JSL.resource
  • judo-tatami-jsl-jsl2ui: UI transformation using JSL.target.resource

Each transformation module correctly uses its appropriate resource reference based on its specific transformation context. The change in the PSM transformation file is valid and doesn't require modifications to the UI transformation file.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining references to JSL.target.resource
# and verify consistent usage of JSL.resource

# Search for old resource reference pattern
echo "Checking for old resource reference pattern..."
rg "JSL\.target\.resource" -l

# Search for new resource reference pattern to verify consistency
echo "Checking new resource reference pattern..."
rg "JSL\.resource" -l

Length of output: 412


Script:

#!/bin/bash
# Let's examine the content of both files to understand the context better
echo "Content of judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/equivalentDiscriminated.eol:"
cat judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/equivalentDiscriminated.eol

echo -e "\nContent of judo-tatami-jsl-jsl2ui/src/main/epsilon/operations/equivalentDiscriminated.eol:"
cat judo-tatami-jsl-jsl2ui/src/main/epsilon/operations/equivalentDiscriminated.eol

Length of output: 5119

judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/jslToPsm.etl (2)

55-55: Verify consistent resource access pattern across transformations

The change from JUDOPSM.target.resource.contents to JUDOPSM.resource.contents modifies how model elements are added to the target model.

✅ Verification successful

Resource access pattern change appears to be isolated

The change from JUDOPSM.target.resource.contents to JUDOPSM.resource.contents appears to be the only instance of this pattern in the codebase. Since there are no other occurrences of either the old or new pattern, this suggests the change is isolated and doesn't require consistency checks with other transformations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other occurrences of resource access patterns to ensure consistency
rg -A 2 "JUDOPSM\.(target\.)?resource\.contents" --type etl

Length of output: 89


Script:

#!/bin/bash
# Search for resource access patterns in all files
rg -A 2 "JUDOPSM\.(target\.)?resource\.contents"

Length of output: 358


Script:

#!/bin/bash
# Search for any similar resource access patterns in the codebase
rg -A 2 "\.resource\.contents\.add|\.target\.resource\.contents"

# Also check for historical usage in the file
git log -p judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/jslToPsm.etl | rg "target\.resource\.contents"

Length of output: 374


59-61: Clarify the removal of cardinality ID setting

The commented-out code previously set IDs for cardinality objects based on their container's ID. This change could impact model element traceability and cross-referencing.

Please clarify:

  1. Is this functionality replaced elsewhere?
  2. Are there any dependencies on these cardinality IDs?
judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewGroupDeclaration.etl (1)

20-20: Verify the initialization and thread-safety of __pos map

The change from direct position assignment to using a map-based approach looks good, but we should ensure proper initialization and thread-safety of the __pos map, especially since ETL transformations can be executed in various contexts.

Let's verify the initialization and usage of __pos map across the codebase:

✅ Verification successful

The __pos map is properly initialized and thread-safe

The verification shows that:

  • __pos is initialized as a ConcurrentMap in jslToUi.etl, ensuring thread-safety
  • The map is consistently used across all UI transformation modules for position tracking
  • Position values are properly populated from various sources:
    • Container indices (e.g., members.indexOf(member) + 1)
    • Source positions via getPos()
    • Default value of 0 for new elements
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for __pos initialization and usage patterns
rg -A 3 "__pos\s*=" 
rg -A 3 "__pos\.put"

Length of output: 16195

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/jslToUi.etl (4)

57-61: LGTM! Consistent position handling for row members.

The position assignment for row members follows the same pattern, maintaining consistency across the codebase.


63-67: LGTM! Consistent position handling for view members.

The position assignment for view members maintains consistency with the established pattern.


Line range hint 88-102: LGTM! Robust error handling for container positions.

The implementation includes thorough error handling with descriptive error messages and proper validation of positions before sorting. This is a good pattern that could be applied to other sections as well.


46-55: Verify coverage of all UIViewPanelDeclaration subtypes.

The position assignment looks correct, but let's verify we're not missing any UIViewPanelDeclaration subtypes.

✅ Verification successful

Based on the code analysis, I can now generate the final response:

UIViewPanelDeclaration subtypes are properly handled

The code correctly handles all UIViewPanelDeclaration subtypes:

  • UIViewGroupDeclaration: Handles position assignment for members
  • UIViewTabsDeclaration: Handles position assignment for panels

Looking at the codebase operations and usage patterns, these are the only two concrete subtypes of UIViewPanelDeclaration that require position handling. This is evident from:

  • The consistent pattern in all operations (getDirectRelations, getAllRelations, getAllPrimitiveFields) only checking for these two types
  • No other subtypes being referenced or handled anywhere in the codebase
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any other UIViewPanelDeclaration subtypes that might need position handling
ast-grep --pattern 'class $_ extends UIViewPanelDeclaration {
  $$$
}'

Length of output: 72


Script:

#!/bin/bash
# Let's try a different approach to find UIViewPanelDeclaration and its subtypes
# First, let's find files that mention UIViewPanelDeclaration
rg -l "UIViewPanelDeclaration"

# Then let's look at the actual usage and inheritance patterns
rg "UIViewPanelDeclaration" -A 5 -B 5

Length of output: 10545

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclarationForm.etl (1)

7-8: Verify consistent position management across transformation files.

Let's verify if the position management pattern is consistently implemented across other transformation files.

Also applies to: 30-30

✅ Verification successful

Position management is consistently implemented across view-related transformations

The position management pattern (__pos.put(t, 0)) is consistently implemented across all view-related transformation files in the UI module. The pattern appears in:

  • viewDeclarationForm.etl
  • viewTableDeclaration.etl
  • viewLinkDeclaration.etl
  • rowDeclaration.etl
  • menuTableDeclarationAddSelectorPage.etl
  • viewTableDeclarationAddSelectorPage.etl
  • viewLinkDeclarationSetSelectorPage.etl

All implementations consistently use the same initialization value of 0, maintaining uniform position management behavior.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check position management implementation across transformation files
# Look for both conditional and direct position assignments

echo "Checking for position management patterns in transformation files..."

# Search for direct assignments
echo "Direct assignments:"
rg "__pos\.put\([^,]+,\s*\d+\)" --type etl

# Search for conditional assignments
echo -e "\nConditional assignments:"
rg "if\s*\(__pos\.get\([^)]+\)\.isUndefined\(\)\)\s*\{[^}]*__pos\.put\(" --type etl

Length of output: 447


Script:

#!/bin/bash
# Description: Check position management implementation across transformation files
# Look for both conditional and direct position assignments without file type restriction

echo "Checking for position management patterns in transformation files..."

# Search for direct assignments
echo "Direct assignments:"
rg "__pos\.put\([^,]+,\s*\d+\)"

# Search for conditional assignments
echo -e "\nConditional assignments:"
rg "if\s*\(__pos\.get\([^)]+\)\.isUndefined\(\)\)\s*\{[^}]*__pos\.put\("

# List all files with .etl extension to verify the file pattern
echo -e "\nETL files in the repository:"
fd "\.etl$"

Length of output: 9913

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewDeclaration.etl (1)

7-8: Ensure consistent position handling across rules.

The position check and assignment using __pos map is properly guarded against undefined values. However, this pattern differs from the direct assignment in the ViewPageContainerVisualElement rule.

Let's verify the initialization and usage pattern of __pos map across other transformation files:

✅ Verification successful

Position handling is consistent with the codebase pattern

The __pos map is properly initialized in jslToUi.etl as a global ConcurrentMap and is consistently used across all UI transformation rules. The undefined check in viewDeclaration.etl follows the established pattern seen in other transformation files where position values default to 0 when undefined. The implementation is correct and aligns with the codebase's position management strategy.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for __pos map initialization and usage patterns
rg -A 2 "__pos\.(get|put)" --type etl

Length of output: 67


Script:

#!/bin/bash
# Search for __pos map initialization and usage patterns with a more generic approach
rg -A 2 "__pos\.(get|put)"

Length of output: 14381


Script:

#!/bin/bash
# Search for __pos initialization or declaration
rg -A 2 "__pos\s*=|var\s+__pos"

Length of output: 432


Script:

#!/bin/bash
# Look for files with .etl extension to understand the codebase structure
fd -e etl

Length of output: 7665

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewWidgetDeclaration.etl (2)

Line range hint 1-299: Overall structure and patterns look good

The transformation rules follow consistent patterns with:

  • Clear guard conditions for type matching
  • Proper logging for debugging
  • Consistent ID generation
  • Well-organized rule inheritance

This makes the code maintainable and easy to understand.


25-25: Verify position handling for all container types

The new position handling approach simplifies the code but requires verification to ensure it correctly handles all container types (UIViewDeclaration, UIViewGroupDeclaration, UIViewTabsDeclaration).

✅ Verification successful

Based on the search results, I can now generate the final response since I have found the implementation of position handling for all container types in the codebase:

Position handling is correctly implemented for all container types

The getPos() operation in visibleDeclaration.eol properly handles all container types:

if (self.eContainer.isKindOf(JSL!UIViewDeclaration)) {
    return self.eContainer.members.indexOf(self);
} else if (self.eContainer.isKindOf(JSL!UIViewGroupDeclaration)) {
    return self.eContainer.members.indexOf(self);
} else if (self.eContainer.isKindOf(JSL!UIViewTabsDeclaration)) {
    return self.eContainer.panels.indexOf(self);
}
return __pos.get(self).isDefined() ? __pos.get(self) : 0;

The implementation correctly:

  • Handles UIViewDeclaration containers using members.indexOf()
  • Handles UIViewGroupDeclaration containers using members.indexOf()
  • Handles UIViewTabsDeclaration containers using panels.indexOf()
  • Falls back to stored position or 0 for other cases
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for getPos() implementation and usage to verify position handling
# Test: Look for getPos() implementation and its usage across container types

echo "Searching for getPos() implementation:"
ast-grep --pattern 'operation getPos() {
  $$$
}'

echo -e "\nSearching for container type declarations:"
rg -A 5 "UIViewDeclaration|UIViewGroupDeclaration|UIViewTabsDeclaration"

Length of output: 58309

judo-tatami-jsl-jsl2psm/src/main/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/Jsl2Psm.java (1)

163-166: LGTM! Verify impact on existing builder usage.

The new useCache field is properly annotated and follows the established pattern. The default value of true maintains backward compatibility.

Let's verify existing builder usage to ensure no breaking changes:

✅ Verification successful

The new useCache field is safe to add

The codebase scan shows that existing builder usage of Jsl2PsmParameter won't be affected by the new useCache field because:

  1. All existing usages don't explicitly set the useCache parameter, which means they'll use the default true value
  2. The only explicit usage of useCache(true) is in test code (AbstractTest.java), which already handles the new parameter correctly
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for existing builder pattern usage of Jsl2PsmParameter
rg "jsl2PsmParameter\(\)" -A 5

Length of output: 5185

judo-tatami-jsl-workflow/src/main/java/hu/blackbelt/judo/tatami/jsl/workflow/AbstractTatamiPipelineWorkflow.java (2)

100-101: Consider adding parameter validation for the new size limits.

The new parameters tableNameMaxSize and columnMaxNameSize are correctly integrated into the RDBMS work configuration. However, to ensure robust operation, consider adding validation to prevent negative or zero values.

Consider adding validation before setting these parameters:

if (parameters.getRdbmsTableNameMaxSize() <= 0) {
    throw new IllegalArgumentException("Table name max size must be positive");
}
if (parameters.getRdbmsColumnMaxNameSize() <= 0) {
    throw new IllegalArgumentException("Column name max size must be positive");
}

Let's verify if similar validations exist for other size parameters:


100-101: Verify compatibility with different RDBMS dialects.

Since these parameters affect RDBMS name lengths, ensure they respect the limits of supported database systems.

Let's check the dialect-specific configurations:

✅ Verification successful

Let me gather more specific information about the RDBMS configuration and name length parameters.


Let me check the actual parameter configurations and their default values.


Based on the analysis of the code, I can now provide a final response:

The RDBMS name length parameters are safely configured with fallback values

The code shows that:

  • Default values are set to -1 for both rdbmsTableNameMaxSize and rdbmsColumnMaxNameSize
  • These parameters are configurable through Maven properties
  • The system uses these values only when explicitly set (non-negative)
  • The implementation includes proper prefix handling for table and column names
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for dialect-specific configurations and name length handling
ast-grep --pattern 'class $_ implements $_Dialect {
  $$$
}'

# Search for any existing database-specific length constraints
rg -A 3 "LENGTH|MaxLength|max.*length" --type java

Length of output: 3252


Script:

#!/bin/bash
# Search for RDBMS configuration and name length parameters
rg -A 5 "RdbmsTableNameMaxSize|RdbmsColumnMaxNameSize" --type java

# Search for any database dialect or RDBMS-specific configuration classes
fd -e java -x grep -l "Dialect\|RDBMS\|DatabaseConfiguration" {} \;

# Search for any database name length constants or configurations
ast-grep --pattern 'private static final $_ $_ = $_'

Length of output: 1870


Script:

#!/bin/bash
# Check the parameter class and default configurations
rg -A 10 "class.*Parameters" --type java

# Look for any default values or configuration settings
cat ./judo-tatami-jsl-workflow-maven-plugin/src/main/java/hu/blackbelt/judo/tatami/jsl/workflow/maven/plugin/DefaultWorkflowMojo.java

# Search for any validation or constraint checks on these parameters
rg -A 5 "validateRdbms|validate.*Size" --type java

Length of output: 23492

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewLinkDeclarationSetSelectorPage.etl (1)

48-48: Verify consistency of position handling across files

The changes introduce a new pattern for position handling. Let's verify this pattern is consistently applied across related files.

Also applies to: 83-88

✅ Verification successful

Position handling pattern is consistently implemented

The verification shows that the position handling pattern is consistently implemented across the codebase:

  • Direct position assignments (__pos.put(t, 0)) are used uniformly across multiple view-related files
  • Conditional position handling (__pos.get(s).isDefined()) is consistently implemented in selector pages and link declarations
  • The pattern in viewLinkDeclarationSetSelectorPage.etl follows the same implementation as other similar files
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistency in position handling across transformation files
# Look for both patterns to identify any inconsistencies

echo "Checking for direct position assignments..."
rg "__pos\.put\([^,]+,\s*0\)" --type etl

echo "Checking for conditional position handling..."
rg "__pos\.get\([^)]+\)\.isDefined\(\)" --type etl

Length of output: 349


Script:

#!/bin/bash
# Search for position-related patterns without file type restriction
echo "Checking for direct position assignments..."
rg "__pos\.put\([^,]+,\s*0\)"

echo "Checking for conditional position handling..."
rg "__pos\.get\([^)]+\)\.isDefined\(\)"

# Also check for any files with .etl extension to verify file existence
echo "Checking for .etl files..."
fd "\.etl$"

Length of output: 10676

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewLinkDeclaration.etl (1)

15-18: Verify consistent position handling across transformation files.

Let's verify that the __pos map is consistently used across other transformation files.

✅ Verification successful

Position handling is consistent across transformation files

The verification shows that the __pos map usage in viewLinkDeclaration.etl follows the same pattern used consistently across other transformation files in the codebase:

  • The pattern of checking isDefined() and falling back to 0 is used in multiple files like viewTableDeclaration.etl, viewTableDeclarationAddSelectorPage.etl, and viewLinkDeclarationSetSelectorPage.etl
  • Position assignments are handled through the __pos map with proper get/put operations
  • Direct position assignments via ~pos are only used when applying the positions from the map to the final elements
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistent usage of __pos map across transformation files

# Search for position-related patterns in transformation files
echo "Checking position handling patterns..."
rg -t etl "__pos\.(get|put)" ./

# Search for direct position assignments that might need updating
echo "Checking for potential direct position assignments..."
rg -t etl "\.~pos\s*=" ./

Length of output: 321


Script:

#!/bin/bash
# Search for position-related patterns in transformation files without file type restriction
echo "Checking position handling patterns..."
rg "__pos\.(get|put)" --type-add 'epsilon:*.etl' --type epsilon

# Search for direct position assignments that might need updating
echo "Checking for potential direct position assignments..."
rg "\.~pos\s*=" --type-add 'epsilon:*.etl' --type epsilon

# List all ETL files to ensure we're searching in the right place
echo "Listing all ETL files..."
fd "\.etl$"

Length of output: 14904

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTableDeclarationAddSelectorPage.etl (1)

126-126: LGTM: Position handling improvement

The change to use __pos.put() for position management aligns with the broader refactoring effort to improve position handling across UI components.

judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/AbstractTest.java (1)

161-162: Verify parallel execution and caching behavior

The addition of parallel execution and caching could significantly impact test behavior and performance. While these optimizations are generally beneficial, they warrant careful verification:

  1. Parallel execution could expose race conditions or thread safety issues
  2. Caching might mask test isolation problems

Let's verify the implementation and usage of these parameters:

Consider adding the following safeguards:

  1. Add test cases that specifically verify cache invalidation between tests
  2. Document any thread safety requirements for test implementations
  3. Consider making these parameters configurable via system properties for debugging purposes
✅ Verification successful

Based on the shell script results, I can now generate the final response:

Parallel execution and caching are safe to use

The codebase shows that parallel execution and caching are well-integrated features:

  • Both parameters are standard options across multiple components (JSL2PSM, JSL2UI, workflow)
  • They are properly propagated through the transformation chain
  • Caching is enabled by default in the workflow (useCache = true)
  • No thread safety issues were identified in the transformation implementation
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check implementation of parallel and cache parameters

# Check for thread safety mechanisms in transformation
ast-grep --pattern 'class Jsl2Psm {
  $$$
  synchronized $_ $_($$_) {
    $$$
  }
  $$$
}'

# Look for cache-related implementations
rg -A 5 "useCache|parallel" --type java

Length of output: 17110

judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/modules/view/viewTableDeclaration.etl (1)

15-18: Position management refactoring looks good, but needs verification.

The switch to using the __pos map for position management is a good architectural improvement that centralizes position handling. However, we should verify a few aspects:

  1. Ensure the __pos map is properly initialized before these transformations run
  2. Verify that all related transformation rules are updated to use this new position management approach

Let's verify the initialization and usage of the __pos map:

Consider adding a comment explaining the position management approach and the role of the __pos map for better maintainability.

 @abstract
 rule AbstractViewTableDeclaration
     transform s: JSL!UIViewTableDeclaration
     to t: UI!ui::Table {
         guard: rootMenu.containsVisualElement(s)
+        // Position management: Uses centralized __pos map to maintain consistent positioning across UI elements
✅ Verification successful

Let me verify the initialization of __pos map in the main transformation file:


Position management implementation is correctly structured and initialized

The position management using __pos map is properly implemented:

  • The map is initialized as a ConcurrentMap in the main transformation file
  • It's populated with positions for all UI elements consistently
  • The usage pattern is uniform across all transformation rules, with proper fallback to 0 when undefined
  • The implementation in viewTableDeclaration.etl follows the established pattern correctly
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for __pos map initialization and usage across transformation files

# Look for __pos map initialization
echo "Checking for __pos initialization:"
rg -l "__pos\s*=\s*" 

# Look for other usages of __pos to ensure consistent approach
echo "Checking for __pos usage patterns:"
rg "__pos\.(?:get|put)\b" 

Length of output: 6327


Script:

#!/bin/bash
# Check the initialization and context of __pos map in the main transformation file
echo "Checking __pos initialization in jslToUi.etl:"
rg -A 5 "__pos\s*=\s*" "judo-tatami-jsl-jsl2ui/src/main/epsilon/transformations/ui/jslToUi.etl"

Length of output: 518

pom.xml (3)

55-56: LGTM: New version properties for better dependency management

The addition of logback-version and lombok-version properties improves version management by centralizing these versions.


121-121: LGTM: Consistent use of version properties

The dependencies have been updated to use the newly defined version properties:

  • lombok: ${lombok-version}
  • logback-classic: ${logback-version}

This change ensures consistent version management across the project.

Also applies to: 133-133, 741-741


58-60: Verify compatibility of updated versions

The following version updates have been made:

  • slf4j-version: 2.0.7 → 2.0.16
  • surefire-version: 3.0.0-M7 → 3.5.1
  • jacoco.version: 0.8.8 → 0.8.12

Let's verify these updates for compatibility and security issues.

Also applies to: 90-90

✅ Verification successful

Version updates are compatible and secure

The version updates are safe to proceed with:

  • slf4j 2.0.16 is a stable release (latest stable is 2.0.x, with 2.1.0-alpha1 being a pre-release)
  • surefire 3.5.1 is one minor version behind latest (3.5.2) but still recent
  • jacoco 0.8.12 matches the latest available version
  • No security vulnerabilities were found for slf4j-api
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for compatibility issues and security advisories for updated dependencies

# Check Maven Central for latest versions and release dates
echo "Checking latest versions from Maven Central..."
curl -s "https://search.maven.org/solrsearch/select?q=g:org.slf4j+AND+a:slf4j-api&rows=1&wt=json" | jq '.response.docs[0].latestVersion'
curl -s "https://search.maven.org/solrsearch/select?q=g:org.apache.maven.plugins+AND+a:maven-surefire-plugin&rows=1&wt=json" | jq '.response.docs[0].latestVersion'
curl -s "https://search.maven.org/solrsearch/select?q=g:org.jacoco+AND+a:jacoco-maven-plugin&rows=1&wt=json" | jq '.response.docs[0].latestVersion'

# Check for security advisories
echo "Checking for security advisories..."
gh api graphql -f query='
{
  securityVulnerabilities(first: 5, ecosystem: MAVEN, package: "org.slf4j:slf4j-api") {
    nodes {
      advisory {
        summary
        severity
        publishedAt
      }
      vulnerableVersionRange
      firstPatchedVersion {
        identifier
      }
    }
  }
}'

Length of output: 1025

@@ -20,11 +20,11 @@ rule MenuLinkNavigationItem

if (s.eContainer.isKindOf(JSL!UIMenuGroupDeclaration)) {
s.eContainer.equivalent("MenuItemGroup").items.add(t);
t.~pos = s.eContainer.members.indexOf(s);
__pos.put(t, s.eContainer.members.indexOf(s));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Inconsistent position management patterns found in the codebase

The verification reveals two different patterns for position management that need to be aligned:

  • Direct position assignments using t.~pos = in viewWidgetDeclaration.etl:

    • t.~pos = s.eContainer.members.indexOf(s)
    • t.~pos = s.eContainer.panels.indexOf(s)
    • t.~pos = s.~pos.isDefined() ? s.~pos : 0
  • The new __pos.put() pattern used across multiple files including:

    • menuLinkDeclaration.etl
    • actorGroupDeclaration.etl
    • viewTableDeclaration.etl
    • And others

The viewWidgetDeclaration.etl file needs to be updated to use the new __pos.put() pattern for consistency with the rest of the codebase.

🔗 Analysis chain

Verify consistent position management implementation across the codebase

The change from direct position assignment to using __pos.put() appears to be part of a broader refactoring. Let's verify the consistency of this pattern across other transformation files.

Also applies to: 27-27

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistent usage of __pos.put() across transformation files
# and identify any remaining direct position assignments that might have been missed

# Search for direct position assignments that might need updating
rg -g "*.etl" "t\.~pos\s*=|\.position\s*=" 

# Search for the new pattern to verify consistent implementation
rg -g "*.etl" "__pos\.put\s*\(" -A 2

Length of output: 12698

@@ -27,7 +27,7 @@ rule FormPageContainerVisualElement
to t: UI!ui::Flex {
guard: rootMenu.containsVisualElement(s) and s.form.isDefined() and s.form

t.~pos = 0;
__pos.put(t, 0);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Align position management with FormPageContainer rule.

For consistency and to prevent potential overwrites, consider using the same conditional approach as in the FormPageContainer rule.

-__pos.put(t, 0);
+if (__pos.get(t).isUndefined()) {
+    __pos.put(t, 0);
+}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
__pos.put(t, 0);
if (__pos.get(t).isUndefined()) {
__pos.put(t, 0);
}

Comment on lines +163 to +167
if (__pos.get(s).isDefined()) {
__pos.put(t, pos.get(s));
} else {
__pos.put(t, 0);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix undefined variable reference in position handling

There's a critical issue in the position handling logic. The code uses an undefined variable pos instead of __pos when getting the source position.

         if (__pos.get(s).isDefined()) {
-            __pos.put(t, pos.get(s));
+            __pos.put(t, __pos.get(s));
         } else {
             __pos.put(t, 0);
         }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (__pos.get(s).isDefined()) {
__pos.put(t, pos.get(s));
} else {
__pos.put(t, 0);
}
if (__pos.get(s).isDefined()) {
__pos.put(t, __pos.get(s));
} else {
__pos.put(t, 0);
}

@robertcsakany robertcsakany merged commit 76d752d into develop Nov 27, 2024
3 checks passed
@robertcsakany robertcsakany deleted the feature/JNG-5995_UpdateEclipse branch November 27, 2024 15:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants