redhat-developer / quarkus-ls

Language server for Quarkus tooling
Eclipse Public License 2.0
44 stars 15 forks source link

java.lang.StackOverflowError while editing Quarkus extension #924

Closed fbricon closed 10 months ago

fbricon commented 10 months ago

Same exception as https://github.com/redhat-developer/intellij-quarkus/issues/1110 occurs when opening https://github.com/quarkiverse/quarkus-ironjacamar/blob/main/integration-tests/src/main/resources/application.properties

Params: {
    "name": "java.ls.error",
    "properties": {
        "message": "An internal error occurred during: \"MicroProfile properties collector\".",
        "exception": "An internal error occurred during: \"MicroProfile properties collector\".\nnull\njava.lang.StackOverflowError\n\tat org.eclipse.jdt.internal.core.JarPackageFragmentRoot.hashCode(JarPackageFragmentRoot.java:344)\n\tat org.eclipse.jdt.internal.core.PackageFragment.hashCode(PackageFragment.java:450)\n\tat org.eclipse.jdt.internal.core.AbstractClassFile.hashCode(AbstractClassFile.java:398)\n\tat org.eclipse.jdt.internal.core.JavaElement.hashCode(JavaElement.java:525)\n\tat java.base/java.util.Hashtable.get(Unknown Source)\n\tat org.eclipse.jdt.internal.core.util.LRUCache.get(LRUCache.java:381)\n\tat org.eclipse.jdt.internal.core.JavaModelCache.getInfo(JavaModelCache.java:144)\n\tat org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:2227)\n\tat org.eclipse.jdt.internal.core.ClassFile.existsUsingJarTypeCache(ClassFile.java:144)\n\tat org.eclipse.jdt.internal.core.NameLookup.seekTypesInBinaryPackage(NameLookup.java:1482)\n\tat org.eclipse.jdt.internal.core.NameLookup.seekTypes(NameLookup.java:1450)\n\tat org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:996)\n\tat org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:823)\n\tat org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:781)\n\tat org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:1074)\n\tat org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1692)\n\tat org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1778)\n\tat org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1678)\n\tat org.eclipse.lsp4mp.jdt.core.utils.JDTTypeUtils.findType(JDTTypeUtils.java:47)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:156)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.QuarkusConfigMappingProvider.populateConfigObject(QuarkusConfigMappingProvider.java:214)\n\tat com.redhat.microprofile.jdt.internal.quarkus.core.properties.

Additionally, the StackOverflowError cannot be cast to class java.lang.Exception :

java.lang.ClassCastException: class java.lang.StackOverflowError cannot be cast to class java.lang.Exception (java.lang.StackOverflowError and java.lang.Exception are in module java.base of loader 'bootstrap')
    at org.eclipse.lsp4mp.jdt.internal.core.ls.MicroProfileDelegateCommandHandler.getMicroProfileProjectInfo(MicroProfileDelegateCommandHandler.java:120)
    at org.eclipse.lsp4mp.jdt.internal.core.ls.MicroProfileDelegateCommandHandler.executeCommand(MicroProfileDelegateCommandHandler.java:58)
    at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:230)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:220)
    at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$4(JDTLanguageServer.java:599)
    at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
    at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Problem is here: https://github.com/redhat-developer/quarkus-ls/blob/0242c0969e807a5f8538ddadf6e2de60c924d36f/quarkus.jdt.ext/com.redhat.microprofile.jdt.quarkus/src/main/java/com/redhat/microprofile/jdt/internal/quarkus/core/properties/QuarkusConfigMappingProvider.java#L214

See fix: https://github.com/redhat-developer/intellij-quarkus/pull/1111/files