From ade5c6b0ece6807bb7eebfd58c680245bc6393c2 Mon Sep 17 00:00:00 2001 From: Denis Zaichenko Date: Tue, 3 Jun 2025 22:23:32 +0200 Subject: [PATCH] IJPL-177442 Code review fixes (cherry picked from commit ddf8a16db843efa0e4693db24afe2eb4a7848ba3) IJ-MR-163725 GitOrigin-RevId: 2e496c0ce786b155f79941ead23cec50491771f7 --- .../platform-impl/api-dump-unreviewed.txt | 3 --- platform/platform-impl/api-dump.txt | 23 ------------------- .../com/intellij/ide/plugins/PluginNode.java | 2 ++ .../ide/plugins/PluginNodeVendorDetails.kt | 2 ++ .../ide/plugins/RepositoryHelper.java | 1 + .../com/intellij/ide/plugins/api/PluginDto.kt | 1 - .../marketplace/ApplyPluginsStateResult.kt | 6 ++--- .../plugins/marketplace/PluginSearchResult.kt | 2 ++ .../marketplace/utils/MarketplaceUrls.kt | 7 +++--- .../newui/DefaultUiPluginManagerController.kt | 12 +++------- .../newui/PluginDetailsPageComponent.kt | 5 ++-- .../ide/plugins/newui/PluginUiModel.kt | 4 ++++ .../ide/plugins/newui/UiPluginManager.kt | 4 ---- .../newui/UiPluginManagerController.kt | 1 - .../backend/rpc/BackendPluginInstallerApi.kt | 2 +- .../backend/rpc/BackendPluginManagerApi.kt | 4 ---- .../BackendUiPluginManagerController.kt | 6 +---- .../shared/rpc/PluginManagerApi.kt | 1 - 18 files changed, 25 insertions(+), 61 deletions(-) diff --git a/platform/platform-impl/api-dump-unreviewed.txt b/platform/platform-impl/api-dump-unreviewed.txt index 8d47df7a5006..7115462b97d3 100644 --- a/platform/platform-impl/api-dump-unreviewed.txt +++ b/platform/platform-impl/api-dump-unreviewed.txt @@ -3360,7 +3360,6 @@ f:com.intellij.ide.plugins.PluginNode - getUntilBuild():java.lang.String - getUrl():java.lang.String - getVendor():java.lang.String -- getVendorDetails():com.intellij.ide.plugins.PluginNodeVendorDetails - getVendorEmail():java.lang.String - getVendorUrl():java.lang.String - getVersion():java.lang.String @@ -3415,7 +3414,6 @@ f:com.intellij.ide.plugins.PluginNode - setUntilBuild(java.lang.String):V - setUrl(java.lang.String):V - setVendor(java.lang.String):V -- setVendorDetails(com.intellij.ide.plugins.PluginNodeVendorDetails):V - setVendorDetails(java.lang.String):V - setVendorDetails(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.Boolean):V - setVendorEmail(java.lang.String):V @@ -3467,7 +3465,6 @@ f:com.intellij.ide.plugins.RepositoryHelper - s:loadPlugins(java.lang.String,com.intellij.openapi.progress.ProgressIndicator):java.util.List - s:loadPlugins(java.lang.String,com.intellij.openapi.util.BuildNumber,com.intellij.openapi.progress.ProgressIndicator):java.util.List - s:loadPlugins(java.util.Set):java.util.Collection -- s:mergePluginsFromRepositories(java.util.List,java.util.List,Z):java.util.Collection c:com.intellij.ide.plugins.StandalonePluginUpdateChecker - com.intellij.openapi.Disposable - sf:Companion:com.intellij.ide.plugins.StandalonePluginUpdateChecker$Companion diff --git a/platform/platform-impl/api-dump.txt b/platform/platform-impl/api-dump.txt index ec0bbc48954d..d3f03eaa85c6 100644 --- a/platform/platform-impl/api-dump.txt +++ b/platform/platform-impl/api-dump.txt @@ -216,29 +216,6 @@ com.intellij.ide.plugins.PluginManagerMain$PluginEnabler - enable(java.util.Collection):Z - enableById(java.util.Set):Z - isDisabled(com.intellij.openapi.extensions.PluginId):Z -f:com.intellij.ide.plugins.PluginNodeVendorDetails -- sf:Companion:com.intellij.ide.plugins.PluginNodeVendorDetails$Companion -- (java.lang.String,java.lang.String,java.lang.Boolean,java.lang.Boolean):V -- b:(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.Boolean,I,kotlin.jvm.internal.DefaultConstructorMarker):V -- f:component1():java.lang.String -- f:component2():java.lang.String -- f:copy(java.lang.String,java.lang.String,java.lang.Boolean,java.lang.Boolean):com.intellij.ide.plugins.PluginNodeVendorDetails -- bs:copy$default(com.intellij.ide.plugins.PluginNodeVendorDetails,java.lang.String,java.lang.String,java.lang.Boolean,java.lang.Boolean,I,java.lang.Object):com.intellij.ide.plugins.PluginNodeVendorDetails -- equals(java.lang.Object):Z -- f:getName():java.lang.String -- f:getUrl():java.lang.String -- hashCode():I -- f:isTrader():Z -- f:isVerified():Z -bf:com.intellij.ide.plugins.PluginNodeVendorDetails$$serializer -- kotlinx.serialization.internal.GeneratedSerializer -- sf:INSTANCE:com.intellij.ide.plugins.PluginNodeVendorDetails$$serializer -- f:childSerializers():kotlinx.serialization.KSerializer[] -- f:deserialize(kotlinx.serialization.encoding.Decoder):com.intellij.ide.plugins.PluginNodeVendorDetails -- f:getDescriptor():kotlinx.serialization.descriptors.SerialDescriptor -- f:serialize(kotlinx.serialization.encoding.Encoder,com.intellij.ide.plugins.PluginNodeVendorDetails):V -f:com.intellij.ide.plugins.PluginNodeVendorDetails$Companion -- f:serializer():kotlinx.serialization.KSerializer com.intellij.ide.plugins.PluginStateListener - a:install(com.intellij.ide.plugins.IdeaPluginDescriptor):V - uninstall(com.intellij.ide.plugins.IdeaPluginDescriptor):V diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginNode.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginNode.java index 1ed8b2c4ef7c..b2f3a34ffbd8 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginNode.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginNode.java @@ -237,10 +237,12 @@ public final class PluginNode implements IdeaPluginDescriptor { this.vendor = vendor; } + @ApiStatus.Internal public @Nullable PluginNodeVendorDetails getVendorDetails() { return vendorDetails; } + @ApiStatus.Internal public void setVendorDetails(@Nullable PluginNodeVendorDetails vendorDetails) { this.vendorDetails = vendorDetails; } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginNodeVendorDetails.kt b/platform/platform-impl/src/com/intellij/ide/plugins/PluginNodeVendorDetails.kt index 09dedede12f7..6bdb7593664d 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginNodeVendorDetails.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginNodeVendorDetails.kt @@ -3,11 +3,13 @@ package com.intellij.ide.plugins import com.intellij.openapi.util.NlsSafe import kotlinx.serialization.Serializable +import org.jetbrains.annotations.ApiStatus /** * Marketplace vendor details. */ @Serializable +@ApiStatus.Internal data class PluginNodeVendorDetails( @NlsSafe val name: String, val url: String? = null, diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java b/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java index a8343bb6d264..dba88e551602 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java @@ -201,6 +201,7 @@ public final class RepositoryHelper { } } + @ApiStatus.Internal @Deprecated(forRemoval = true) public static @NotNull Collection mergePluginsFromRepositories( @NotNull List marketplacePlugins, diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/api/PluginDto.kt b/platform/platform-impl/src/com/intellij/ide/plugins/api/PluginDto.kt index b25b0dba41ff..8b2bd4a2defc 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/api/PluginDto.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/api/PluginDto.kt @@ -48,7 +48,6 @@ class PluginDto( override var vendorDetails: PluginNodeVendorDetails? = null override var reviewComments: ReviewsPageContainer? = null - // Mutable properties override var forumUrl: String? = null override var licenseUrl: String? = null override var bugtrackerUrl: String? = null diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/ApplyPluginsStateResult.kt b/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/ApplyPluginsStateResult.kt index a8e483a14aa3..768b24447160 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/ApplyPluginsStateResult.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/ApplyPluginsStateResult.kt @@ -7,7 +7,7 @@ import org.jetbrains.annotations.ApiStatus @ApiStatus.Internal @Serializable -class ApplyPluginsStateResult { - val pluginsToEnable: MutableSet = HashSet() +data class ApplyPluginsStateResult( + val pluginsToEnable: Set = emptySet(), var needRestart: Boolean = false -} \ No newline at end of file +) \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/PluginSearchResult.kt b/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/PluginSearchResult.kt index 59dc865f41db..f5f2e80e75e5 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/PluginSearchResult.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/PluginSearchResult.kt @@ -5,7 +5,9 @@ import com.intellij.ide.plugins.api.PluginDto import com.intellij.ide.plugins.newui.PluginUiModel import kotlinx.serialization.Serializable import kotlinx.serialization.Transient +import org.jetbrains.annotations.ApiStatus +@ApiStatus.Internal @Serializable data class PluginSearchResult( @Transient val pluginModels: List = emptyList(), diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/utils/MarketplaceUrls.kt b/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/utils/MarketplaceUrls.kt index fa588f177365..1cfd05fb327c 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/utils/MarketplaceUrls.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/marketplace/utils/MarketplaceUrls.kt @@ -22,6 +22,7 @@ object MarketplaceUrls { @JvmStatic fun getPluginManagerUrl() = MarketplaceCustomizationService.getInstance().getPluginManagerUrl().trimEnd('/') + @JvmStatic fun getPluginManagerHost() = URL(getPluginManagerUrl()).host!! @@ -79,8 +80,8 @@ object MarketplaceUrls { fun getPluginReviewNoteUrl() = "${getPluginManagerUrl()}/docs/marketplace/reviews-policy.html" // plugin manager url? @JvmStatic - fun getPluginWriteReviewUrl(pluginManagerUrl: String, pluginId: PluginId, version: String?): String = buildString { - append("${pluginManagerUrl}/intellij/${pluginId.urlEncode()}/review/new") + fun getPluginWriteReviewUrl(pluginId: PluginId, version: String? = null): String = buildString { + append("${getPluginManagerUrl()}/intellij/${pluginId.urlEncode()}/review/new") append("?build=$IDE_BUILD_FOR_REQUEST") version?.let { append("&version=$it") @@ -92,7 +93,7 @@ object MarketplaceUrls { descriptor: IdeaPluginDescriptor, uuid: String, buildNumber: BuildNumber?, - currentVersion: IdeaPluginDescriptor? + currentVersion: IdeaPluginDescriptor?, ): String { val updatedFrom = currentVersion?.version ?: "" val parameters = hashMapOf( diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt index 89bd7d9f4fb2..024ea1796c83 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt @@ -119,13 +119,12 @@ object DefaultUiPluginManagerController : UiPluginManagerController { override fun applySession(sessionId: String, parent: JComponent?, project: Project?): ApplyPluginsStateResult { var needRestart = false - val applyResult = ApplyPluginsStateResult() - val session = findSession(sessionId) ?: return applyResult + val session = findSession(sessionId) ?: return ApplyPluginsStateResult() if (ApplicationManager.getApplication().isExitInProgress) { needRestart = true } val pluginIdMap = buildPluginIdMap() - applyResult.pluginsToEnable.addAll(updatePluginDependencies(session, pluginIdMap)) + val pluginsToEnable = updatePluginDependencies(session, pluginIdMap) assertCanApply(session, pluginIdMap) val pluginEnabler = PluginEnabler.getInstance() @@ -186,8 +185,7 @@ object DefaultUiPluginManagerController : UiPluginManagerController { } session.isUiDisposedWithApply = true - applyResult.needRestart = needRestart - return applyResult + return ApplyPluginsStateResult(pluginsToEnable, needRestart) } override suspend fun resetSession(sessionId: String, removeSession: Boolean, parentComponent: JComponent?): Map { @@ -492,10 +490,6 @@ object DefaultUiPluginManagerController : UiPluginManagerController { return MarketplaceRequests.getInstance().loadPluginMetadata(externalPluginId) } - override fun getPluginManagerUrl(): String { - return MarketplaceUrls.getPluginManagerUrl() - } - override fun getLastCompatiblePluginUpdateModel(pluginId: PluginId, buildNumber: String?, indicator: ProgressIndicator?): PluginUiModel? { return MarketplaceRequests.getInstance().getLastCompatiblePluginUpdateModel(pluginId, BuildNumber.fromString(buildNumber), indicator) } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginDetailsPageComponent.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginDetailsPageComponent.kt index 717775c6ff59..3cfd6437b5e8 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginDetailsPageComponent.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginDetailsPageComponent.kt @@ -534,8 +534,7 @@ class PluginDetailsPageComponent @JvmOverloads constructor( newReviewLink.showWithBrowseUrl(IdeBundle.message("plugins.new.review.action"), false) { val pluginUiModel = plugin!! val installedPlugin = pluginManager.getPlugin(pluginUiModel.pluginId) - val pluginManagerUrl = pluginManager.getPluginManagerUrl() - getPluginWriteReviewUrl(pluginManagerUrl, pluginUiModel.pluginId, installedPlugin?.version) + getPluginWriteReviewUrl(pluginUiModel.pluginId, installedPlugin?.version) } val notePanel: JPanel = Wrapper( @@ -647,7 +646,7 @@ class PluginDetailsPageComponent @JvmOverloads constructor( if (component == null) { installedDescriptorForMarketplace = null updateDescriptor = installedDescriptorForMarketplace - plugin = null + plugin = updateDescriptor select(1, true) setEmptyState(if (multiSelection) EmptyState.MULTI_SELECT else EmptyState.NONE_SELECTED) } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginUiModel.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginUiModel.kt index a653417dbd74..9714cd2e71e1 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginUiModel.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginUiModel.kt @@ -92,6 +92,10 @@ interface PluginUiModel { var externalUpdateId: String? var defaultTrialPeriod: Int? var customTrialPeriods: Map? + + /** + * Date of the last plugin update + */ var date: Long var suggestedFeatures: Collection diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt index 520edb37494f..5db57cfc7524 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt @@ -220,10 +220,6 @@ class UiPluginManager { return getController().loadPluginMetadata(externalPluginId) } - fun getPluginManagerUrl(): String { - return getController().getPluginManagerUrl() - } - fun getAllPluginsTags(): Set { return getController().getAllPluginsTags() } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt index bd9a080ff52a..f0d767b883b0 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt @@ -34,7 +34,6 @@ interface UiPluginManagerController { fun loadPluginDetails(xmlId: String, ideCompatibleUpdate: IdeCompatibleUpdate, indicator: ProgressIndicator? = null): PluginUiModel fun loadPluginReviews(pluginId: PluginId, page: Int): List? fun loadPluginMetadata(externalPluginId: String): IntellijPluginMetadata? - fun getPluginManagerUrl(): String fun createSession(sessionId: String) fun closeSession(sessionId: String) fun unloadDynamicPlugin(parentComponent: JComponent?, pluginId: PluginId, isUpdate: Boolean): Boolean diff --git a/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginInstallerApi.kt b/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginInstallerApi.kt index 4f94f52674da..27849b277d0b 100644 --- a/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginInstallerApi.kt +++ b/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginInstallerApi.kt @@ -97,7 +97,7 @@ class BackendPluginInstallerApi : PluginInstallerApi { FileUtil.delete(pluginDescriptor.getPluginPath()) } catch (e: IOException) { - LOG.debug(e); + LOG.warn(e); } } diff --git a/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt b/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt index 059c4195d654..159ac59dc5db 100644 --- a/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt +++ b/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt @@ -131,10 +131,6 @@ class BackendPluginManagerApi : PluginManagerApi { return DefaultUiPluginManagerController.loadPluginMetadata(externalPluginId) } - override suspend fun getPluginManagerUrl(): String { - return DefaultUiPluginManagerController.getPluginManagerUrl() - } - override suspend fun getAllPluginsTags(): Set { return DefaultUiPluginManagerController.getAllPluginsTags() } diff --git a/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt b/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt index d04ba928a10a..62b80bf1cbfb 100644 --- a/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt +++ b/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt @@ -189,10 +189,6 @@ class BackendUiPluginManagerController() : UiPluginManagerController { return awaitForResult { PluginManagerApi.getInstance().loadPluginMetadata(externalPluginId) } } - override fun getPluginManagerUrl(): String { - return awaitForResult { PluginManagerApi.getInstance().getPluginManagerUrl() } - } - override fun getAllPluginsTags(): Set { return awaitForResult { PluginManagerApi.getInstance().getAllPluginsTags() } } @@ -242,7 +238,7 @@ class BackendUiPluginManagerController() : UiPluginManagerController { } @Deprecated("Test method ") - fun awaitForResult(body: suspend () -> T): T { + private fun awaitForResult(body: suspend () -> T): T { val deferred = CompletableDeferred() service().coroutineScope.launch { deferred.complete(body()) diff --git a/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt b/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt index 91ef7b85aba4..57f6ad284c53 100644 --- a/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt +++ b/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt @@ -35,7 +35,6 @@ interface PluginManagerApi : RemoteApi { suspend fun loadMetadata(xmlId: String, ideCompatibleUpdate: IdeCompatibleUpdate): PluginDto suspend fun loadPluginReviews(pluginId: PluginId, page: Int): List? suspend fun loadPluginMetadata(externalPluginId: String): IntellijPluginMetadata? - suspend fun getPluginManagerUrl(): String suspend fun getAllPluginsTags(): Set suspend fun getAllVendors(): Set suspend fun updateDescriptorsForInstalledPlugins()