in rider/src/main/kotlin/com/jetbrains/rider/plugins/godot/FrontendBackendHost.kt [40:114]
override fun extensionCreated(lifetime: Lifetime, session: ClientProjectSession, model: GodotFrontendBackendModel) {
val project = session.project
model.activateRider.advise(lifetime) {
ProjectUtil.focusProjectWindow(project, true)
val frame = WindowManager.getInstance().getFrame(project)
if (frame != null) {
if (BitUtil.isSet(frame.extendedState, Frame.ICONIFIED))
frame.extendedState = BitUtil.set(frame.extendedState, Frame.ICONIFIED, false)
}
}
model.onTestRunnerOutputEvent.advise(lifetime) { output->
debugProcesses.filter{it.key == output.port}.firstOrNull()?.value?.console?.tryWriteMessageToConsoleView(
OutputMessageWithSubject(
output = "${output.message}\r\n",
type = when (output.type) {
TestRunnerOutputEventType.Message -> OutputType.Info
TestRunnerOutputEventType.Error -> OutputType.Error
},
subject = OutputSubject.Default
)
)
}
model.startDebuggerServer.set { lt, _ ->
val task = RdTask<Int>()
val runManager = RunManager.getInstance(project)
val configurationType = ConfigurationTypeUtil.findConfigurationType(MonoRemoteConfigType::class.java)
val runConfiguration = runManager.createConfiguration(
GodotRunConfigurationGenerator.ATTACH_CONFIGURATION_NAME,
GodotDotNetRemoteConfigurationFactory(configurationType)
)
val remoteConfiguration = runConfiguration.configuration as GodotDotNetRemoteConfiguration
remoteConfiguration.listenPortForConnections = true
remoteConfiguration.port = NetworkUtils.findFreePort(500013)
remoteConfiguration.address = "127.0.0.1"
val processTracker: RiderDebugActiveDotNetSessionsTracker =
RiderDebugActiveDotNetSessionsTracker.getInstance(project)
processTracker.dotNetDebugProcesses.change.advise(lt) { (event, debugProcess) ->
if (event == AddRemove.Add) {
debugProcesses[remoteConfiguration.port] = debugProcess
debugProcess.sessionLifetime.onTermination { debugProcesses.remove(remoteConfiguration.port) }
debugProcess.initializeDebuggerTask.debuggerInitializingState.advise(lt) {
if (it == DebuggerInitializingState.Initialized)
task.set(remoteConfiguration.port)
if (it == DebuggerInitializingState.Canceled)
task.set(0)
}
}
}
ProgramRunnerUtil.executeConfiguration(runConfiguration, DefaultDebugExecutor.getDebugExecutorInstance())
task
}
model.runChickensoftTest.adviseNotNull(lifetime) {
RunChickenTestsUtil.execute(it, project)
}
GodotProjectDiscoverer.getInstance(project).godot3Path.adviseNotNull(lifetime){
model.godotPath.set(it)
}
GodotProjectDiscoverer.getInstance(project).godot4Path.adviseNotNull(lifetime){ s ->
// for Godot3 this is done in a separate place
RiderDebuggerWorkerModelManager.getModels().adviseNotNull(lifetime){
model.backendSettings.enableDebuggerExtensions.flowInto(lifetime,
it.value.godotDebuggerWorkerModel.showCustomRenderers)
}
model.godotPath.set(s)
}
}