override fun switchConnection()

in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/DefaultToolkitConnectionManager.kt [119:161]


    override fun switchConnection(newConnection: ToolkitConnection?) {
        val oldConnection = this.connection

        if (oldConnection != newConnection) {
            val application = ApplicationManager.getApplication()
            this.connection = newConnection

            if (newConnection != null) {
                val featuresToPin = mutableListOf<FeatureWithPinnedConnection>()
                FeatureWithPinnedConnection.EP_NAME.forEachExtensionSafe {
                    if (!pinningManager.isFeaturePinned(it) &&
                        (
                            (
                                oldConnection == null && it.supportsConnectionType(newConnection)
                                ) ||
                                (
                                    oldConnection != null && it.supportsConnectionType(oldConnection) != it.supportsConnectionType(newConnection)
                                    )
                            )
                    ) {
                        featuresToPin.add(it)
                    } else if (
                        newConnection is AwsBearerTokenConnection &&
                        oldConnection is AwsBearerTokenConnection &&
                        oldConnection.id == newConnection.id &&
                        oldConnection.scopes.all { s -> s in newConnection.scopes }
                    ) {
                        // TODO: ugly
                        // scope update case
                        featuresToPin.add(it)
                    }
                }

                if (featuresToPin.isNotEmpty()) {
                    application.executeOnPooledThread {
                        pinningManager.pinFeatures(oldConnection, newConnection, featuresToPin)
                    }
                }
            }

            application.messageBus.syncPublisher(ToolkitConnectionManagerListener.TOPIC).activeConnectionChanged(newConnection)
        }
    }