From d59d3bbe18064d5d03e3cf23beeb2faf876e1c9e Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 21 Feb 2020 16:09:28 +0100 Subject: [PATCH] support 'optional' license attribute for plugin-descriptor tag (MP-2910 Free functionality in paid plugins) GitOrigin-RevId: 68c14424805b1effca53e9f6ddd82f567c122670 --- .../com/intellij/ide/plugins/ProductDescriptor.java | 3 +++ .../intellij/ide/plugins/IdeaPluginDescriptorImpl.java | 6 ++++++ .../openapi/extensions/DefaultPluginDescriptor.java | 5 +++++ .../intellij/openapi/extensions/PluginDescriptor.java | 2 ++ .../src/com/intellij/ide/plugins/PluginNode.java | 10 ++++++++++ .../openapi/updateSettings/impl/PluginDownloader.java | 7 +++++++ .../com/intellij/ide/plugins/PluginDescriptorTest.kt | 3 ++- 7 files changed, 35 insertions(+), 1 deletion(-) diff --git a/platform/core-api/src/com/intellij/ide/plugins/ProductDescriptor.java b/platform/core-api/src/com/intellij/ide/plugins/ProductDescriptor.java index 8e63d28d202c..2fbb1632eaa6 100644 --- a/platform/core-api/src/com/intellij/ide/plugins/ProductDescriptor.java +++ b/platform/core-api/src/com/intellij/ide/plugins/ProductDescriptor.java @@ -14,4 +14,7 @@ public class ProductDescriptor { @Attribute("release-version") public int releaseVersion; + + @Attribute("optional") + public boolean optional; } diff --git a/platform/core-impl/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java b/platform/core-impl/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java index fc179819205a..c0deb94f1ac4 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java +++ b/platform/core-impl/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java @@ -70,6 +70,7 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor, Plu private @Nullable String myProductCode; private @Nullable Date myReleaseDate; private int myReleaseVersion; + private boolean myIsLicenseOptional; private String myResourceBundleBaseName; private String myChangeNotes; private String myVersion; @@ -306,6 +307,7 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor, Plu myProductCode = StringUtil.nullize(child.getAttributeValue("code")); myReleaseDate = parseReleaseDate(child.getAttributeValue("release-date"), context.parentContext); myReleaseVersion = StringUtil.parseInt(child.getAttributeValue("release-version"), 0); + myIsLicenseOptional = Boolean.valueOf(child.getAttributeValue("optional", "false")); break; case "vendor": @@ -725,6 +727,10 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor, Plu return myReleaseVersion; } + public boolean isLicenseOptional() { + return myIsLicenseOptional; + } + @Override public PluginId @NotNull [] getDependentPluginIds() { return myDependencies; diff --git a/platform/extensions/src/com/intellij/openapi/extensions/DefaultPluginDescriptor.java b/platform/extensions/src/com/intellij/openapi/extensions/DefaultPluginDescriptor.java index 5511514d995b..f3328ff92e66 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/DefaultPluginDescriptor.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/DefaultPluginDescriptor.java @@ -80,6 +80,11 @@ public final class DefaultPluginDescriptor implements IdeaPluginDescriptor { return null; } + @Override + public boolean isLicenseOptional() { + return false; + } + @Override public int getReleaseVersion() { return 0; diff --git a/platform/extensions/src/com/intellij/openapi/extensions/PluginDescriptor.java b/platform/extensions/src/com/intellij/openapi/extensions/PluginDescriptor.java index a477b14ea788..ff95e6455122 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/PluginDescriptor.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/PluginDescriptor.java @@ -43,6 +43,8 @@ public interface PluginDescriptor { int getReleaseVersion(); + boolean isLicenseOptional(); + PluginId @NotNull [] getDependentPluginIds(); PluginId @NotNull [] getOptionalDependentPluginIds(); 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 0164e21e78eb..4813a04ee619 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginNode.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginNode.java @@ -25,6 +25,7 @@ public final class PluginNode implements IdeaPluginDescriptor { private String productCode; private Date releaseDate; private int releaseVersion; + private boolean licenseOptional; private String version; private String vendor; private String description; @@ -111,6 +112,15 @@ public final class PluginNode implements IdeaPluginDescriptor { this.releaseVersion = releaseVersion; } + @Override + public boolean isLicenseOptional() { + return licenseOptional; + } + + public void setLicenseOptional(boolean optional) { + this.licenseOptional = optional; + } + @Override public String getCategory() { return category; diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java index 4a59b1049d2c..e698d1722436 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java @@ -44,6 +44,7 @@ public final class PluginDownloader { private final @Nullable String myProductCode; private final Date myReleaseDate; private final int myReleaseVersion; + private final boolean myLicenseOptional; private final String myDescription; private final List myDepends; @@ -63,6 +64,7 @@ public final class PluginDownloader { myProductCode = descriptor.getProductCode(); myReleaseDate = descriptor.getReleaseDate(); myReleaseVersion = descriptor.getReleaseVersion(); + myLicenseOptional = descriptor.isLicenseOptional(); myDescription = descriptor.getDescription(); myDepends = descriptor instanceof PluginNode ? ((PluginNode)descriptor).getDepends() : Arrays.asList(descriptor.getDependentPluginIds()); @@ -109,6 +111,10 @@ public final class PluginDownloader { return myReleaseVersion; } + public boolean isLicenseOptional() { + return myLicenseOptional; + } + @Nullable public BuildNumber getBuildNumber() { return myBuildNumber; @@ -378,6 +384,7 @@ public final class PluginDownloader { node.setProductCode(downloader.getProductCode()); node.setReleaseDate(downloader.getReleaseDate()); node.setReleaseVersion(downloader.getReleaseVersion()); + node.setLicenseOptional(downloader.isLicenseOptional()); node.setVersion(downloader.getPluginVersion()); node.setRepositoryName(host); node.setDownloadUrl(downloader.myPluginUrl); diff --git a/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.kt b/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.kt index 546275f819da..fdc4b66ca606 100644 --- a/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.kt @@ -142,12 +142,13 @@ class PluginDescriptorTest { bar JetBrains - + """) val descriptor = loadDescriptorInTest(pluginFile.parent.parent) assertThat(descriptor).isNotNull() assertThat(descriptor.vendor).isEqualTo("JetBrains") assertThat(SimpleDateFormat("yyyyMMdd", Locale.US).format(descriptor.releaseDate)).isEqualTo("20190811") + assertThat(descriptor.isLicenseOptional).isTrue() } @Suppress("PluginXmlValidity")