eclipse-jdtls / eclipse.jdt.ls

Java language server
1.76k stars 394 forks source link

Symbols spontaneously cannot be resolved in test files #1535

Open dradtke opened 4 years ago

dradtke commented 4 years ago

Sometimes when editing a test, the language server will seemingly crash on me and start complaining that any import outside of the standard library or immediate project cannot be resolved. This is with a Gradle-based project that normally has no issues, and even when this does happen, it seems to be limited to test files, so at least it didn't actually crash.

The only error I can see in the logs, even when running with -Djdt.ls.debug=true, is this:

!ENTRY org.eclipse.buildship.core 2 0 2020-09-01 18:37:06.481             
!MESSAGE Cannot collect dependency scope information for launch configuration 1598985426469
!STACK 1                                                                      
org.eclipse.core.runtime.CoreException: The input type of the launch configuration does not exist
        at org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate.abort(JUnitLaunchConfigurationDelegate.java:752)
        at org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate.getTestTarget(JUnitLaunchConfigurationDelegate.java:746)
        at org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate.evaluateTests(JUnitLaunchConfigurationDelegate.java:347)
        at org.eclipse.buildship.core.internal.launch.SupportedLaunchConfigType$RelaxedJUnitLaunchConfigurationDelegate.evaluateTests(SupportedLaunchConfigType.java:139)
        at org.eclipse.buildship.core.internal.launch.SupportedLaunchConfigType$2.getSourceFolders(SupportedLaunchConfigType.java:70)
        at org.eclipse.buildship.core.internal.launch.SupportedLaunchConfigType.collectSourceFolders(SupportedLaunchConfigType.java:110)
        at org.eclipse.buildship.core.internal.launch.LaunchConfigurationScope.from(LaunchConfigurationScope.java:57)
        at org.eclipse.buildship.core.internal.launch.GradleClasspathProvider.filterUnusedDependencies(GradleClasspathProvider.java:71)
        at org.eclipse.buildship.core.internal.launch.GradleClasspathProvider.computeUnresolvedClasspath(GradleClasspathProvider.java:61)
        at org.eclipse.jdt.internal.launching.RuntimeClasspathProvider.computeUnresolvedClasspath(RuntimeClasspathProvider.java:60)
        at org.eclipse.jdt.launching.JavaRuntime.computeUnresolvedRuntimeClasspath(JavaRuntime.java:1647)                                                                
        at org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate.getClasspathAndModulepath(AbstractJavaLaunchConfigurationDelegate.java:463)
        at org.eclipse.jdt.ls.core.internal.commands.ProjectCommand$1.run(ProjectCommand.java:138)                                      
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)                                    
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317)                                                                                                                         
        at org.eclipse.jdt.ls.core.internal.commands.ProjectCommand.getClasspaths(ProjectCommand.java:135)                                     
        at org.eclipse.jdt.ls.core.internal.JDTDelegateCommandHandler.executeCommand(JDTDelegateCommandHandler.java:67)
        at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:215)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)                                                      
        at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:205)
        at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$3(JDTLanguageServer.java:495)              
        at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:75)
        at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)                                                                  
        at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)    
        at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)       
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)                    
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)                                         
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)                                           
!SUBENTRY 1 org.eclipse.jdt.junit.core 4 101 2020-09-01 18:37:06.482  
!MESSAGE The input type of the launch configuration does not exist

For context, I'm using Microsoft's java-debug extension to run tests, though that doesn't seem to be an issue here. I don't know what exactly is causing this, but I have a hunch it has to do with building the project and then switching branches.

snjeza commented 4 years ago

@dradtke could you attach a sample project reproducing the issue?

dradtke commented 4 years ago

Unfortunately, I ran into this at work, so I can't upload the code directly and I haven't been able to reliably reproduce it yet. If I can reproduce it reliably with small, personal sample project, I will upload that information here.

dradtke commented 4 years ago

So I was able to reproduce that error, though it doesn't seem to be as big of a problem as I thought, so I don't know what was causing the behavior earlier when a bunch of symbols were suddenly unrecognized.

I see this exception in .log whenever I run the test in this project via java-debug:

