List<String> (@NotNull IdeaPluginDescriptor plugin) { List<String> tags = null; String productCode = plugin.getProductCode(); if (plugin instanceof PluginNode) { tags = ((PluginNode)plugin).getTags(); if (productCode != null) { if (LicensePanel.isEA2Product(productCode)) { if (tags != null && tags.contains(Tags.Paid.name())) { tags = new ArrayList<>(tags); tags.remove(Tags.Paid.name()); } } else if (tags == null) { return List.of(Tags.Paid.name()); } } } else if (productCode != null && !plugin.isBundled() && !LicensePanel.isEA2Product(productCode)) { LicensingFacade instance = LicensingFacade.getInstance(); if (instance != null) { String stamp = instance.getConfirmationStamp(productCode); if (stamp != null) { return List.of(stamp.startsWith("eval:") ? Tags.Trial.name() : Tags.Purchased.name()); } } return plugin.isLicenseOptional() ? List.of(Tags.Freemium.name()) : List.of(Tags.Paid.name()); } if (ContainerUtil.isEmpty(tags)) { return List.of(); } if (tags.size() > 1) { tags = new ArrayList<>(tags); if (tags.remove(Tags.EAP.name())) { tags.add(0, Tags.EAP.name()); } if (tags.remove(Tags.Paid.name())) { tags.add(0, Tags.Paid.name()); } if (tags.remove(Tags.Freemium.name())) { tags.add(0, Tags.Freemium.name()); } } return tags; }