Repository: redhat-developer/intellij-quarkus
Pull request #1436: fix: fix unit test and integration test
Author: login: sbouchet
Labels: name: bug
description: Something isn't working
Created: 2025-02-25T13:12:16Z | Merged: 2025-04-04T07:53:46Z

fixes #1435 
fixes #1343 

Linked issue #1435: Fix Tests after migrating to intellij gradle 2.x
- fix unit test failure
- fix integration tests failures
Linked issue comments: user: login: sbouchet
created_at: 2025-02-24T16:00:35Z
body: unit test failure stack:
```
com.redhat.microprofile.psi.quarkus.renarde.RenardeJaxRsTest

  Test testAbsolutePathCodeLens PASSED (4.6s)
  Test testCodeLens PASSED (4.4s)
  Test testWorkspaceSymbols FAILED (4.7s)

  java.lang.AssertionError: expected:<Range [
    start = Position [
      line = 31
      character = 16
    ]
    end = Position [
      line = 31
      character = 29
    ]
  ]> but was:<Range [
    start = Position [
      line = 58
      character = 16
    ]
    end = Position [
      line = 58
      character = 29
    ]
  ]>
      at com.redhat.microprofile.psi.quarkus.renarde.RenardeJaxRsTest.testWorkspaceSymbols(RenardeJaxRsTest.java:70)


```
author_association: CONTRIBUTOR
user: login: sbouchet
created_at: 2025-03-06T15:12:12Z
body: integration tests fail to import properly Maven projects as already reported here : #1343 
author_association: CONTRIBUTOR
user: login: sbouchet
created_at: 2025-03-25T13:35:51Z
body: > integration tests fail to import properly Maven projects as already reported here : [#1343](https://github.com/redhat-developer/intellij-quarkus/issues/1343)

This one is now fixed, but i get new errors from unit test that was ok before.
it seems related to LSP4IJ nightly builds, because this test does not fails with LSP4IJ 0.11.0

author_association: CONTRIBUTOR
user: login: sbouchet
created_at: 2025-04-01T15:32:27Z
body: > > integration tests fail to import properly Maven projects as already reported here : [#1343](https://github.com/redhat-developer/intellij-quarkus/issues/1343)
> 
> This one is now fixed, but i get new errors from unit test that was ok before. it seems related to LSP4IJ nightly builds, because this test does not fails with LSP4IJ 0.11.0

above is fixed in #1440 
author_association: CONTRIBUTOR

Diff:
diff --git a/.github/workflows/IJ-latest.yml b/.github/workflows/IJ-latest.yml
index bc84e70b3..aa80e3242 100644
--- a/.github/workflows/IJ-latest.yml
+++ b/.github/workflows/IJ-latest.yml
@@ -33,9 +33,9 @@ jobs:
       - name: Build with Gradle
         run: |
           LATEST_EAP_SNAPSHOT=$(./gradlew printProductsReleases | grep 'IC-' | head -n 1 | cut -d'-' -f2)
+          echo "building using latest EAP version $LATEST_EAP_SNAPSHOT"
           ./gradlew check --continue -PplatformVersion=$LATEST_EAP_SNAPSHOT
 
-
       - name: Collect Tests Result
         uses: actions/upload-artifact@v4
         if: always()
diff --git a/.github/workflows/itests.yml b/.github/workflows/itests.yml
index 8c37dca0a..5cc3d34ac 100644
--- a/.github/workflows/itests.yml
+++ b/.github/workflows/itests.yml
@@ -36,31 +36,32 @@ jobs:
         path: build/screenshots/
         if-no-files-found: 'ignore'
       if: always()
-      
-  build-macos:
-    runs-on: macos-latest
 
-    steps:
-    - uses: actions/checkout@v4
-    - name: Set up JDK 17
-      uses: actions/setup-java@v4
-      with:
-        distribution: temurin
-        java-version: 17
-    - name: Run integration tests
-      run: ./gradlew integrationTest
-    - uses: actions/upload-artifact@v4
-      with:
-        name: ${{ runner.os }}-integration-test-reports
-        path: build/reports/tests/integrationTest
-      if: always()
-    - name: Archiving screenshots
-      uses: actions/upload-artifact@v4
-      with:
-        name: ${{ runner.os }}-screenshots
-        path: build/screenshots/
-        if-no-files-found: 'ignore'
-      if: always()
+# disabled. see https://github.com/redhat-developer/intellij-quarkus/issues/1350
+#  build-macos:
+#    runs-on: macos-latest
+#
+#    steps:
+#    - uses: actions/checkout@v4
+#    - name: Set up JDK 17
+#      uses: actions/setup-java@v4
+#      with:
+#        distribution: temurin
+#        java-version: 17
+#    - name: Run integration tests
+#      run: ./gradlew integrationTest
+#    - uses: actions/upload-artifact@v4
+#      with:
+#        name: ${{ runner.os }}-integration-test-reports
+#        path: build/reports/tests/integrationTest
+#      if: always()
+#    - name: Archiving screenshots
+#      uses: actions/upload-artifact@v4
+#      with:
+#        name: ${{ runner.os }}-screenshots
+#        path: build/screenshots/
+#        if-no-files-found: 'ignore'
+#      if: always()
       
   build-windows:
     runs-on: windows-latest
diff --git a/build.gradle.kts b/build.gradle.kts
index e5b03a45b..9155d6246 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -57,10 +57,8 @@ sourceSets {
         java.srcDir("intellij-community/platform/external-system-impl/testSrc")
         java.srcDir("intellij-community/platform/lang-impl/testSources")
         java.srcDir("intellij-community/platform/testFramework/extensions/src")
-        java.srcDir("intellij-community/plugins/gradle/src")
         java.srcDir("intellij-community/plugins/gradle/testSources")
         java.srcDir("intellij-community/plugins/gradle/tooling-extension-impl/testSources")
-        java.srcDir("intellij-community/plugins/maven/src/test/java")
         java.srcDir("intellij-community/plugins/maven/testFramework/src")
         resources.srcDir("src/test/resources")
     }
@@ -69,7 +67,7 @@ sourceSets {
         java.srcDir("src/it/java")
         resources.srcDir("src/it/resources")
         compileClasspath += sourceSets.main.get().compileClasspath + sourceSets.test.get().compileClasspath
-        runtimeClasspath += output + compileClasspath + sourceSets.test.get().runtimeClasspath + sourceSets.test.get().runtimeClasspath
+        runtimeClasspath += output + compileClasspath + sourceSets.test.get().runtimeClasspath
     }
 }
 
@@ -102,7 +100,6 @@ dependencies {
         println("bundledPlugins: $platformBundledPlugins")
         println("marketplacePlugins: $platformPlugins")
         pluginVerifier()
-        instrumentationTools()
         testFramework(TestFrameworkType.Plugin.Java)
     }
 
@@ -151,21 +148,7 @@ dependencies {
         builtBy("copyDeps")
     })
 