org.eclipse.core.runtime.CoreException: The input type of the launch configuration does not exist
        at org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate.abort(JUnitLaunchConfigurationDelegate.java:752)
        at org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate.getTestTarget(JUnitLaunchConfigurationDelegate.java:746)
        at org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate.evaluateTests(JUnitLaunchConfigurationDelegate.java:347)
        at org.eclipse.buildship.core.internal.launch.SupportedLaunchConfigType$RelaxedJUnitLaunchConfigurationDelegate.evaluateTests(SupportedLaunchConfigType.java:139)                                                                                                                                           
        at org.eclipse.buildship.core.internal.launch.SupportedLaunchConfigType$2.getSourceFolders(SupportedLaunchConfigType.java:70)
        at org.eclipse.buildship.core.internal.launch.SupportedLaunchConfigType.collectSourceFolders(SupportedLaunchConfigType.java:110)
        at org.eclipse.buildship.core.internal.launch.LaunchConfigurationScope.from(LaunchConfigurationScope.java:57)
        at org.eclipse.buildship.core.internal.workspace.GradleClasspathContainerRuntimeClasspathEntryResolver.resolveRuntimeClasspathEntry(GradleClasspathContainerRuntimeClasspathEntryResolver.java:54)                                                                                                          
        at org.eclipse.jdt.internal.launching.RuntimeClasspathEntryResolver.resolveRuntimeClasspathEntry(RuntimeClasspathEntryResolver.java:49)
        at org.eclipse.jdt.launching.JavaRuntime.resolveRuntimeClasspathEntry(JavaRuntime.java:1262)
        at org.eclipse.buildship.core.internal.launch.GradleClasspathProvider.resolveClasspath(GradleClasspathProvider.java:101)
        at org.eclipse.buildship.core.internal.launch.GradleClasspathProvider.resolveOther(GradleClasspathProvider.java:118)
        at org.eclipse.buildship.core.internal.launch.GradleClasspathProvider.resolveClasspath(GradleClasspathProvider.java:95)
        at org.eclipse.jdt.internal.launching.RuntimeClasspathProvider.resolveClasspath(RuntimeClasspathProvider.java:68)
        at org.eclipse.jdt.launching.JavaRuntime.resolveRuntimeClasspath(JavaRuntime.java:1695)
        at org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate.getClasspathAndModulepath(AbstractJavaLaunchConfigurationDelegate.java:464)
        at org.eclipse.jdt.ls.core.internal.commands.ProjectCommand$1.run(ProjectCommand.java:138)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317)
        at org.eclipse.jdt.ls.core.internal.commands.ProjectCommand.getClasspaths(ProjectCommand.java:135)
        at org.eclipse.jdt.ls.core.internal.JDTDelegateCommandHandler.executeCommand(JDTDelegateCommandHandler.java:67)
        at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:215)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
        at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:205)
        at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$3(JDTLanguageServer.java:495)
        at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:75)
        at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)
        at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
        at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

I also saw an unrelated exception, which occurred whenever I opened Main.java with a fully-clean slate, i.e. no bin, build, or Eclipse workspace directories existing prior:

org.eclipse.buildship.core.internal.GradlePluginsRuntimeException: org.eclipse.core.internal.resources.ResourceException: Problems encountered while moving resources.
        at org.eclipse.buildship.core.internal.workspace.DefaultWorkspaceOperations.renameProject(DefaultWorkspaceOperations.java:361)
        at org.eclipse.buildship.core.internal.workspace.ProjectNameUpdater.updateProjectName(ProjectNameUpdater.java:49)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation.synchronizeOpenWorkspaceProject(SynchronizeGradleBuildOperation.java:159)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation.synchronizeWorkspaceProject(SynchronizeGradleBuildOperation.java:137)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation.synchronizeGradleProjectWithWorkspaceProject(SynchronizeGradleBuildOperation.java:127)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation.access$000(SynchronizeGradleBuildOperation.java:42)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation$1.run(SynchronizeGradleBuildOperation.java:85)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2312)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation.synchronizeProjectsWithWorkspace(SynchronizeGradleBuildOperation.java:82)
        at org.eclipse.buildship.core.internal.workspace.SynchronizeGradleBuildOperation.run(SynchronizeGradleBuildOperation.java:64)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild$SynchronizeOperation.runInToolingApi(DefaultGradleBuild.java:230)
        at org.eclipse.buildship.core.internal.operation.DefaultToolingApiOperationManager$WorkspaceRunnableAdapter.run(DefaultToolingApiOperationManager.java:58)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317)
        at org.eclipse.buildship.core.internal.operation.DefaultToolingApiOperationManager.run(DefaultToolingApiOperationManager.java:39)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild$SynchronizeOperation.run(DefaultGradleBuild.java:192)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild.synchronize(DefaultGradleBuild.java:100)
        at org.eclipse.buildship.core.internal.DefaultGradleBuild.synchronize(DefaultGradleBuild.java:86)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.startSynchronization(GradleProjectImporter.java:227)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.importDir(GradleProjectImporter.java:127)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.lambda$0(GradleProjectImporter.java:119)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1082)
        at org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.importToWorkspace(GradleProjectImporter.java:119)
        at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.importProjects(ProjectsManager.java:108)
        at org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.initializeProjects(ProjectsManager.java:98)
        at org.eclipse.jdt.ls.core.internal.handlers.InitHandler$1.runInWorkspace(InitHandler.java:195)
        at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: org.eclipse.core.internal.resources.ResourceException: Problems encountered while moving resources.
        at org.eclipse.core.internal.resources.Project.move(Project.java:994)
        at org.eclipse.core.internal.resources.Project.move(Project.java:955)
        at org.eclipse.buildship.core.internal.workspace.DefaultWorkspaceOperations.renameProject(DefaultWorkspaceOperations.java:359)
        ... 29 more

Neither seemed to cause the unrecognized symbol problem that I was seeing before, but maybe they're somehow related?

Versions:

Language server: 0.58.0 Debug adapter: 0.27.0

testforstephen commented 4 years ago

@dradtke The latest Language Server is 0.66.0. Could you update all your Java extensions (Java Language Support, Debugger for Java, Java Test Runner) to the latest version and try again?