diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 657653345..b5006aabb 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -116,21 +116,18 @@ object BuildServerProtocol { val base = loadedBuildUnit.localBase val sbtFiles = configurationSources(base) val pluginData = loadedBuildUnit.unit.plugins.pluginData - val all = Vector.newBuilder[SourceItem] - def add(fs: Seq[File], sourceItemKind: Int, generated: Boolean): Unit = { - fs.foreach(f => all += (SourceItem(f.toURI, sourceItemKind, generated = generated))) - } - all += (SourceItem( - loadedBuildUnit.unit.plugins.base.toURI, - SourceItemKind.Directory, - generated = false - )) - add(pluginData.unmanagedSourceDirectories, SourceItemKind.Directory, generated = false) - add(pluginData.unmanagedSources, SourceItemKind.File, generated = false) - add(pluginData.managedSourceDirectories, SourceItemKind.Directory, generated = true) - add(pluginData.managedSources, SourceItemKind.File, generated = true) - add(sbtFiles, SourceItemKind.File, generated = false) - Value(SourcesItem(id, all.result())) + val dirs = pluginData.unmanagedSourceDirectories + val sourceFiles = getStandaloneSourceFiles(pluginData.unmanagedSources, dirs) + val managedDirs = pluginData.managedSourceDirectories + val managedSourceFiles = + getStandaloneSourceFiles(pluginData.managedSources, managedDirs) + val items = + dirs.map(toSourceItem(SourceItemKind.Directory, generated = false)) ++ + sourceFiles.map(toSourceItem(SourceItemKind.File, generated = false)) ++ + managedDirs.map(toSourceItem(SourceItemKind.Directory, generated = true)) ++ + managedSourceFiles.map(toSourceItem(SourceItemKind.File, generated = true)) ++ + sbtFiles.map(toSourceItem(SourceItemKind.File, generated = false)) + Value(SourcesItem(id, items.toVector)) } val successfulItems = anyOrThrow(items ++ buildItems) val result = SourcesResult(successfulItems.toVector) @@ -280,10 +277,6 @@ object BuildServerProtocol { val sourceFiles = getStandaloneSourceFiles(unmanagedSources.value, dirs) val managedDirs = managedSourceDirectories.value val managedSourceFiles = getStandaloneSourceFiles(managedSources.value, managedDirs) - - def toSourceItem(itemKind: Int, generated: Boolean)(file: File): SourceItem = - SourceItem(file.toURI, itemKind, generated) - val items = dirs.map(toSourceItem(SourceItemKind.Directory, generated = false)) ++ sourceFiles.map(toSourceItem(SourceItemKind.File, generated = false)) ++ managedDirs.map(toSourceItem(SourceItemKind.Directory, generated = true)) ++ @@ -469,6 +462,9 @@ object BuildServerProtocol { } } + private def toSourceItem(itemKind: Int, generated: Boolean)(file: File): SourceItem = + SourceItem(file.toURI, itemKind, generated) + private def checkMetalsCompatibility( semanticdbEnabled: Boolean, semanticdbVersion: String, diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index f5340e131..5aa231752 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -79,14 +79,12 @@ object BuildServerTest extends AbstractServerTest { val sources = s.items.head.sources.map(_.uri).sorted val expectedSources = Vector( "build.sbt", - "project/", "project/A.scala", "project/src/main/java", "project/src/main/scala-2", "project/src/main/scala-2.12", "project/src/main/scala-sbt-1.0", "project/src/main/scala/", - "project/src/main/scala/B.scala", "project/target/scala-2.12/sbt-1.0/src_managed/main" ).map(rel => new File(svr.baseDirectory.getAbsoluteFile, rel).toURI).sorted assert(sources == expectedSources)