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

devonfw-ide compatibility: Attribute merge:id is required #1037

Open
hohwille opened this issue Feb 14, 2025 · 0 comments
Open

devonfw-ide compatibility: Attribute merge:id is required #1037

hohwille opened this issue Feb 14, 2025 · 0 comments
Labels
bug Something isn't working devonfw-ide backward compatibility for devonfw-ide (regression) merger

Comments

@hohwille
Copy link
Member

Expected behavior

As a devonfw-ide user, I want to use IDEasy on my devonfw-ide project so that I can test things before my entire teams goes for a migration to IDEasy.

Actual behavior

With devon intellij I can launch IntelliJ without errors but with IDEasy I get this:

$ ide intellij
...
Failed to merge workspace file D:\projects\project\workspaces\main\.intellij\config\options\jdk.table.xml with update template D:\projects\project\settings\intellij\workspace\update\.intellij\config\options\jdk.table.xml and setup file D:\projects\project\settings\intellij\workspace\setup\.intellij\config\options\jdk.table.xml!
com.devonfw.tools.ide.merge.xmlmerger.XmlMergeException: Merge strategy combine failed on /application[]/component[@name='ProjectJdkTable']
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:69)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.combineChildNodes(XmlMergeStrategy.java:113)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy$1.doMerge(XmlMergeStrategy.java:29)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:65)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMerger.merge(XmlMerger.java:123)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMerger.doMerge(XmlMerger.java:82)
        at com.devonfw.tools.ide.merge.FileMerger.merge(FileMerger.java:50)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:69)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.tool.ide.IdeToolCommandlet.configureWorkspace(IdeToolCommandlet.java:83)
        at com.devonfw.tools.ide.tool.ide.IdeToolCommandlet.run(IdeToolCommandlet.java:48)
        at com.devonfw.tools.ide.context.AbstractIdeContext.applyAndRun(AbstractIdeContext.java:926)
        at com.devonfw.tools.ide.context.AbstractIdeContext.run(AbstractIdeContext.java:844)
        at com.devonfw.tools.ide.cli.Ideasy.runOrThrow(Ideasy.java:95)
        at com.devonfw.tools.ide.cli.Ideasy.run(Ideasy.java:59)
        at com.devonfw.tools.ide.cli.Ideasy.main(Ideasy.java:133)
        at java.base@21.0.2/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: java.lang.IllegalStateException: Attribute merge:id is required for XML element /application[]/component[@name='ProjectJdkTable']/jdk[@version='2']
        at com.devonfw.tools.ide.merge.xmlmerger.matcher.ElementMatcher.getIdComputer(ElementMatcher.java:43)
        at com.devonfw.tools.ide.merge.xmlmerger.matcher.ElementMatcher.matchElement(ElementMatcher.java:60)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.combineChildNodes(XmlMergeStrategy.java:107)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy$1.doMerge(XmlMergeStrategy.java:29)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:65)
        ... 19 more
Failed to merge workspace file D:\projects\project\workspaces\main\.intellij\config\codestyles\Default.xml with update template D:\projects\project\settings\intellij\workspace\update\.intellij\config\codestyles\Default.xml and setup file D:\projects\project\settings\intellij\workspace\setup\.intellij\config\codestyles\Default.xml!
com.devonfw.tools.ide.merge.xmlmerger.XmlMergeException: Merge strategy combine failed on /code_scheme[@name='Default' @version='173']/JavaCodeStyleSettings[]/option[@name='IMPORT_LAYOUT_TABLE']/value[]
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:69)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.combineChildNodes(XmlMergeStrategy.java:113)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy$1.doMerge(XmlMergeStrategy.java:29)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:65)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.combineChildNodes(XmlMergeStrategy.java:113)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy$1.doMerge(XmlMergeStrategy.java:29)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:65)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.combineChildNodes(XmlMergeStrategy.java:113)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy$1.doMerge(XmlMergeStrategy.java:29)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:65)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMerger.merge(XmlMerger.java:123)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMerger.doMerge(XmlMerger.java:82)
        at com.devonfw.tools.ide.merge.FileMerger.merge(FileMerger.java:50)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:69)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.merge.DirectoryMerger.merge(DirectoryMerger.java:73)
        at com.devonfw.tools.ide.tool.ide.IdeToolCommandlet.configureWorkspace(IdeToolCommandlet.java:83)
        at com.devonfw.tools.ide.tool.ide.IdeToolCommandlet.run(IdeToolCommandlet.java:48)
        at com.devonfw.tools.ide.context.AbstractIdeContext.applyAndRun(AbstractIdeContext.java:926)
        at com.devonfw.tools.ide.context.AbstractIdeContext.run(AbstractIdeContext.java:844)
        at com.devonfw.tools.ide.cli.Ideasy.runOrThrow(Ideasy.java:95)
        at com.devonfw.tools.ide.cli.Ideasy.run(Ideasy.java:59)
        at com.devonfw.tools.ide.cli.Ideasy.main(Ideasy.java:133)
        at java.base@21.0.2/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: java.lang.IllegalStateException: 2 matches found for XPath package[@name=''] in workspace XML at /code_scheme[@name='Default' @version='173']/JavaCodeStyleSettings[]/option[@name='IMPORT_LAYOUT_TABLE']/value[]
        at com.devonfw.tools.ide.merge.xmlmerger.matcher.IdComputer.evaluateExpression(IdComputer.java:65)
        at com.devonfw.tools.ide.merge.xmlmerger.matcher.ElementMatcher.matchElement(ElementMatcher.java:61)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.combineChildNodes(XmlMergeStrategy.java:107)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy$1.doMerge(XmlMergeStrategy.java:29)
        at com.devonfw.tools.ide.merge.xmlmerger.XmlMergeStrategy.merge(XmlMergeStrategy.java:65)
        ... 25 more

Your workspace configuration failed with 5 error(s) - see log above.

Steps to reproduce (bug) / Use Case of feature request (enhancement)

  1. take any devonfw-ide project with settings containing XML templates for IntelliJ
  2. install IDEasy
  3. ide intellij

Related/Dependent Issues

#43
#786
devonfw/ide-settings#72

Comments/Hints:

I see the following options:

  1. We should check if the XML merge namespace is present.
    If not we could assume the template is old legacy stuff from devonfw-ide.
    In that case, the default merge:strategy is keep in case the template is from setup and override if the template is from update.
  2. We could add a property IDE_XML_MERGE_LEGACY_SUPPORT=false to ide-settings in IDEasy like this one:
    https://github.com/devonfw/ide-settings/blob/9551c1a222b64e958cdf1e8b01a952fa537241a6/ide.properties#L18C1-L18C49
    If that property is not set to false, we activate legacy behaviour just as suggested above if the namespace is not present.
    However, new projects can use XML templates without the namespace and still have the modern defaults and do not have problems with auto-formatters like IntelliJ that removes the XML namespace automatically if it is not used anywhere else in the XML file.

Affected version:

  • 2025.02.001-SNAPSHOT
@hohwille hohwille added bug Something isn't working devonfw-ide backward compatibility for devonfw-ide (regression) merger labels Feb 14, 2025
@github-project-automation github-project-automation bot moved this to 🆕 New in IDEasy board Feb 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working devonfw-ide backward compatibility for devonfw-ide (regression) merger
Projects
Status: 🆕 New
Development

No branches or pull requests

1 participant