settings-sync: migrate the way how optional dependency is defined to the new recommended scheme

GitOrigin-RevId: 087b5f5c196a96485c40709bd8a45f2e88805703
This commit is contained in:
Kirill Likhodedov
2022-08-06 12:46:15 +02:00
committed by intellij-monorepo-bot
parent 850937f412
commit 74df3b10c3
19 changed files with 81 additions and 32 deletions

1
.idea/modules.xml generated
View File

@@ -967,6 +967,7 @@
<module fileurl="file://$PROJECT_DIR$/plugins/settings-repository/intellij.settingsRepository.iml" filepath="$PROJECT_DIR$/plugins/settings-repository/intellij.settingsRepository.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/settings-repository/intellij.settingsRepository.tests.iml" filepath="$PROJECT_DIR$/plugins/settings-repository/intellij.settingsRepository.tests.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/settings-sync/intellij.settingsSync.iml" filepath="$PROJECT_DIR$/plugins/settings-sync/intellij.settingsSync.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/settings-sync/git/intellij.settingsSync.git.iml" filepath="$PROJECT_DIR$/plugins/settings-sync/git/intellij.settingsSync.git.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/sh/intellij.sh.iml" filepath="$PROJECT_DIR$/plugins/sh/intellij.sh.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/space/jps-plugin/intellij.space.java.jps.iml" filepath="$PROJECT_DIR$/plugins/space/jps-plugin/intellij.space.java.jps.iml" />
<module fileurl="file://$PROJECT_DIR$/spellchecker/intellij.spellchecker.iml" filepath="$PROJECT_DIR$/spellchecker/intellij.spellchecker.iml" />

View File

@@ -152,6 +152,7 @@
<orderEntry type="module" module-name="intellij.gradle.dependencyUpdater" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.settingsRepository.tests" scope="TEST" />
<orderEntry type="module" module-name="intellij.settingsSync" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.settingsSync.git" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.java.featuresTrainer" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.idea.community.build.tasks" scope="TEST" />
<orderEntry type="module" module-name="intellij.junit.v5.rt.tests" scope="TEST" />

View File

