Skip to content

Commit af069be

Browse files
committed
Move server config to Configuration.kt
1 parent a44d92b commit af069be

File tree

3 files changed

+48
-52
lines changed

3 files changed

+48
-52
lines changed

server/src/main/kotlin/org/javacs/kt/Configuration.kt

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
package org.javacs.kt
22

3+
import com.google.gson.*
4+
import org.eclipse.lsp4j.InitializeParams
5+
import org.javacs.kt.storage.Storage
6+
import java.lang.reflect.Type
7+
import java.nio.file.Files
8+
import java.nio.file.Path
9+
import java.nio.file.Paths
10+
311
public data class SnippetsConfiguration(
412
/** Whether code completion should return VSCode-style snippets. */
513
var enabled: Boolean = true
@@ -35,10 +43,47 @@ public data class ExternalSourcesConfiguration(
3543
var autoConvertToKotlin: Boolean = true
3644
)
3745

46+
47+
fun parseServerConfiguration(params: InitializeParams): ServerConfiguration? {
48+
val gson = GsonBuilder().registerTypeHierarchyAdapter(Path::class.java, GsonPathConverter()).create()
49+
50+
var storage: Storage? = null
51+
52+
params.initializationOptions?.let { initializationOptions ->
53+
val options = gson.fromJson(initializationOptions as JsonElement, InitializationOptions::class.java)
54+
55+
options.storagePath?.let { storagePath ->
56+
if (Files.isDirectory(storagePath)) {
57+
storage = Storage(storagePath)
58+
}
59+
}
60+
}
61+
62+
return ServerConfiguration(storage)
63+
}
64+
65+
data class InitializationOptions(val storagePath: Path?)
66+
67+
data class ServerConfiguration(val storage: Storage?)
68+
69+
class GsonPathConverter : JsonDeserializer<Path?> {
70+
71+
@Throws(JsonParseException::class)
72+
override fun deserialize(json: JsonElement, type: Type?, context: JsonDeserializationContext?): Path? {
73+
return try {
74+
Paths.get(json.asString)
75+
} catch (ex: Exception) {
76+
LOG.printStackTrace(ex)
77+
null
78+
}
79+
}
80+
}
81+
3882
public data class Configuration(
3983
val compiler: CompilerConfiguration = CompilerConfiguration(),
4084
val completion: CompletionConfiguration = CompletionConfiguration(),
4185
val linting: LintingConfiguration = LintingConfiguration(),
4286
var indexing: IndexingConfiguration = IndexingConfiguration(),
43-
val externalSources: ExternalSourcesConfiguration = ExternalSourcesConfiguration()
87+
val externalSources: ExternalSourcesConfiguration = ExternalSourcesConfiguration(),
88+
var server: ServerConfiguration? = null
4489
)

server/src/main/kotlin/org/javacs/kt/KotlinLanguageServer.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import org.eclipse.lsp4j.services.LanguageClient
77
import org.eclipse.lsp4j.services.LanguageClientAware
88
import org.eclipse.lsp4j.services.LanguageServer
99
import org.javacs.kt.command.ALL_COMMANDS
10-
import org.javacs.kt.config.ServerConfiguration
11-
import org.javacs.kt.config.parseServerConfiguration
1210
import org.javacs.kt.externalsources.ClassPathSourceJarProvider
1311
import org.javacs.kt.externalsources.JarClassContentProvider
1412
import org.javacs.kt.progress.LanguageClientProgress
@@ -44,8 +42,6 @@ class KotlinLanguageServer : LanguageServer, LanguageClientAware, Closeable {
4442
sourcePath.progressFactory = factory
4543
}
4644

47-
private var serverConfiguration: ServerConfiguration? = null
48-
4945
companion object {
5046
val VERSION: String? = System.getProperty("kotlinLanguageServer.version")
5147
}
@@ -92,9 +88,9 @@ class KotlinLanguageServer : LanguageServer, LanguageClientAware, Closeable {
9288
serverCapabilities.documentRangeFormattingProvider = Either.forLeft(true)
9389
serverCapabilities.executeCommandProvider = ExecuteCommandOptions(ALL_COMMANDS)
9490

95-
serverConfiguration = parseServerConfiguration(params)
91+
config.server = parseServerConfiguration(params)
9692

97-
classPath.storage = serverConfiguration?.storage?.getSlice("classpath")
93+
classPath.storage = config.server?.storage?.getSlice("classpath")
9894

9995
val clientCapabilities = params.capabilities
10096
config.completion.snippets.enabled = clientCapabilities?.textDocument?.completion?.completionItem?.snippetSupport ?: false

server/src/main/kotlin/org/javacs/kt/config/Config.kt

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)