eclipse.jdt.ls icon indicating copy to clipboard operation
eclipse.jdt.ls copied to clipboard

assertion failed: Marker property value is too long

Open mattfbacon opened this issue 2 years ago • 14 comments

I'm trying to use JDTLS in Neovim. The project is an Android app using Gradle.

Here's the full error that I get:

assertion failed: Marker property value is too long: org.gradle.tooling.BuildActionFailureException: The supplied phased action failed with an exception.
        at org.gradle.tooling.internal.consumer.connection.PhasedActionAwareConsumerConnection.run(PhasedActionAwareConsumerConnection.java:58)
        at org.gradle.tooling.internal.consumer.connection.ParameterValidatingConsumerConnection.run(ParameterValidatingConsumerConnection.java:62)
        at org.gradle.tooling.internal.consumer.DefaultPhasedBuildActionExecuter$1.run(DefaultPhasedBuildActionExecuter.java:78)
        at org.gradle.tooling.internal.consumer.DefaultPhasedBuildActionExecuter$1.run(DefaultPhasedBuildActionExecuter.java:70)
        at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.run(LazyConsumerActionExecutor.java:143)
        at org.gradle.tooling.internal.consumer.connection.CancellableConsumerActionExecutor.run(CancellableConsumerActionExecutor.java:45)
        at org.gradle.tooling.internal.consumer.connection.ProgressLoggingConsumerActionExecutor.run(ProgressLoggingConsumerActionExecutor.java:61)
        at org.gradle.tooling.internal.consumer.connection.RethrowingErrorsConsumerActionExecutor.run(RethrowingErrorsConsumerActionExecutor.java:38)
        at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:67)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at java.base/java.lang.Thread.run(Thread.java:1589)
        at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)
        at org.gradle.tooling.internal.consumer.DefaultPhasedBuildActionExecuter.run(DefaultPhasedBuildActionExecuter.java:63)
        at org.gradle.tooling.internal.consumer.DefaultPhasedBuildActionExecuter.run(DefaultPhasedBuildActionExecuter.java:31)
        at org.eclipse.buildship.core.internal.workspace.EclipseModelUtils.runPhasedModelQuery(EclipseModelUtils.java:111)
        at org.eclipse.buildship.core.internal.workspace.EclipseModelUtils.runTasksAndQueryCompositeModelWithRuntimInfo(EclipseModelUtils.java:86)
        at org.eclipse.buildship.core.internal.workspace.EclipseModelUtils.runTasksAndQueryModels(EclipseModelUtils.java:60)
        at org.eclipse.buildship.core.internal.workspace.DefaultModelProvider.lambda$fetchEclipseProjectAndRunSyncTasks$4(DefaultModelProvider.java:75)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild$GradleConnectionOperation.runInToolingApi(DefaultGradleBuild.java:331)
        at org.eclipse.buildship.core.internal.operation.DefaultToolingApiOperationManager$WorkspaceRunnableAdapter.run(DefaultToolingApiOperationManager.java:58)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2380)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2405)
        at org.eclipse.buildship.core.internal.operation.DefaultToolingApiOperationManager.run(DefaultToolingApiOperationManager.java:39)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild.withConnection(DefaultGradleBuild.java:124)
        at org.eclipse.buildship.core.internal.workspace.DefaultModelProvider.lambda$fetchEclipseProjectAndRunSyncTasks$5(DefaultModelProvider.java:75)
        at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4853)
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
        at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
        at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4848)
        at org.eclipse.buildship.core.internal.workspace.DefaultModelProvider.getFromCache(DefaultModelProvider.java:98)
        at org.eclipse.buildship.core.internal.workspace.DefaultModelProvider.executeOperation(DefaultModelProvider.java:90)
        at org.eclipse.buildship.core.internal.workspace.DefaultModelProvider.fetchEclipseProjectAndRunSyncTasks(DefaultModelProvider.java:72)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild$SynchronizeOperation.runInToolingApi(DefaultGradleBuild.java:228)
        at org.eclipse.buildship.core.internal.operation.DefaultToolingApiOperationManager$WorkspaceRunnableAdapter.run(DefaultToolingApiOperationManager.java:58)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2380)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2405)
        at org.eclipse.buildship.core.internal.operation.DefaultToolingApiOperationManager.run(DefaultToolingApiOperationManager.java:39)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild$SynchronizeOperation.run(DefaultGradleBuild.java:194)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild.synchronize(DefaultGradleBuild.java:102)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild.synchronize(DefaultGradleBuild.java:88)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.startSynchronization(GradleProjectImporter.java:409)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.importDir(GradleProjectImporter.java:297)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.importToWorkspace(GradleProjectImporter.java:210)
        at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.importProjects(ProjectsManager.java:148)
        at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.initializeProjects(ProjectsManager.java:111)
        at org.eclipse.jdt.ls.core.internal.handlers.InitHandler$1.runInWorkspace(InitHandler.java:242)
        at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: org.gradle.cache.CacheOpenException: Could not open init generic class cache for initialization script '/home/matt/.cache/jdtls/config/org.eclipse.osgi/51/0/.cp/gradle/init/init.gradle' (/home/matt/.gradle/caches/7.3.3/scripts/cqg1ejjga62m6l95a1u1verba).
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:91)
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:43)
        at org.gradle.cache.internal.DefaultCacheFactory.doOpen(DefaultCacheFactory.java:103)
        at org.gradle.cache.internal.DefaultCacheFactory.open(DefaultCacheFactory.java:68)
        at org.gradle.cache.internal.DefaultCacheRepository$PersistentCacheBuilder.open(DefaultCacheRepository.java:117)
        at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler.compile(FileCacheBackedScriptClassCompiler.java:116)
        at org.gradle.groovy.scripts.internal.CrossBuildInMemoryCachingScriptClassCache.getOrCompile(CrossBuildInMemoryCachingScriptClassCache.java:50)
        at org.gradle.groovy.scripts.internal.BuildScopeInMemoryCachingScriptClassCompiler.compile(BuildScopeInMemoryCachingScriptClassCompiler.java:50)
        at org.gradle.groovy.scripts.DefaultScriptCompilerFactory$ScriptCompilerImpl.compile(DefaultScriptCompilerFactory.java:49)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:125)
        at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
        at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
        at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
        at org.gradle.configuration.DefaultInitScriptProcessor.process(DefaultInitScriptProcessor.java:50)
        at org.gradle.initialization.InitScriptHandler$1.run(InitScriptHandler.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.initialization.InitScriptHandler.executeScripts(InitScriptHandler.java:51)
        at org.gradle.initialization.InitScriptHandlingSettingsLoader.findAndLoadSettings(InitScriptHandlingSettingsLoader

mattfbacon avatar Jan 26 '23 19:01 mattfbacon

@mattfbacon Could you provide a project example reproducing the error? Could you reproduce the issue in VS Code?

snjeza avatar Jan 26 '23 23:01 snjeza

Cannot reproduce in VS Code using the redhat extension (the LS is broken in VS Code for a different reason but the LS at least starts properly).

For a minimal project that can reproduce, create a directory and add two empty files Main.java and build.gradle. Then open Main.java.

mattfbacon avatar Jan 27 '23 01:01 mattfbacon

I'm getting the same error.

jdsee avatar Mar 25 '23 23:03 jdsee

I've also been getting the same error with Neovim v0.9, and can't use JDTLS because of it. It also occurs with the minimal project that @mattfbacon provided (empty Main.java and build.gradle).

kylechui avatar May 01 '23 02:05 kylechui

@kylechui

I've also been getting the same error with Neovim v0.9, and can't use JDTLS because of it. It also occurs with the minimal project that mattfbacon provided (empty Main.java and build.gradle).

:eyes: What platform? Anything unique about your setup that might be a common point between us?

mattfbacon avatar May 01 '23 02:05 mattfbacon

I've been running on Linux (NixOS 22.11). TBH I feel like my setup would be quite unique so I'm not sure...

kylechui avatar May 01 '23 02:05 kylechui

Well if you are using NixOS then it should be reproducible??

mattfbacon avatar May 01 '23 04:05 mattfbacon

Yeah, although I just switched so I'm not 100% familiar with the ecosystem yet. I imagine if anyone wanted to reproduce this bug they would need to be using nixpkg as well.

Have you found any alternative? I've been using java-language-server but it doesnt recognize package statements well, and causes hundreds of errors in my codebase.

kylechui avatar May 01 '23 17:05 kylechui

I think that the issue for me might be due to the length of /path/to/project? Currently the server launches and works properly for files that are "closer" to my home directory, but the default directory that I work in (very nested) seems to crash the server with the same error in the original post.

EDIT: One of the things that I have changed is to add a -data value, although I'm not sure how relevant that is to this issue.

kylechui avatar May 26 '23 19:05 kylechui

I am having this issue as well on Windows 10

andresestrella avatar Sep 23 '23 07:09 andresestrella

UPDATE: apparently this prevents jdtls from figuring out what files are project files.

I'm having the same issue, it could indeed be triggered because the -data argument is too long. Using neovim, I simply decided to put the data directory in a subdir of the project directory. Here's my configuration if it helps:

local java_cwd = vim.fs.dirname(
    vim.fs.find({ "gradlew", ".git", "mvnw" }, { upward = true })[1]
)
local config = {
    on_attach = on_attach,
    capabilities = capabilities,
    cmd = {
        -- https://github.com/NixOS/nixpkgs/issues/232822#issuecomment-1564243667
        -- `-data` argument is necessary
        "jdt-language-server",
        "-data", java_cwd .. "/.jdtls",
    },
    root_dir = java_cwd,
}
local jdtls_group = vim.api.nvim_create_augroup("jdtls", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
    pattern = { "java" },
    callback = function()
        require "jdtls".start_or_attach(config)
    end,
    group = jdtls_group,
})

leana8959 avatar Jan 08 '24 20:01 leana8959

~~Interesting, that makes sense. Does the directory have to be unique per project?~~ Nevermind, obviously not because that config is global.

mattfbacon avatar Jan 09 '24 00:01 mattfbacon

@mattfbacon I think it has to be unique per project, at least for neovim. I forgot where I got this idea from, but check this out https://github.com/mfussenegger/nvim-jdtls/issues/459#issuecomment-1544027870 I've only seen configs where people use the current directory as a subdirectory in the global data directory, which makes it unique per project.

leana8959 avatar Jan 09 '24 12:01 leana8959

We also noticed the error assertion failed: Marker property value is too long seems to occur more frequently with gradle-managed android projects when opening it with vscode-java. This might be due to some specific android settings. Appreciate if anyone could share some android projects that can reproduce this issue.

testforstephen avatar Jan 09 '24 13:01 testforstephen