@@ -235,7 +235,9 @@ final class CommunityRepositoryModules {
simplePlugin("intellij.copyright"),
simplePlugin("intellij.editorconfig"),
simplePlugin("intellij.settingsRepository"),
simplePlugin("intellij.settingsSync"),
plugin("intellij.settingsSync") {
withModule("intellij.settingsSync.git")
},
simplePlugin("intellij.configurationScript"),
simplePlugin("intellij.yaml"),
simplePlugin("intellij.repository.search"),

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kotlin-stdlib-jdk8" level="project" />
<orderEntry type="module" module-name="intellij.settingsSync" />
<orderEntry type="module" module-name="intellij.platform.ide.core" />
<orderEntry type="module" module-name="intellij.vcs.git" />
<orderEntry type="module" module-name="intellij.platform.vcs" />
</component>
</module>

View File

@@ -0,0 +1,9 @@
<idea-plugin package="com.intellij.settingsSync.git">
<dependencies>
<plugin id="Git4Idea"/>
</dependencies>
<actions resource-bundle="messages.SettingsSyncBundle">
<action class="com.intellij.settingsSync.git.SettingsSyncHistoryAction" id="settingsSync.history" icon="AllIcons.Vcs.History" />
</actions>
</idea-plugin>

View File

@@ -1,4 +1,4 @@
package com.intellij.settingsSync
package com.intellij.settingsSync.git
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -6,6 +6,9 @@ import com.intellij.openapi.project.DumbAwareAction
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.wm.ToolWindowManager
import com.intellij.settingsSync.SettingsSyncBundle
import com.intellij.settingsSync.SettingsSyncMain
import com.intellij.settingsSync.isSettingsSyncEnabledByKey
import git4idea.GitVcs
import git4idea.log.showExternalGitLogInToolwindow
import java.util.function.Supplier

View File

@@ -43,8 +43,6 @@
<orderEntry type="library" name="cloud-config-client" level="project" />
<orderEntry type="module" module-name="intellij.platform.lang.impl" />
<orderEntry type="module" module-name="intellij.platform.util.jdom" scope="TEST" />
<orderEntry type="module" module-name="intellij.vcs.git" />
<orderEntry type="module" module-name="intellij.platform.vcs" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="library" name="jackson" level="project" />
<orderEntry type="library" name="jackson-databind" level="project" />

View File

@@ -8,7 +8,9 @@
<vendor>JetBrains</vendor>
<resource-bundle>messages.SettingsSyncBundle</resource-bundle>
<depends optional="true" config-file="settingsSyncWithGit.xml">Git4Idea</depends>
<content>
<module name="intellij.settingsSync.git"/>
</content>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.intellij.settingsSync.SettingsSyncMain"/>

View File

@@ -1,5 +0,0 @@
<idea-plugin>
<actions>
<action class="com.intellij.settingsSync.SettingsSyncHistoryAction" id="settingsSync.history" icon="AllIcons.Vcs.History"/>
</actions>
</idea-plugin>

View File

@@ -2,13 +2,15 @@ package com.intellij.settingsSync
import com.intellij.util.io.readBytes
import com.intellij.util.io.systemIndependentPath
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.SystemIndependent
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import java.nio.file.Path
import kotlin.io.path.relativeTo
internal sealed class FileState(open val file: @SystemIndependent String) {
@ApiStatus.Internal
sealed class FileState(open val file: @SystemIndependent String) {
class Modified(override val file: @SystemIndependent String, val content: ByteArray, val size: Int) : FileState(file) {
override fun toString(): String = "file='$file', content:\n${String(content, StandardCharsets.UTF_8)}"

View File

@@ -2,6 +2,7 @@ package com.intellij.settingsSync
import com.intellij.openapi.application.PathManager
import com.intellij.util.SystemProperties
import org.jetbrains.annotations.ApiStatus
import java.net.InetAddress
import java.time.Instant
import java.util.*
@@ -24,7 +25,8 @@ internal sealed class SyncSettingsEvent {
object PingRequest : SyncSettingsEvent()
}
internal data class SettingsSnapshot(val metaInfo: MetaInfo, val fileStates: Set<FileState>) {
@ApiStatus.Internal
data class SettingsSnapshot(val metaInfo: MetaInfo, val fileStates: Set<FileState>) {
data class MetaInfo(val dateCreated: Instant, val appInfo: AppInfo?)

View File

@@ -1,11 +1,13 @@
package com.intellij.settingsSync
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import org.jetbrains.annotations.ApiStatus
/**
* Records changes in the settings, merges changes made locally and remotely.
*/
internal interface SettingsLog {
@ApiStatus.Internal
interface SettingsLog {
interface Position {
val id: String
}

View File

@@ -8,6 +8,7 @@ import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import com.intellij.util.containers.ContainerUtil
import com.intellij.util.ui.update.MergingUpdateQueue
import com.intellij.util.ui.update.Update
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.TestOnly
import org.jetbrains.annotations.VisibleForTesting
import java.util.concurrent.TimeUnit
@@ -16,7 +17,8 @@ import java.util.concurrent.TimeUnit
* Handles events about settings change both from the current IDE, and from the server, merges the settings, logs them,
* and provides the combined data to clients: both to the IDE and to the server.
*/
internal class SettingsSyncBridge(parentDisposable: Disposable,
@ApiStatus.Internal
class SettingsSyncBridge(parentDisposable: Disposable,
private val settingsLog: SettingsLog,
private val ideMediator: SettingsSyncIdeMediator,
private val remoteCommunicator: SettingsSyncRemoteCommunicator,
@@ -37,7 +39,7 @@ internal class SettingsSyncBridge(parentDisposable: Disposable,
}
@RequiresBackgroundThread
fun initialize(initMode: InitMode) {
internal fun initialize(initMode: InitMode) {
settingsLog.initialize()
// the queue is not activated initially => events will be collected but not processed until we perform all initialization tasks
@@ -76,7 +78,7 @@ internal class SettingsSyncBridge(parentDisposable: Disposable,
settingsLog.setCloudPosition(masterPosition)
}
sealed class InitMode {
internal sealed class InitMode {
object JustInit : InitMode()
class TakeFromServer(val cloudEvent: SyncSettingsEvent.CloudChange) : InitMode()
object PushToServer : InitMode()

View File

@@ -1,12 +1,14 @@
package com.intellij.settingsSync
import com.intellij.DynamicBundle
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.PropertyKey
private const val PATH_TO_BUNDLE = "messages.SettingsSyncBundle"
internal object SettingsSyncBundle : DynamicBundle(PATH_TO_BUNDLE) {
@ApiStatus.Internal
object SettingsSyncBundle : DynamicBundle(PATH_TO_BUNDLE) {
fun message(@PropertyKey(resourceBundle = PATH_TO_BUNDLE) key: String, vararg params: Any) : @Nls String {
return getMessage(key, *params)

View File

@@ -1,5 +1,6 @@
package com.intellij.settingsSync
import org.jetbrains.annotations.ApiStatus
import java.nio.file.Path
/**
@@ -7,7 +8,8 @@ import java.nio.file.Path
* when a setting is changed in the IDE, sends it to the Settings Sync to log and push;
* when the settings sync log gets changed, applies the change to the IDE.
*/
internal interface SettingsSyncIdeMediator {
@ApiStatus.Internal
interface SettingsSyncIdeMediator {
fun applyToIde(snapshot: SettingsSnapshot)

View File

@@ -9,11 +9,13 @@ import com.intellij.openapi.components.stateStore
import com.intellij.openapi.diagnostic.logger
import com.intellij.util.SystemProperties
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import org.jetbrains.annotations.ApiStatus
import java.nio.file.Path
private const val SETTINGS_SYNC_ENABLED_PROPERTY = "idea.settings.sync.enabled"
internal fun isSettingsSyncEnabledByKey(): Boolean =
@ApiStatus.Internal
fun isSettingsSyncEnabledByKey(): Boolean =
SystemProperties.getBooleanProperty(SETTINGS_SYNC_ENABLED_PROPERTY, false)
internal fun isSettingsSyncEnabledInSettings(): Boolean =
@@ -21,9 +23,10 @@ internal fun isSettingsSyncEnabledInSettings(): Boolean =
internal const val SETTINGS_SYNC_STORAGE_FOLDER = "settingsSync"
internal class SettingsSyncMain : Disposable {
@ApiStatus.Internal
class SettingsSyncMain : Disposable {
internal val controls: SettingsSyncControls
val controls: SettingsSyncControls
private val componentStore: ComponentStoreImpl
init {
@@ -70,7 +73,7 @@ internal class SettingsSyncMain : Disposable {
controls.ideMediator.removeStreamProvider()
}
internal companion object {
companion object {
fun isAvailable(): Boolean {
return ApplicationManager.getApplication().getServiceIfCreated(SettingsSyncMain::class.java) != null
@@ -95,9 +98,9 @@ internal class SettingsSyncMain : Disposable {
private val LOG = logger<SettingsSyncMain>()
}
internal class SettingsSyncControls(val ideMediator: SettingsSyncIdeMediator,
val updateChecker: SettingsSyncUpdateChecker,
val bridge: SettingsSyncBridge,
val remoteCommunicator: SettingsSyncRemoteCommunicator,
val settingsSyncStorage: Path)
class SettingsSyncControls(val ideMediator: SettingsSyncIdeMediator,
val updateChecker: SettingsSyncUpdateChecker,
val bridge: SettingsSyncBridge,
val remoteCommunicator: SettingsSyncRemoteCommunicator,
val settingsSyncStorage: Path)
}

View File

@@ -1,8 +1,10 @@
package com.intellij.settingsSync
import com.intellij.openapi.util.NlsSafe
import org.jetbrains.annotations.ApiStatus
internal sealed class SettingsSyncPushResult {
@ApiStatus.Internal
sealed class SettingsSyncPushResult {
object Success : SettingsSyncPushResult() {
override fun toString(): String = "SUCCESS"
}

View File

@@ -2,13 +2,15 @@ package com.intellij.settingsSync
import com.intellij.openapi.util.NlsSafe
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import org.jetbrains.annotations.ApiStatus
/**
* Synchronizes data with the remote server: pushes the data there, and receives updates.
* Handles only the "transport" level, i.e. doesn't handle errors, doesn't handle the "push rejected" situation, etc. all these situations
* should be processes above.
*/
internal interface SettingsSyncRemoteCommunicator {
@ApiStatus.Internal
interface SettingsSyncRemoteCommunicator {
@RequiresBackgroundThread
fun checkServerState() : ServerState
@@ -22,14 +24,14 @@ internal interface SettingsSyncRemoteCommunicator {
fun delete()
}
internal sealed class ServerState {
sealed class ServerState {
object UpdateNeeded: ServerState()
object UpToDate: ServerState()
object FileNotExists: ServerState()
class Error(@NlsSafe val message: String): ServerState()
}
internal sealed class UpdateResult {
sealed class UpdateResult {
class Success(val settingsSnapshot: SettingsSnapshot) : UpdateResult()
object NoFileOnServer: UpdateResult()
class Error(@NlsSafe val message: String): UpdateResult()

View File

@@ -2,8 +2,10 @@ package com.intellij.settingsSync
import com.intellij.openapi.diagnostic.logger
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
import org.jetbrains.annotations.ApiStatus
internal class SettingsSyncUpdateChecker(private val remoteCommunicator: SettingsSyncRemoteCommunicator) {
@ApiStatus.Internal
class SettingsSyncUpdateChecker(private val remoteCommunicator: SettingsSyncRemoteCommunicator) {
companion object {
private val LOG = logger<SettingsSyncUpdateChecker>()