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)
}
}