diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 73f69e0958611ac6e00bde95641f6699030ad235..0000000000000000000000000000000000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/src/main/kotlin/b/language/server/BDocumentService.kt b/src/main/kotlin/b/language/server/BDocumentService.kt index 147d7c933a4ab6e9c4e2f60e43bdf6a9f48c4ca2..57a0b86a22b07095f7efaaeab76d0b94c28eeeea 100644 --- a/src/main/kotlin/b/language/server/BDocumentService.kt +++ b/src/main/kotlin/b/language/server/BDocumentService.kt @@ -35,7 +35,7 @@ class BDocumentService(private val server: Server, private val communicator: Com */ override fun didSave(params: DidSaveTextDocumentParams?) { - communicator.sendDebugMessage("document ${params!!.textDocument.uri} was saved", MessageType.Info) + communicator.bufferDebugMessage("document ${params!!.textDocument.uri} was saved", MessageType.Info) val currentUri = params.textDocument.uri checkDocument(currentUri) @@ -48,7 +48,7 @@ class BDocumentService(private val server: Server, private val communicator: Com fun checkDocument(currentUri : String){ val clientSettings = server.getDocumentSettings(currentUri) - communicator.sendDebugMessage("waiting for document settings", MessageType.Info) + communicator.bufferDebugMessage("waiting for document settings", MessageType.Info) clientSettings.thenAccept{ settings -> communicator.setDebugMode(settings.debugMode) @@ -80,7 +80,7 @@ class BDocumentService(private val server: Server, private val communicator: Com /** * Gets all uris that are no longer contain problems - * @param currentUri the uri of the curre nt main file + * @param currentUri the uri of the current main file * @param filesWithProblems uris of files containing problems */ fun calculateToInvalidate(currentUri : String, filesWithProblems : List<String>) : List<String>{ @@ -108,7 +108,7 @@ class BDocumentService(private val server: Server, private val communicator: Com * Registration Options: TextDocumentChangeRegistrationOptions */ override fun didChange(params: DidChangeTextDocumentParams?) { - communicator.sendDebugMessage("document ${params!!.textDocument.uri} was changed", MessageType.Info) + communicator.bufferDebugMessage("document ${params!!.textDocument.uri} was changed", MessageType.Info) val currentUri = params.textDocument.uri checkDocument(currentUri) } diff --git a/src/main/kotlin/b/language/server/BWorkspaceService.kt b/src/main/kotlin/b/language/server/BWorkspaceService.kt index 7dfc24dc30730e95391dde72e21e0bee3a5d1a92..603b6dad7bc4a52768419d0f987e8fa4c7f47a6c 100644 --- a/src/main/kotlin/b/language/server/BWorkspaceService.kt +++ b/src/main/kotlin/b/language/server/BWorkspaceService.kt @@ -16,7 +16,7 @@ class BWorkspaceService(private val server : Server) : WorkspaceService { * the client detects changes to file watched by the language client. */ override fun didChangeWatchedFiles(params: DidChangeWatchedFilesParams?) { - Communicator.sendDebugMessage("----------changed watched files", MessageType.Info) + Communicator.bufferDebugMessage("changed watched files", MessageType.Info) // Not needed } @@ -26,7 +26,7 @@ class BWorkspaceService(private val server : Server) : WorkspaceService { * configuration settings. */ override fun didChangeConfiguration(params: DidChangeConfigurationParams?) { - Communicator.sendDebugMessage("received change in configuration settings", MessageType.Info) + Communicator.bufferDebugMessage("received change in configuration settings", MessageType.Info) if(server.configurationAbility) { server.documentSettings.clear() }else{ diff --git a/src/main/kotlin/b/language/server/Server.kt b/src/main/kotlin/b/language/server/Server.kt index c0bfd919209b0175bae1d8fb5746d02798586ea5..274196fc846eae6d7fac39a1d18c45c9aae2ab81 100644 --- a/src/main/kotlin/b/language/server/Server.kt +++ b/src/main/kotlin/b/language/server/Server.kt @@ -83,7 +83,7 @@ class Server : LanguageServer{ * @return settings of the document requested */ fun getDocumentSettings(uri : String) : CompletableFuture<Settings> { - Communicator.sendDebugMessage("received configuration Data of the document $uri", MessageType.Info) + Communicator.bufferDebugMessage("received configuration data of the document $uri", MessageType.Info) return if(!configurationAbility){ val returnValue = CompletableFuture<Settings>() returnValue.complete(globalSettings) diff --git a/src/main/kotlin/b/language/server/communication/Communicator.kt b/src/main/kotlin/b/language/server/communication/Communicator.kt index 7b8f5912b1abfdb1d4cd4b0c6b9bbcb3e06bd0d8..3472e80878a9aef41fc3843a241f21afb818049d 100644 --- a/src/main/kotlin/b/language/server/communication/Communicator.kt +++ b/src/main/kotlin/b/language/server/communication/Communicator.kt @@ -15,6 +15,7 @@ object Communicator : CommunicatorInterface { lateinit var client : LanguageClient private var debugMode : Boolean = true + private val storedMessages = mutableListOf<Pair<String, MessageType>>() /** * Sends the diagnostics @@ -32,7 +33,13 @@ object Communicator : CommunicatorInterface { * @param severity the Severity of the message (Error/Info/Warning) */ override fun sendDebugMessage(message: String, severity: MessageType) { + + if(debugMode) { + if(storedMessages.isNotEmpty()) { + storedMessages.toList().forEach { element -> client.logMessage(MessageParams(element.second, element.first)) } + storedMessages.clear() + } client.logMessage(MessageParams(severity, message)) } @@ -57,4 +64,17 @@ object Communicator : CommunicatorInterface { override fun setDebugMode(mode : Boolean){ debugMode = mode } + + /** + * Can be used to store a messages until a "sendDebugMessage" command is sent. The messages will be sent as FIFO + * @param message the message to send + * @param severity tne message severity + */ + override fun bufferDebugMessage(message: String, severity: MessageType) { + if(debugMode) { + storedMessages.add(Pair(message, severity)) + } + } + + } \ No newline at end of file diff --git a/src/main/kotlin/b/language/server/communication/CommunicatorInterface.kt b/src/main/kotlin/b/language/server/communication/CommunicatorInterface.kt index b9096f08c5bf4872ac83fc822690fd03e6566388..850b781fd566cc31a82d95c04d7c5ee932f9e6d6 100644 --- a/src/main/kotlin/b/language/server/communication/CommunicatorInterface.kt +++ b/src/main/kotlin/b/language/server/communication/CommunicatorInterface.kt @@ -38,4 +38,12 @@ interface CommunicatorInterface { * @param mode the new state of the debug mode */ fun setDebugMode(mode : Boolean) + + + /** + * Can be used to store a messages until a "sendDebugMessage" command is sent. The messages will be sent as FIFO + * @param message the message to send + * @param severity tne message severity + */ + fun bufferDebugMessage(message : String, severity: MessageType) } \ No newline at end of file diff --git a/src/main/kotlin/b/language/server/proBMangement/probCli/ProBCommandLineAccess.kt b/src/main/kotlin/b/language/server/proBMangement/probCli/ProBCommandLineAccess.kt index 11360e0b66f698ddc41a0ae9f88934eb24063daf..4f4265c7d66de93e8250270e52bf91ea5ebd9a06 100644 --- a/src/main/kotlin/b/language/server/proBMangement/probCli/ProBCommandLineAccess.kt +++ b/src/main/kotlin/b/language/server/proBMangement/probCli/ProBCommandLineAccess.kt @@ -64,7 +64,8 @@ class ProBCommandLineAccess(val communicator : CommunicatorInterface) : ProBInte val typeCheckDefinitions = "TYPE_CHECK_DEFINITIONS" val lint = "-lint" val tRUE = "TRUE" - val performanceHints = "PERFORMANCE_INFO" + val performanceHints = "" + + "PERFORMANCE_INFO" val command = mutableListOf<String>() @@ -113,7 +114,7 @@ class ProBCommandLineAccess(val communicator : CommunicatorInterface) : ProBInte .redirectError(ProcessBuilder.Redirect.PIPE) }catch (e : IllegalArgumentException){ - communicator.sendDebugMessage("illigal argument exception", MessageType.Info) + communicator.sendDebugMessage("illegal argument exception", MessageType.Info) } return ProcessBuilder() } @@ -144,16 +145,14 @@ class ProBCommandLineAccess(val communicator : CommunicatorInterface) : ProBInte val process: Process = command.start() - // val output = InputStreamReader(process.inputStream) - // val error = InputStreamReader(process.errorStream) val outputAsString = readFromStream(process.inputStream) - readFromStream(process.errorStream) + readFromStream(process.errorStream) //just void error // process.waitFor() //we must wait here to ensure correct behavior when reading an error val exitStatus = process.waitFor() - communicator.sendDebugMessage("output of execution + ${exitStatus}", MessageType.Info) + communicator.sendDebugMessage("exit status of execution: $exitStatus", MessageType.Info) if(!outputAsString.contains("ProB Command Line Interface")){ throw CommandCouldNotBeExecutedException("Error when trying to call probcli with command $command") }