TypeFox / yang-lsp

A Language Server for YANG
http://www.yang-central.org
Apache License 2.0
52 stars 13 forks source link

yang-lsp process is failed on fault cases #192

Closed gorshkov-leonid closed 3 years ago

gorshkov-leonid commented 3 years ago

Hello, The problem is that yang-lsp process is failed on invalid data.
It is expected that LSP diagnostics are published.

Example: module.yang

module module {
    yang-version 1.1;
    namespace urn:ietf:params:xml:ns:yang:module;
    prefix module;

    include module;
}

submodule/module.yang

submodule module {
    yang-version 1.1;
    belongs-to  module{
        prefix module;
    }
}

Stacktrace:

SEVERE: Internal error: org.eclipse.emf.common.util.WrappedException: java.lang.ClassCastException: io.typefox.yang.yang.impl.SubmoduleImpl cannot be cast to io.typefox.yang.yang.Module
java.util.concurrent.CompletionException: org.eclipse.emf.common.util.WrappedException: java.lang.ClassCastException: io.typefox.yang.yang.impl.SubmoduleImpl cannot be cast to io.typefox.yang.yang.Module
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:607)
    at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:591)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
    at org.eclipse.xtext.ide.server.concurrent.WriteRequest.run(WriteRequest.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.eclipse.emf.common.util.WrappedException: java.lang.ClassCastException: io.typefox.yang.yang.impl.SubmoduleImpl cannot be cast to io.typefox.yang.yang.Module
    at org.eclipse.xtext.linking.lazy.LazyLinkingResource.getEObject(LazyLinkingResource.java:244)
    at org.eclipse.xtext.linking.lazy.LazyLinkingResource.doResolveLazyCrossReference(LazyLinkingResource.java:203)
    at org.eclipse.xtext.linking.lazy.LazyLinkingResource.resolveLazyCrossReference(LazyLinkingResource.java:162)
    at org.eclipse.xtext.linking.lazy.LazyLinkingResource.resolveLazyCrossReferences(LazyLinkingResource.java:148)
    at org.eclipse.xtext.EcoreUtil2.resolveLazyCrossReferences(EcoreUtil2.java:504)
    at org.eclipse.xtext.build.IncrementalBuilder$InternalStatefulIncrementalBuilder.lambda$launch$2(IncrementalBuilder.java:265)
    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
Caused by: java.lang.ClassCastException: io.typefox.yang.yang.impl.SubmoduleImpl cannot be cast to io.typefox.yang.yang.Module
    at io.typefox.yang.yang.impl.BelongsToImpl.eSet(BelongsToImpl.java:134)
    at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(BasicEObjectImpl.java:1071)
    at io.typefox.yang.scoping.Linker.link(Linker.java:52)
    at io.typefox.yang.scoping.ScopeContextProvider.getBelongingModule(ScopeContextProvider.java:319)
    at io.typefox.yang.scoping.ScopeContextProvider.getModuleName(ScopeContextProvider.java:303)
    at io.typefox.yang.scoping.ScopeContextProvider.getScopeContext(ScopeContextProvider.java:286)
    at io.typefox.yang.resource.YangResource.getEObject(YangResource.java:27)
    at org.eclipse.xtext.linking.lazy.LazyLinkingResource.getEObject(LazyLinkingResource.java:236)
    ... 25 more
dhuebner commented 3 years ago

Fixed