-    implementation(libs.annotations) // to build against platform <= 2023.2 and gradle intellij plugin > 2.0
-
-    // And now for some serious HACK!!!
-    // Starting with 2023.1, all gradle tests fail importing projects with a:
-    // com.intellij.openapi.externalSystem.model.ExternalSystemException: Unable to load class 'org.codehaus.plexus.logging.Logger'
-    // Hence adding a jar containing the missing class, to the test classpath
-    // The version matches the jar found in the IJ version used to compile the project
-    // This is so wrong/ridiculous!
-    testImplementation("org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.4")
-
-    testImplementation("org.assertj:assertj-core:3.19.0")
-
-    testImplementation("org.opentest4j:opentest4j:1.3.0")
-
-    testImplementation("junit:junit:4.13.2")
+    testImplementation(libs.junit)
 }
 
 // Set the JVM language level used to build the project. Use Java 11 for 2020.3+, and Java 17 for 2022.2+.
@@ -251,17 +234,13 @@ val integrationTest by intellijPlatformTesting.testIde.registering {
         classpath = sourceSets["integrationTest"].runtimeClasspath
         outputs.upToDateWhen { false }
         mustRunAfter(tasks["test"])
-        systemProperty ("debug-retrofit", "enable")
-    }
-    plugins {
-        robotServerPlugin("0.11.23")
     }
 
     dependencies {
-        testImplementation("com.redhat.devtools.intellij:intellij-common-ui-test-library:0.4.4-SNAPSHOT")
-        testImplementation("com.squareup.retrofit2:retrofit:2.11.0")
-        testImplementation("com.squareup.retrofit2:converter-gson:2.11.0")
-        testImplementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
+        testRuntimeOnly(libs.junit.jupiter.engine)
+        testImplementation(libs.junit.platform.launcher)
+        testImplementation(libs.junit.jupiter.api)
+        testImplementation(libs.devtools.common.ui.test)
     }
 }
 
