eclipse-xtext / eclipse-xtext/xtext

Serializing model resource fails with VS Code client

Open
#1,808 21 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Java
Stars
831
Forks
330
Avg merge
3d 7h
Merged PRs (30d)
12

Description

What I try to do:
I want to use the Xtext generator to have a serialized version of my AST next to the actual file, so I have implemented it like this:

override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
	val rset = new ResourceSetImpl
	val xmlResource = rset.createResource(resource.URI.appendFileExtension("xml"))
	xmlResource.contents.add(resource.contents.head)
	xmlResource.save(Collections.EMPTY_MAP)
}

When I open a file in VS Code now, I get these exceptions:

SEVERE: Internal error: java.lang.NullPointerException
java.util.concurrent.CompletionException: java.lang.NullPointerException
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331)
	at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
	at org.eclipse.xtext.ide.server.concurrent.WriteRequest.run(WriteRequest.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NullPointerException
	at org.my.dsl.generator.SglGenerator.doGenerate(SglGenerator.java:28)
	at org.eclipse.xtext.generator.GeneratorDelegate.doGenerate(GeneratorDelegate.java:43)
	at org.eclipse.xtext.generator.GeneratorDelegate.generate(GeneratorDelegate.java:34)
	at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.generate(IncrementalBuilder.java:340)
	at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.lambda$launch$2(IncrementalBuilder.java:277)
	at com.google.common.collect.Iterators$6.transform(Iterators.java:783)
	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47)
	at com.google.common.collect.FluentIterable.copyInto(FluentIterable.java:791)
	at org.eclipse.xtext.build.ClusteringStorageAwareResourceLoader.executeClustered(ClusteringStorageAwareResourceLoader.java:68)
	at org.eclipse.xtext.build.BuildContext.executeClustered(BuildContext.java:54)
	at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.launch(IncrementalBuilder.java:258)
	at org.eclipse.xtext.build.IncrementalBuilder.build(IncrementalBuilder.java:403)
	at org.eclipse.xtext.build.IncrementalBuilder.build(IncrementalBuilder.java:385)
	at org.eclipse.xtext.ide.server.ProjectManager.doBuild(ProjectManager.java:105)
	at org.eclipse.xtext.ide.server.ProjectManager.doInitialBuild(ProjectManager.java:96)
	at org.eclipse.xtext.ide.server.BuildManager.doInitialBuild(BuildManager.java:172)
	at org.eclipse.xtext.ide.server.WorkspaceManager.refreshWorkspaceConfig(WorkspaceManager.java:172)
	at org.eclipse.xtext.ide.server.WorkspaceManager.initialize(WorkspaceManager.java:145)
	at org.eclipse.xtext.ide.server.LanguageServerImpl.lambda$initialize$0(LanguageServerImpl.java:220)
	at org.eclipse.xtext.ide.server.concurrent.WriteRequest.run(WriteRequest.java:38)
	... 5 more

[Error - 14:16:20] Server initialization failed.
  Message: Internal error.
  Code: -32603 
java.util.concurrent.CompletionException: java.lang.NullPointerException
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331)
	at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
	at org.eclipse.xtext.ide.server.concurrent.WriteRequest.run(WriteRequest.java:44)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NullPointerException
	at org.my.dsl.sgl.generator.SglGenerator.doGenerate(SglGenerator.java:28)
	at org.eclipse.xtext.generator.GeneratorDelegate.doGenerate(GeneratorDelegate.java:43)
	at org.eclipse.xtext.generator.GeneratorDelegate.generate(GeneratorDelegate.java:34)
	at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.generate(IncrementalBuilder.java:340)
	at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.lambda$launch$2(IncrementalBuilder.java:277)
	at com.google.common.collect.Iterators$6.transform(Iterators.java:783)
	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47)
	at com.google.common.collect.FluentIterable.copyInto(FluentIterable.java:791)
	at org.eclipse.xtext.build.ClusteringStorageAwareResourceLoader.executeClustered(ClusteringStorageAwareResourceLoader.java:68)
	at org.eclipse.xtext.build.BuildContext.executeClustered(BuildContext.java:54)
	at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.launch(IncrementalBuilder.java:258)
	at org.eclipse.xtext.build.IncrementalBuilder.build(IncrementalBuilder.java:403)
	at org.eclipse.xtext.build.IncrementalBuilder.build(IncrementalBuilder.java:385)
	at org.eclipse.xtext.ide.server.ProjectManager.doBuild(ProjectManager.java:105)
	at org.eclipse.xtext.ide.server.ProjectManager.doInitialBuild(ProjectManager.java:96)
	at org.eclipse.xtext.ide.server.BuildManager.doInitialBuild(BuildManager.java:172)
	at org.eclipse.xtext.ide.server.WorkspaceManager.refreshWorkspaceConfig(WorkspaceManager.java:172)
	at org.eclipse.xtext.ide.server.WorkspaceManager.initialize(WorkspaceManager.java:145)
	at org.eclipse.xtext.ide.server.LanguageServerImpl.lambda$initialize$0(LanguageServerImpl.java:220)
	at org.eclipse.xtext.ide.server.concurrent.WriteRequest.run(WriteRequest.java:38)
	... 5 more

Any idea what I do wrong?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at org.my.dsl.generator.SglGenerator.doGenerate, especially line 28, and compare the ResourceSetImpl/createResource/save sequence with the VS Code initialization stack trace. Reproduce the failure when opening a file and trace which value is null; done means model serialization completes without the NullPointerException and the language server initializes successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, vscode
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.