mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
settings-sync: migrate the way how optional dependency is defined to the new recommended scheme
GitOrigin-RevId: 087b5f5c196a96485c40709bd8a45f2e88805703
This commit is contained in:
committed by
intellij-monorepo-bot
parent
850937f412
commit
74df3b10c3
1
.idea/modules.xml
generated
1
.idea/modules.xml
generated
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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"),
|
||||
|
||||
17
plugins/settings-sync/git/intellij.settingsSync.git.iml
Normal file
17
plugins/settings-sync/git/intellij.settingsSync.git.iml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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" />
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<idea-plugin>
|
||||
<actions>
|
||||
<action class="com.intellij.settingsSync.SettingsSyncHistoryAction" id="settingsSync.history" icon="AllIcons.Vcs.History"/>
|
||||
</actions>
|
||||
</idea-plugin>
|
||||
@@ -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)}"
|
||||
|
||||
@@ -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?)
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>()
|
||||
|
||||
Reference in New Issue
Block a user