@@ -344,7 +323,6 @@ tasks {
 // https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-tasks.html#runIdeForUiTests
 val runIdeForUiTests by intellijPlatformTesting.runIde.registering {
     task {
-        systemProperty ("debug-retrofit", "enable")
         jvmArgumentProviders += CommandLineArgumentProvider {
             listOf(
                 "-Drobot-server.port=8580",
@@ -355,7 +333,7 @@ val runIdeForUiTests by intellijPlatformTesting.runIde.registering {
         }
     }
     plugins {
-        robotServerPlugin("0.11.23")
+        robotServerPlugin()
     }
 }
 
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 2f6dbf9e1..405876e7a 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,6 +1,9 @@
 [versions]
 # libraries
-annotations = "24.0.1"
+junit = "4.13.2"
+junit-platform = "1.11.3"
+junit-jupiter = "5.11.3"
+devtools-common-ui-test = "0.4.4-SNAPSHOT"
 
 # plugins
 testlogger = "4.0.0"
@@ -8,9 +11,12 @@ kotlin = "2.0.20"
 changelog = "2.2.0"
 gradleIntelliJPlugin = "2.2.1"
 
-
 [libraries]
-annotations = { group = "org.jetbrains", name = "annotations", version.ref = "annotations" }
+junit = { group = "junit", name = "junit", version.ref = "junit" }
+junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junit-platform" }
+junit-jupiter-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit-jupiter" }
+junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit-jupiter" }
+devtools-common-ui-test = { group = "com.redhat.devtools.intellij", name = "intellij-common-ui-test-library", version.ref = "devtools-common-ui-test" }
 
 [plugins]
 changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" }
diff --git a/src/it/java/org/jboss/tools/intellij/quarkus/fixtures/dialogs/project/pages/QuarkusNewProjectFirstPage.java b/src/it/java/org/jboss/tools/intellij/quarkus/fixtures/dialogs/project/pages/QuarkusNewProjectFirstPage.java
index 4223455f9..51878463b 100644
--- a/src/it/java/org/jboss/tools/intellij/quarkus/fixtures/dialogs/project/pages/QuarkusNewProjectFirstPage.java
+++ b/src/it/java/org/jboss/tools/intellij/quarkus/fixtures/dialogs/project/pages/QuarkusNewProjectFirstPage.java
@@ -12,12 +12,18 @@
 
 import com.intellij.remoterobot.RemoteRobot;
 import com.intellij.remoterobot.data.RemoteComponent;
+import com.intellij.remoterobot.fixtures.ComboBoxFixture;
 import com.intellij.remoterobot.fixtures.DefaultXpath;
 import com.intellij.remoterobot.fixtures.FixtureName;
+import com.redhat.devtools.intellij.commonuitest.UITestRunner;
 import com.redhat.devtools.intellij.commonuitest.fixtures.dialogs.project.pages.NewProjectFirstPage;
 import org.jboss.tools.intellij.quarkus.utils.XPathDefinitions;
 import org.jetbrains.annotations.NotNull;
 
+import java.time.Duration;
+
+import static com.intellij.remoterobot.search.locators.Locators.byXpath;
+
 /**
  * New project dialog fixture
  *
@@ -29,4 +35,12 @@ public class QuarkusNewProjectFirstPage extends NewProjectFirstPage {
     public QuarkusNewProjectFirstPage(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {
         super(remoteRobot, remoteComponent);
     }
+
+    @Override
+    public ComboBoxFixture getProjectJdkComboBox() {
+        if (UITestRunner.getIdeaVersionInt() >= 20241) {
+            return comboBox(byXpath(XPathDefinitions.PROJECT_SDK_COMBOBOX_PROJECT_WIZARD), Duration.ofSeconds(10));
+        }
+        throw new UnsupportedOperationException("Get Project SDK ComboBox is not supported yet for IDEA version " + UITestRunner.getIdeaVersionInt());
+    }
 }
\ No newline at end of file
diff --git a/src/it/java/org/jboss/tools/intellij/quarkus/tests/AbstractQuarkusTest.java b/src/it/java/org/jboss/tools/intellij/quarkus/tests/AbstractQuarkusTest.java
index 31f2f1744..06954b608 100644
--- a/src/it/java/org/jboss/tools/intellij/quarkus/tests/AbstractQuarkusTest.java
+++ b/src/it/java/org/jboss/tools/intellij/quarkus/tests/AbstractQuarkusTest.java
@@ -26,14 +26,14 @@
  * @author zcervink@redhat.com
  */
 @ExtendWith(ScreenshotAfterTestFailExtension.class)
-abstract public class AbstractQuarkusTest {
+public abstract class AbstractQuarkusTest {
     protected static RemoteRobot remoteRobot;
     private static boolean intelliJHasStarted = false;
 
     @BeforeAll
     protected static void startIntelliJ() {
         if (!intelliJHasStarted) {
-            remoteRobot = UITestRunner.runIde(IntelliJVersion.COMMUNITY_V_2023_2, 8580);
+            remoteRobot = UITestRunner.runIde(IntelliJVersion.COMMUNITY_V_2024_3, 8580);
             intelliJHasStarted = true;
             Runtime.getRuntime().addShutdownHook(new CloseIntelliJBeforeQuit());
 
diff --git a/src/it/java/org/jboss/tools/intellij/quarkus/tests/BasicTest.java b/src/it/java/org/jboss/tools/intellij/quarkus/tests/BasicTest.java
index f35eaf925..611607ffb 100644
--- a/src/it/java/org/jboss/tools/intellij/quarkus/tests/BasicTest.java
+++ b/src/it/java/org/jboss/tools/intellij/quarkus/tests/BasicTest.java
@@ -11,25 +11,18 @@
 package org.jboss.tools.intellij.quarkus.tests;
 
 import com.intellij.remoterobot.RemoteRobot;
-import com.intellij.remoterobot.fixtures.CommonContainerFixture;
 import com.intellij.remoterobot.fixtures.ComponentFixture;
-import com.intellij.remoterobot.fixtures.JButtonFixture;
 import com.intellij.remoterobot.fixtures.JTextFieldFixture;
-import com.intellij.remoterobot.fixtures.JTreeFixture;
-import com.intellij.remoterobot.utils.WaitForConditionTimeoutException;
-import com.redhat.devtools.intellij.commonuitest.UITestRunner;
 import com.redhat.devtools.intellij.commonuitest.fixtures.dialogs.FlatWelcomeFrame;
 import com.redhat.devtools.intellij.commonuitest.fixtures.dialogs.project.NewProjectDialogWizard;
 import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.MainIdeWindow;
 import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.idestatusbar.IdeStatusBar;
 import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.BuildView;
 import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.ToolWindowPane;
-import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.ToolWindowsPane;
 import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.buildtoolpane.GradleBuildToolPane;
 import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.buildtoolpane.MavenBuildToolPane;
 import com.redhat.devtools.intellij.commonuitest.utils.constants.ProjectLocation;
 import com.redhat.devtools.intellij.commonuitest.utils.project.CreateCloseUtils;
-import com.redhat.devtools.intellij.commonuitest.utils.screenshot.ScreenshotUtils;
 import org.jboss.tools.intellij.quarkus.fixtures.dialogs.project.pages.QuarkusNewProjectFinalPage;
 import org.jboss.tools.intellij.quarkus.fixtures.dialogs.project.pages.QuarkusNewProjectFirstPage;
 import org.jboss.tools.intellij.quarkus.fixtures.dialogs.project.pages.QuarkusNewProjectSecondPage;
@@ -48,8 +41,6 @@
 import java.time.Duration;
 
 import static com.intellij.remoterobot.search.locators.Locators.byXpath;
-import static com.intellij.remoterobot.utils.RepeatUtilsKt.waitFor;
-import static com.intellij.remoterobot.utils.RepeatUtilsKt.waitForIgnoringError;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -76,7 +67,7 @@ public void createBuildQuarkusMavenTest() {
         ToolWindowPane toolWindowPane = remoteRobot.find(ToolWindowPane.class, Duration.ofSeconds(10));
         toolWindowPane.openMavenBuildToolPane();
         MavenBuildToolPane mavenBuildToolPane = toolWindowPane.find(MavenBuildToolPane.class, Duration.ofSeconds(10));
-        mavenBuildToolPane.buildProject("install");
+        mavenBuildToolPane.buildProject("verify");
         boolean isBuildSuccessful = toolWindowPane.find(BuildView.class, Duration.ofSeconds(10)).isBuildSuccessful();
         assertTrue(isBuildSuccessful, "The build should be successful but is not.");
     }
@@ -99,29 +90,27 @@ private void createQuarkusProject(RemoteRobot remoteRobot, String projectName, B
         NewProjectDialogWizard newProjectDialogWizard = remoteRobot.find(NewProjectDialogWizard.class, Duration.ofSeconds(10));
         QuarkusNewProjectFirstPage quarkusNewProjectFirstPage = newProjectDialogWizard.find(QuarkusNewProjectFirstPage.class, Duration.ofSeconds(10));
         quarkusNewProjectFirstPage.selectNewProjectType("Quarkus");
-
         if (endpointURLType == EndpointURLType.CUSTOM) {
             ComponentFixture customEndpointURLJBRadioButton = remoteRobot.findAll(ComponentFixture.class, byXpath(XPathDefinitions.CUSTOM_ENDPOINT_URL_RADIO_BUTTON)).get(0);
             customEndpointURLJBRadioButton.click();
             JTextFieldFixture customEndpointURLJTextField = remoteRobot.findAll(JTextFieldFixture.class, byXpath(XPathDefinitions.CUSTOM_ENDPOINT_URL_TEXT_FIELD)).get(0);
             customEndpointURLJTextField.setText("https://code.quarkus.io");
         }
+        quarkusNewProjectFirstPage.setProjectSdkIfAvailable(JAVA_VERSION_FOR_QUARKUS_PROJECT);
         newProjectDialogWizard.next();
 
         QuarkusNewProjectSecondPage quarkusNewProjectSecondPage = newProjectDialogWizard.find(QuarkusNewProjectSecondPage.class, Duration.ofSeconds(10));
         quarkusNewProjectSecondPage.setBuildTool(buildTool);
         quarkusNewProjectSecondPage.setJavaVersion(JAVA_VERSION_FOR_QUARKUS_PROJECT);
         newProjectDialogWizard.next();
+
         newProjectDialogWizard.find(QuarkusNewProjectThirdPage.class, Duration.ofSeconds(10)); // wait for third page to be loaded
         newProjectDialogWizard.next();
 
-        waitForIgnoringError(Duration.ofMillis(1000L),() -> remoteRobot.callJs("true"));
-
         QuarkusNewProjectFinalPage quarkusNewProjectFinalPage = newProjectDialogWizard.find(QuarkusNewProjectFinalPage.class, Duration.ofSeconds(10));
         quarkusNewProjectFinalPage.setProjectName(projectName);
-
-        String QUARKUS_PROJECT_LOCATION = ProjectLocation.PROJECT_LOCATION + File.separator + projectName;
-        Path quarkusProjectDir = Paths.get(QUARKUS_PROJECT_LOCATION);
+        String quarkusProjectLocation = ProjectLocation.PROJECT_LOCATION + File.separator + projectName;
+        Path quarkusProjectDir = Paths.get(quarkusProjectLocation);
         boolean doesProjectDirExists = Files.exists(quarkusProjectDir);
         if (!doesProjectDirExists) {
             try {
@@ -130,52 +119,15 @@ private void createQuarkusProject(RemoteRobot remoteRobot, String projectName, B
                 throw new RuntimeException(e);
             }
         }
-
-        quarkusNewProjectFinalPage.setProjectLocation(QUARKUS_PROJECT_LOCATION);
-
+        quarkusNewProjectFinalPage.setProjectLocation(quarkusProjectLocation);
         newProjectDialogWizard.finish();
 
-        //minimizeProjectImportPopupIfItAppears();
-
         IdeStatusBar ideStatusBar = remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(10));
-        waitFor(Duration.ofSeconds(30), Duration.ofSeconds(3), "The project import did not finish in 5 minutes.", this::didProjectImportFinish);
+        ideStatusBar.waitUntilProjectImportIsComplete();
+        ideStatusBar.waitUntilAllBgTasksFinish();
 
-        //ideStatusBar.waitUntilProjectImportIsComplete();
-        ScreenshotUtils.takeScreenshot(remoteRobot);
         MainIdeWindow mainIdeWindow = remoteRobot.find(MainIdeWindow.class, Duration.ofSeconds(5));
         mainIdeWindow.maximizeIdeWindow();
-        ideStatusBar.waitUntilAllBgTasksFinish(500);
     }
 
-    private boolean didProjectImportFinish() {
-        try {
-            remoteRobot.find(ComponentFixture.class, byXpath(com.redhat.devtools.intellij.commonuitest.utils.constants.XPathDefinitions.ENGRAVED_LABEL), Duration.ofSeconds(1));
-        } catch (WaitForConditionTimeoutException e) {
-            return true;
-        }
-        return false;
-    }
-
-    private void minimizeProjectImportPopupIfItAppears() {
-        try {
-            waitForIgnoringError(Duration.ofSeconds(30), Duration.ofMillis(200), "Close the project import popup if it appears...", () -> {
-                remoteRobot.find(JButtonFixture.class, byXpath(XPathDefinitions.PROJECT_IMPORT_POPUP_MINIMIZE_BUTTON)).click();
-                return true;
-            });
-        } catch (Exception e) {
-            //suppress non-existing popup timeout
-        }
-    }
-
-    private void buildGradleProject(GradleBuildToolPane gradleBuildToolPane) {
-        gradleBuildToolPane.find(JTreeFixture.class, JTreeFixture.Companion.byType(), Duration.ofSeconds(30));
-        gradleBuildToolPane.expandAll();
-        gradleBuildToolPane.gradleTaskTree().findAllText("build").get(1).doubleClick();
-        if (UITestRunner.getIdeaVersionInt() >= 20221) {
-            remoteRobot.find(ToolWindowPane.class).find(BuildView.class).waitUntilBuildHasFinished();
-        } else {
-            remoteRobot.find(ToolWindowsPane.class).find(BuildView.class).waitUntilBuildHasFinished();
-        }
-        remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(10)).waitUntilAllBgTasksFinish();
-    }
 }
\ No newline at end of file
diff --git a/src/it/java/org/jboss/tools/intellij/quarkus/utils/XPathDefinitions.java b/src/it/java/org/jboss/tools/intellij/quarkus/utils/XPathDefinitions.java
index 7aae259db..fc3522309 100644
--- a/src/it/java/org/jboss/tools/intellij/quarkus/utils/XPathDefinitions.java
+++ b/src/it/java/org/jboss/tools/intellij/quarkus/utils/XPathDefinitions.java
@@ -11,17 +11,27 @@
 
 package org.jboss.tools.intellij.quarkus.utils;
 
+import org.intellij.lang.annotations.Language;
+
 /**
  * XPath definitions
  *
  * @author zcervink@redhat.com
  */
 public class XPathDefinitions {
-    public static final String PROJECT_IMPORT_POPUP_MINIMIZE_BUTTON = "//div[@text='Background']";
+    @Language("XPath")
     public static final String DIALOG_ROOT_PANE = "//div[@class='DialogRootPane']";
+    @Language("XPath")
     public static final String CUSTOM_ENDPOINT_URL_RADIO_BUTTON = "//div[@accessiblename='Custom:' and @class='JBRadioButton' and @text='Custom:']";
+    @Language("XPath")
     public static final String CUSTOM_ENDPOINT_URL_TEXT_FIELD = "//div[@class='BorderlessTextField']";
+    @Language("XPath")
     public static final String SET_BUILD_TOOL_COMBO_BOX = "//div[@accessiblename='Tool:' and @class='ComboBox']";
+    @Language("XPath")
     public static final String PROJECT_SETTINGS_COMPONENTS = "//div[@class='NamePathComponent']/*";
+    @Language("XPath")
     public static final String JAVA_VERSION_COMBO_BOX = "//div[@accessiblename='Java version:' and @class='ComboBox']";
+    @Language("XPath")
+    public static final String PROJECT_SDK_COMBOBOX_PROJECT_WIZARD = "//div[@class='JdkComboBox']";
+
 }
diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/buildtool/maven/MavenToolDelegate.java b/src/main/java/com/redhat/devtools/intellij/quarkus/buildtool/maven/MavenToolDelegate.java
index c988a7572..468d180fa 100644
--- a/src/main/java/com/redhat/devtools/intellij/quarkus/buildtool/maven/MavenToolDelegate.java
+++ b/src/main/java/com/redhat/devtools/intellij/quarkus/buildtool/maven/MavenToolDelegate.java
@@ -15,8 +15,8 @@
 import com.intellij.openapi.application.ReadAction;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.progress.ProgressIndicator;
+import com.intellij.openapi.project.DumbAwareRunnable;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectUtil;
 import com.intellij.openapi.roots.ModuleRootManager;
 import com.intellij.openapi.vfs.VfsUtilCore;
 import com.intellij.openapi.vfs.VirtualFile;
@@ -35,21 +35,17 @@
 import org.jetbrains.idea.maven.model.MavenArtifact;
 import org.jetbrains.idea.maven.model.MavenArtifactInfo;
 import org.jetbrains.idea.maven.model.MavenId;
-import org.jetbrains.idea.maven.project.MavenGeneralSettings;
 import org.jetbrains.idea.maven.project.MavenImportListener;
 import org.jetbrains.idea.maven.project.MavenProject;
 import org.jetbrains.idea.maven.project.MavenProjectsManager;
 import org.jetbrains.idea.maven.server.MavenEmbedderWrapper;
+import org.jetbrains.idea.maven.server.MavenServerManager;
 import org.jetbrains.idea.maven.utils.MavenUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.*;
 
-import static com.redhat.devtools.intellij.quarkus.buildtool.maven.MavenWrapperUtils.getWrapperDistributionUrl;
-
 public class MavenToolDelegate implements BuildToolDelegate {
     private static final Logger LOGGER = LoggerFactory.getLogger(MavenToolDelegate.class);
 
@@ -76,30 +72,12 @@ public String getDisplay() {
     @Override
     public void processImport(Module module) {
         Project project = module.getProject();
-        VirtualFile pomFile = null;
         VirtualFile[] contentRoots = ModuleRootManager.getInstance(module).getContentRoots();
-        for (VirtualFile contentRoot : contentRoots) {
-            VirtualFile child = contentRoot.findChild("pom.xml");
-            if (child != null) {
-                pomFile = child;
-                break;
-            }
-        }
-
-        if (pomFile != null) {
+        Arrays.stream(contentRoots).map(contentRoot -> contentRoot.findChild("pom.xml")).filter(Objects::nonNull).findFirst().ifPresent(pomFile -> MavenUtil.runWhenInitialized(project, (DumbAwareRunnable) () -> {
             MavenProjectsManager mavenProjectsManager = MavenProjectsManager.getInstance(project);
             mavenProjectsManager.addManagedFiles(Collections.singletonList(pomFile));
-            MavenGeneralSettings mavenSettings = mavenProjectsManager.getGeneralSettings();
-            //TODO Once 2023-3 is the minimal required version, the following code can be removed
-            var distributionUrl = getWrapperDistributionUrl(ProjectUtil.guessProjectDir(project));
-            if (distributionUrl != null) {
-                String mavenHome = mavenSettings.getMavenHome();
-                String WRAPPED_MAVEN = "Use Maven wrapper"; //MavenServerManager.WRAPPED_MAVEN was removed in 2023.3 without any deprecation warning!
-                if (!WRAPPED_MAVEN.equals(mavenHome)) {
-                    mavenSettings.setMavenHome(WRAPPED_MAVEN);
-                }
-            }
-        }
+        }));
+
     }
 
     private void getDeploymentFiles(Module module, MavenProject mavenProject, List<VirtualFile>[] result, ProgressIndicator progressIndicator) {
@@ -176,10 +154,7 @@ private boolean processDependency(MavenProject mavenProject, List<VirtualFile>[]
     private Set<MavenArtifact> resolveDeploymentArtifacts(Module module, MavenProject mavenProject, Set<MavenId> deploymentIds, String classifier, ProgressIndicator progressIndicator) {
         Set<MavenArtifact> deploymentArtifacts = new HashSet<>();
         try {
-            MavenEmbedderWrapper serverWrapper = createEmbedderWrapper(module.getProject(), mavenProject.getDirectory());
-            if (serverWrapper == null) {
-                return Collections.emptySet();
-            }
+            MavenEmbedderWrapper serverWrapper = MavenServerManager.getInstance().createEmbedder(module.getProject(), true, mavenProject.getDirectory());
             if (classifier != null) {
                 for (MavenId id : deploymentIds) {
                     deploymentArtifacts.add(serverWrapper.resolve(new MavenArtifactInfo(id, "jar", classifier), mavenProject.getRemoteRepositories()));
@@ -188,10 +163,10 @@ private Set<MavenArtifact> resolveDeploymentArtifacts(Module module, MavenProjec
                 for (var deploymentId : deploymentIds) {
                     boolean shouldResolveArtifactTransitively = BuildToolDelegate.shouldResolveArtifactTransitively(deploymentId);
                     progressIndicator.checkCanceled();
-                    progressIndicator.setText2("Resolving " + (shouldResolveArtifactTransitively ? " (Transitevely) " : "") + "'" + deploymentId + "'");
+                    progressIndicator.setText2("Resolving " + (shouldResolveArtifactTransitively ? " (Transitively) " : "") + "'" + deploymentId + "'");
                     if (shouldResolveArtifactTransitively) {
                         // Resolving the deployment artifact and their dependencies
-                        List<MavenArtifactInfo> infos = Arrays.asList(new MavenArtifactInfo(deploymentId, "jar", classifier));
+                        List<MavenArtifactInfo> infos = List.of(new MavenArtifactInfo(deploymentId, "jar", classifier));
                         List<MavenArtifact> resolvedArtifacts = serverWrapper.resolveArtifactTransitively(infos, mavenProject.getRemoteRepositories()).mavenResolvedArtifacts;
                         for (var resolvedArtifact : resolvedArtifacts) {
                             addDeploymentArtifact(resolvedArtifact, deploymentArtifacts);
@@ -215,50 +190,6 @@ private static void addDeploymentArtifact(MavenArtifact resolvedArtifact, Set<Ma
         }
     }
 
-    /**
-     * Returns a {@code MavenEmbedderWrapper} instance for the given project and working directory.
-     * This code is using reflection to get the instance of the {@code MavenServerManager} and calls
-     * {@code createEmbedder} on it (MavenServerManager.getInstance().createEmbedder()).
-     * The instance that is created is then returned.
-     * <p>
-     * This code can be removed once the minimum version gets IC-2023.1.
-     *
-     * <ul>
-     *     <li>< IC-2023.1: MavenServerManager is an abstract class</li>
-     *     <li>>= IC-2023.1: MavenServerManager is an interface</li>
-     * </ul>
-     *
-     * @param project
-     * @param workingDirectory
-     * @return
-     */
-    private MavenEmbedderWrapper createEmbedderWrapper(Project project, String workingDirectory) {
-        try {
-            Class<?> clazz = Class.forName("org.jetbrains.idea.maven.server.MavenServerManager");
-            Object manager = clazz
-                    .getMethod("getInstance")
-                    .invoke(clazz);
-            if (manager == null) {
-                return null;
-            }
-            Method createEmbedderMethod = clazz.getMethod(
-                    "createEmbedder",
-                    Project.class,
-                    Boolean.TYPE,
-                    String.class,
-                    String.class);
-            return (MavenEmbedderWrapper) createEmbedderMethod.invoke(
-                    manager,
-                    project,
-                    false,
-                    workingDirectory,
-                    workingDirectory);
-        } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |
-                 InvocationTargetException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
     @Override
     public RunnerAndConfigurationSettings getConfigurationDelegate(Module module, QuarkusRunConfiguration configuration, @Nullable Integer debugPort) {
         RunnerAndConfigurationSettings settings = RunManager.getInstance(module.getProject()).createConfiguration(module.getName() + " Quarkus (Maven)", MavenRunConfigurationType.class);
diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/lang/QuarkusPropertyClassNameCompletionRemover.java b/src/main/java/com/redhat/devtools/intellij/quarkus/lang/QuarkusPropertyClassNameCompletionRemover.java
index 770463ace..024ccbcb8 100644
--- a/src/main/java/com/redhat/devtools/intellij/quarkus/lang/QuarkusPropertyClassNameCompletionRemover.java
+++ b/src/main/java/com/redhat/devtools/intellij/quarkus/lang/QuarkusPropertyClassNameCompletionRemover.java
@@ -39,7 +39,7 @@ public QuarkusPropertyClassNameCompletionRemover() {
         this.extend(CompletionType.BASIC, PlatformPatterns.psiElement(PropertyValueImpl.class).with(APPLICATION_PROPERTIES), new CompletionProvider<CompletionParameters>() {
             @Override
             protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) {
-                    result.stopHere();
+                result.stopHere();
             }
         });
     }
diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/telemetry/TelemetryManager.java b/src/main/java/com/redhat/devtools/intellij/quarkus/telemetry/TelemetryManager.java
index 7195f9bb8..65b20b35b 100644
--- a/src/main/java/com/redhat/devtools/intellij/quarkus/telemetry/TelemetryManager.java
+++ b/src/main/java/com/redhat/devtools/intellij/quarkus/telemetry/TelemetryManager.java
@@ -16,6 +16,7 @@
 import com.intellij.ide.plugins.PluginManager;
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.extensions.DefaultPluginDescriptor;
 import com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder;
 import com.redhat.devtools.intellij.telemetry.core.util.Lazy;
 import org.jetbrains.annotations.NotNull;
@@ -33,7 +34,15 @@ public class TelemetryManager implements Disposable {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TelemetryManager.class);
 
-    private final Lazy<TelemetryMessageBuilder> builder = new Lazy<>(() -> new TelemetryMessageBuilder(PluginManager.getPluginByClass(this.getClass())));
+    private final Lazy<TelemetryMessageBuilder> builderInstance;
+
+    private TelemetryManager() {
+        if (!ApplicationManager.getApplication().isUnitTestMode()) {
+            builderInstance = new Lazy<>(() -> new TelemetryMessageBuilder(PluginManager.getPluginByClass(this.getClass())));
+        } else {
+            builderInstance = new Lazy<>(() -> new TelemetryMessageBuilder(new DefaultPluginDescriptor("")));
+        }
+    }
 
     private boolean hasError;
 
@@ -114,7 +123,7 @@ private TelemetryMessageBuilder getMessageBuilder() {
             return null;
         }
         try {
-            return builder.get();
+            return builderInstance.get();
         }
         catch(Exception e) {
             LOGGER.warn("Error while creating TelemetryMessageBuilder instance.", e);
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 82aa3e2b8..d754a0353 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -441,7 +441,6 @@
         <framework.detector implementation="com.redhat.devtools.intellij.qute.facet.QuteFrameworkDetector"/>
         <fileType name="Qute_"
                   language="Qute_"
-                  instance="QUTE"
                   extensions="qute.html;qute.htm;qute.json;qute.txt;qute.yaml;qute.yml"
                   implementationClass="com.redhat.devtools.intellij.qute.lang.QuteFileType"/>
         <lang.fileViewProviderFactory language="Qute_"
@@ -762,8 +761,6 @@
 
     </extensions>
 
-    <application-components>
-    </application-components>
     <module-components>
         <component>
             <implementation-class>com.redhat.devtools.intellij.quarkus.search.QuarkusModuleComponent
diff --git a/src/test/java/com/redhat/devtools/intellij/MavenModuleImportingTestCase.java b/src/test/java/com/redhat/devtools/intellij/MavenModuleImportingTestCase.java
index a5f821c12..1fba57182 100644
--- a/src/test/java/com/redhat/devtools/intellij/MavenModuleImportingTestCase.java
+++ b/src/test/java/com/redhat/devtools/intellij/MavenModuleImportingTestCase.java
@@ -19,38 +19,29 @@
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.pom.java.LanguageLevel;
 import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
-import com.intellij.testFramework.builders.ModuleFixtureBuilder;
 import com.intellij.testFramework.fixtures.*;
 import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.utils.IPsiUtils;
 import com.redhat.devtools.intellij.lsp4mp4ij.psi.internal.core.ls.PsiUtilsLSImpl;
+import kotlin.coroutines.EmptyCoroutineContext;
+import kotlinx.coroutines.BuildersKt;
 import org.apache.commons.io.FileUtils;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public abstract class MavenModuleImportingTestCase extends MavenImportingTestCase {
 
   protected TestFixtureBuilder<IdeaProjectTestFixture> myProjectBuilder;
 
   protected void setUpFixtures() throws Exception {
-    //myTestFixture = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName()).getFixture();
-    //myTestFixture.setUp();
     myProjectBuilder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
     final JavaTestFixtureFactory factory = JavaTestFixtureFactory.getFixtureFactory();
-    ModuleFixtureBuilder moduleBuilder = myProjectBuilder.addModule(JavaModuleFixtureBuilder.class);
+    myProjectBuilder.addModule(JavaModuleFixtureBuilder.class);
     myTestFixture = factory.createCodeInsightFixture(myProjectBuilder.getFixture());
     myTestFixture.setUp();
-    LanguageLevelProjectExtension.getInstance(myTestFixture.getProject()).setLanguageLevel(LanguageLevel.JDK_1_6);
-  }
-  protected Module createJavaModule(final String name) throws Exception {
-    ModuleFixture moduleFixture = myProjectBuilder.addModule(JavaModuleFixtureBuilder.class).getFixture();
-    moduleFixture.setUp();
-    Module module = myProjectBuilder.addModule(JavaModuleFixtureBuilder.class).getFixture().getModule();
-    return module;
+    LanguageLevelProjectExtension.getInstance(myTestFixture.getProject()).setLanguageLevel(LanguageLevel.JDK_17);
   }
 
   private static int counter = 0;
@@ -63,21 +54,23 @@ protected Module createJavaModule(final String name) throws Exception {
    */
   protected List<Module> createMavenModules(List<File> projectDirs) throws Exception {
     Project project = myTestFixture.getProject();
-    List<VirtualFile> pomFiles = new ArrayList<>();
     for(File projectDir : projectDirs) {
       File moduleDir = new File(project.getBasePath(), projectDir.getName() + counter++);
       FileUtils.copyDirectory(projectDir, moduleDir);
       VirtualFile pomFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(moduleDir).findFileByRelativePath("pom.xml");
-      pomFiles.add(pomFile);
-
+      BuildersKt.runBlocking(
+          EmptyCoroutineContext.INSTANCE,
+          (scope, continuation) -> importProjectAsync(pomFile,continuation)
+      );
     }
-    importProjects(pomFiles.toArray(VirtualFile[]::new));
-    Module[] modules = ModuleManager.getInstance(myTestFixture.getProject()).getModules();
+
+    Module[] modules = ModuleManager.getInstance(project).getModules();
     for(Module module : modules) {
       setupJdkForModule(module.getName());
     }
-    return Arrays.asList(modules).stream().skip(1).collect(Collectors.toList());
+    return Arrays.stream(modules).skip(1).toList();
   }
+
   protected Module createMavenModule(File projectDir) throws Exception {
     List<Module> modules = createMavenModules(Collections.singletonList(projectDir));
     return modules.get(modules.size() - 1);
@@ -94,7 +87,10 @@ protected Module createMavenModule(String name, String xml) throws Exception {
     Module module = myTestFixture.getModule();
     File moduleDir = new File(module.getModuleFilePath()).getParentFile();
     VirtualFile pomFile = createPomFile(LocalFileSystem.getInstance().findFileByIoFile(moduleDir), xml);
-    importProject(pomFile);
+    BuildersKt.runBlocking(
+        EmptyCoroutineContext.INSTANCE,
+        (scope, continuation) -> importProjectAsync(pomFile,continuation)
+    );
     Module[] modules = ModuleManager.getInstance(myTestFixture.getProject()).getModules();
     if (modules.length > 0) {
       module = modules[modules.length - 1];
diff --git a/src/test/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/MicroProfileForJavaAssert.java b/src/test/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/MicroProfileForJavaAssert.java
index d7e4cd713..3a618709e 100644
--- a/src/test/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/MicroProfileForJavaAssert.java
+++ b/src/test/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/MicroProfileForJavaAssert.java
@@ -360,7 +360,7 @@ public static SymbolInformation si(String name, Range range) {
     public static void assertWorkspaceSymbols(Module javaProject, IPsiUtils utils, SymbolInformation... expected) {
         List<SymbolInformation> actual = PropertiesManagerForJava.getInstance()
                 .workspaceSymbols(PsiMicroProfileUtils.getProjectURI(javaProject), utils, new EmptyProgressIndicator());
-        MicroProfileForJavaAssert.assertWorkspaceSymbols(Arrays.asList(expected), actual);
+        assertWorkspaceSymbols(Arrays.asList(expected), actual);
     }
 
     /**
@@ -390,6 +390,6 @@ public static void assertWorkspaceSymbols(List<SymbolInformation> expected, List
      */
     public static void assertSymbolInformation(SymbolInformation expected, SymbolInformation actual) {
         assertEquals(expected.getName(), actual.getName());
-        assertEquals(expected.getLocation().getRange(), actual.getLocation().getRange());
+        assertEquals("Wrong location for " + expected.getName() + " at "+actual.getLocation(), expected.getLocation().getRange(), actual.getLocation().getRange());
     }
 }
diff --git a/src/test/java/com/redhat/devtools/intellij/quarkus/completion/MavenApplicationPropertiesCompletionTest.java b/src/test/java/com/redhat/devtools/intellij/quarkus/completion/MavenApplicationPropertiesCompletionTest.java
index d8f48b053..ec195f780 100644
--- a/src/test/java/com/redhat/devtools/intellij/quarkus/completion/MavenApplicationPropertiesCompletionTest.java
+++ b/src/test/java/com/redhat/devtools/intellij/quarkus/completion/MavenApplicationPropertiesCompletionTest.java
@@ -20,9 +20,10 @@
 import com.redhat.devtools.intellij.lsp4mp4ij.psi.core.MicroProfileMavenProjectName;
 import com.redhat.devtools.intellij.quarkus.QuarkusDeploymentSupport;
 import com.redhat.devtools.lsp4ij.client.indexing.ProjectIndexingManager;
-import org.junit.Test;
 
 import java.io.File;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * Project label tests
@@ -31,21 +32,41 @@
  */
 public class MavenApplicationPropertiesCompletionTest extends MavenEditorTest {
 
-	@Test
 	public void testBooleanCompletion() throws Exception {
 		Module module = loadMavenProject(MicroProfileMavenProjectName.config_quickstart, true);
 		VirtualFile propertiesFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(ModuleUtilCore.getModuleDirPath(module) + "/src/main/resources/application.properties");
-		codeInsightTestFixture.configureFromExistingVirtualFile(propertiesFile);
+        assertNotNull(propertiesFile);
+        codeInsightTestFixture.configureFromExistingVirtualFile(propertiesFile);
 		codeInsightTestFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_LINE_END);
 		codeInsightTestFixture.performEditorAction(IdeActions.ACTION_EDITOR_START_NEW_LINE);
 		insertLine("quarkus.arc.auto-inject-fields=");
         ProjectIndexingManager.waitForIndexingAll().thenRunAsync(() -> {
             LookupElement[] elements = codeInsightTestFixture.completeBasic();
             assertNotNull(elements);
-            assertEquals(2, elements.length);
+            List<LookupElement> lookupElements = Arrays.asList(elements);
+            assertEquals(2, lookupElements.size());
+            assertEquals("false", lookupElements.stream().sorted().toList().get(0).getLookupString());
+            assertEquals("true", lookupElements.stream().sorted().toList().get(1).getLookupString());
         });
 	}
 
+	public void testPropertyCompletion() throws Exception {
+		Module module = loadMavenProject(MicroProfileMavenProjectName.config_quickstart, true);
+		VirtualFile propertiesFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(ModuleUtilCore.getModuleDirPath(module) + "/src/main/resources/application.properties");
+		assertNotNull(propertiesFile);
+		codeInsightTestFixture.configureFromExistingVirtualFile(propertiesFile);
+		codeInsightTestFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_LINE_END);
+		codeInsightTestFixture.performEditorAction(IdeActions.ACTION_EDITOR_START_NEW_LINE);
+		insertLine("quarkus.application.na");
+		ProjectIndexingManager.waitForIndexingAll().thenRunAsync(() -> {
+			LookupElement[] elements = codeInsightTestFixture.completeBasic();
+			assertNotNull(elements);
+			List<LookupElement> lookupElements = Arrays.asList(elements);
+			assertEquals(1, lookupElements.size());
+			assertEquals("quarkus.application.name", lookupElements.get(0).getLookupString());
+		});
+	}
+
 	private void insertLine(String s) throws InterruptedException {
 		for (int i = 0; i < s.length(); ++i) {
 			codeInsightTestFixture.type(s.charAt(i));


Reviews:
user: login: angelozerr
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T17:00:34Z
user: login: sbouchet
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T08:43:53Z

Review comments:
diff_hunk: @@ -148,14 +148,12 @@ private synchronized static CompletableFuture<Void> internalUpdateClasspathWithQ
         }
         var project = module.getProject();
         final CompletableFuture<Void> future = new CompletableFuture<>();
-        CompletableFuture.runAsync(() -> {
-            Runnable task = () -> ProgressManager.getInstance().run(new Task.Backgroundable(project, "Adding Quarkus deployment dependencies to classpath...") {
+        MavenUtil.invokeAndWait(project, () -> ProgressManager.getInstance().run(new Task.Backgroundable(project, "Adding Quarkus deployment dependencies to classpath...") {
path: src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusDeploymentSupport.java
user: login: angelozerr
body: Your code seems blocking the Thread 'since you are using invokeAndWait. The current code uses runAsynch.
created_at: 2025-04-02T17:00:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -148,14 +148,12 @@ private synchronized static CompletableFuture<Void> internalUpdateClasspathWithQ
         }
         var project = module.getProject();
         final CompletableFuture<Void> future = new CompletableFuture<>();
-        CompletableFuture.runAsync(() -> {
-            Runnable task = () -> ProgressManager.getInstance().run(new Task.Backgroundable(project, "Adding Quarkus deployment dependencies to classpath...") {
+        MavenUtil.invokeAndWait(project, () -> ProgressManager.getInstance().run(new Task.Backgroundable(project, "Adding Quarkus deployment dependencies to classpath...") {
path: src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusDeploymentSupport.java
user: login: sbouchet
body: reverted this change.
created_at: 2025-04-03T08:43:53Z
author_association: CONTRIBUTOR

PR comments:
user: login: sonarqubecloud[bot]
created_at: 2025-04-03T08:43:50Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=redhat-developer_intellij-quarkus&pullRequest=1436) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=redhat-developer_intellij-quarkus&pullRequest=1436&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=redhat-developer_intellij-quarkus&pullRequest=1436&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=redhat-developer_intellij-quarkus&pullRequest=1436&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=redhat-developer_intellij-quarkus&pullRequest=1436&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=redhat-developer_intellij-quarkus&pullRequest=1436&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=redhat-developer_intellij-quarkus&pullRequest=1436)


author_association: NONE
user: login: angelozerr
created_at: 2025-04-04T07:53:42Z
body: LGTM.

Thanks @sbouchet !
author_association: CONTRIBUTOR