eclipse-jdtls / eclipse.jdt.ls

Java language server
1.79k stars 399 forks source link

JDT LS fails to import Gradle project(s) #871

Open yyoncho opened 5 years ago

yyoncho commented 5 years ago

The issue was originally logged in lsp-java but it is reproducible with vscode-java as well. The projects are: https://github.com/Genymobile/scrcpy and https://github.com/thingsboard/thingsboard

This is the callstack from the first project -

[Trace - 5:28:09 PM] Received notification 'window/logMessage'.
Params: {
"type": 1,
"message": "Nov 25, 2018 5:28:09 PM Problem getting outline forControlEventReader.java\nsrc/main/java/com/genymobile/scrcpy [in server] is not on its project's build path\nJava Model Exception: Java Model Status [src/main/java/com/genymobile/scrcpy [in server] is not on its project's build path]\n\tat org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:583)\n\tat org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:256)\n\tat org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:530)\n\tat org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:250)\n\tat org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:530)\n\tat org.eclipse.jdt.internal.core.CompilationUnit.openAncestors(CompilationUnit.java:1243)\n\tat org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:250)\n\tat org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:596)\n\tat org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:326)\n\tat org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:312)\n\tat org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:267)\n\tat org.eclipse.jdt.ls.core.internal.handlers.DocumentSymbolHandler.getHierarchicalOutline(DocumentSymbolHandler.java:129)\n\tat org.eclipse.jdt.ls.core.internal.handlers.DocumentSymbolHandler.documentSymbol(DocumentSymbolHandler.java:74)\n\tat org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$13(JDTLanguageServer.java:573)\n\tat org

Original issues: https://github.com/emacs-lsp/lsp-java/issues/79

yyoncho commented 5 years ago

(cc @amosbird @madper )

fbricon commented 5 years ago

scrcpy is an android/gradle project, which is not supported by Buildship, the Gradle integration project in Eclipse. That means the project classpath is not set properly.

@yyoncho can you attach a stacktrace for thingsboard, which is a maven project?

yyoncho commented 5 years ago
[Trace - 7:01:41 PM] Received notification 'window/logMessage'.
Params: {
    "type": 1,
    "message": "Nov 30, 2018 7:01:41 PM Initialization failed \nCould not fetch model of type 'EclipseProject' using Gradle installation '/home/kyoncho/.sdkman/candidates/gradle/current'.\norg.gradle.tooling.BuildException: Could not fetch model of type 'EclipseProject' using Gradle installation '/home/kyoncho/.sdkman/candidates/gradle/current'.\n\tat org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:51)\n\tat org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29)\n\tat org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:41)\n\tat org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57)\n\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)\n\tat org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)\n\tat java.lang.Thread.run(Thread.java:748)\n\tat org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)\n\tat org.gradle.tooling.internal.consumer.DefaultModelBuilder.get(DefaultModelBuilder.java:50)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.eclipse.buildship.core.workspace.internal.ConnectionAwareLauncherProxy.invokeRun(ConnectionAwareLauncherProxy.java:170)\n\tat org.eclipse.buildship.core.workspace.internal.ConnectionAwareLauncherProxy.invoke(ConnectionAwareLauncherProxy.java:160)\n\tat com.sun.proxy.$Proxy41.get(Unknown Source)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider$2.get(DefaultModelProvider.java:122)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider$3.call(DefaultModelProvider.java:142)\n\tat com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4724)\n\tat com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3522)\n\tat com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2315)\n\tat com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2278)\n\tat com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2193)\n\tat com.google.common.cache.LocalCache.get(LocalCache.java:3932)\n\tat com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4721)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider.getFromCache(DefaultModelProvider.java:153)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider.executeOperation(DefaultModelProvider.java:138)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider.executeModelBuilder(DefaultModelProvider.java:118)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider.fetchModels(DefaultModelProvider.java:81)\n\tat org.eclipse.buildship.core.workspace.internal.DefaultModelProvider.fetchEclipseGradleProjects(DefaultModelProvider.java:99)\n\tat org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.startSynchronization(GradleProjectImporter.java:152)\n\tat org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.importDir(GradleProjectImporter.java:99)\n\tat org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.lambda$0(GradleProjectImporter.java:91)\n\tat java.util.ArrayList.forEach(ArrayList.java:1257)\n\tat java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080)\n\tat org.eclipse.jdt.ls.core.internal.managers.GradleProjectImporter.importToWorkspace(GradleProjectImporter.java:91)\n\tat org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.importProjects(ProjectsManager.java:134)\n\tat org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.access$1(ProjectsManager.java:128)\n\tat org.eclipse.jdt.ls.core.internal.managers.ProjectsManager$2.run(ProjectsManager.java:122)\n\tat org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:41)\n\tat org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736)\n\tat org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2295)\n\tat org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2322)\n\tat org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5795)\n\tat org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5752)\n\tat org.eclipse.jdt.ls.core.internal.managers.ProjectsManager.initializeProjects(ProjectsManager.java:114)\n\tat org.eclipse.jdt.ls.core.internal.handlers.InitHandler$1.runInWorkspace(InitHandler.java:229)\n\tat org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42)\n\tat org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)\nCaused by: org.gradle.internal.exceptions.LocationAwareException: Build file '/home/kyoncho/Sources/thingsboard/transport/mqtt/build.gradle' line: 32\nA problem occurred evaluating root project 'mqtt'.\n\tat org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74)\n\tat org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47)\n\tat org.gradle.initialization.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30)\n\tat org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:114)\n\tat org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:106)\n\tat org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)\n\tat org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)\n\tat org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)\n\tat org.gradle.initialization.DefaultGradleLauncher.getBuildAnalysis(DefaultGradleLauncher.java:97)\n\tat org.gradle.launcher.exec.GradleBuildController.configure(GradleBuildController.java:74)\n\tat org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:48)\n\tat org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)\n\tat org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58)\n\tat org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)\n\tat org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)\n\tat org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)\n\tat org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:79)\n\tat org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:51)\n\tat org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:59)\n\tat org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)\n\tat org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)\n\tat org.gradle.util.Swapper.swap(Swapper.java:38)\n\tat org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)\n\tat org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)\n\tat org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.HintGCAfterBuild.execute(HintGCAfterBuild.java:44)\n\tat org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\n\tat org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)\n\tat org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:293)\n\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)\n\tat org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)\nCaused by: org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'mqtt'.\n\tat org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:92)\n\tat org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:176)\n\tat org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)\n\tat org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:181)\n\tat org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)\n\tat org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)\n\tat org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)\n\tat org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)\n\tat org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:573)\n\tat org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:125)\n\tat org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)\n\tat org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)\n\tat org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:151)\n\tat org.gradle.internal.Factories$1.create(Factories.java:22)\n\tat org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)\n\tat org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)\n\tat org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:148)\n\tat org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:33)\n\tat org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:112)\n\t... 42 more\nCaused by: groovy.lang.MissingPropertyException: Could not get unknown property 'projectBuildDir' for root project 'mqtt' of type org.gradle.api.Project.\n\tat org.gradle.internal.metaobject.AbstractDynamicObject.getMissingProperty(AbstractDynamicObject.java:85)\n\tat org.gradle.internal.metaobject.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:62)\n\tat org.gradle.groovy.scripts.BasicScript.propertyMissing(BasicScript.java:70)\n\tat org.gradle.groovy.scripts.Script.getProperty(Script.java:56)\n\tat build_1czsdxfhcrd2ti7muupwwzaun.run(/home/kyoncho/Sources/thingsboard/transport/mqtt/build.gradle:32)\n\tat org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90)\n\t... 60 more\n"
}
fbricon commented 5 years ago

ok so actually, since the sources contain gradle projects and gradle import has priority over maven (currently you can't mix'n match gradle and maven projects in the same root uri in jdt.ls), which explains why we're seeing gradle exceptions in the stacktrace. Now we'll have to investigate deeper to understand why non-android gradle projects are failing.

snjeza commented 5 years ago

@yyoncho can you try the following:

"java.import.gradle.enabled": false,