void () { if (myAdditionalFeaturesLoaded) { return; } myAdditionalFeaturesLoaded = true; ProductivityFeaturesProvider.EP_NAME.processWithPluginDescriptor((provider, pluginDescriptor) -> { for (String xmlUrl : provider.getXmlFilesUrls()) { try { readFromXml(Strings.trimStart(xmlUrl, "/"), pluginDescriptor.getClassLoader(), provider); } catch (Exception e) { LOG.error(new PluginException("Error while reading " + xmlUrl + " from " + provider + ": " + e.getMessage(), pluginDescriptor.getPluginId())); } } final GroupDescriptor[] groupDescriptors = provider.getGroupDescriptors(); if (groupDescriptors != null) { for (GroupDescriptor groupDescriptor : groupDescriptors) { // do not allow to override groups myGroups.putIfAbsent(groupDescriptor.getId(), groupDescriptor); } } final FeatureDescriptor[] featureDescriptors = provider.getFeatureDescriptors(); if (featureDescriptors != null) { for (FeatureDescriptor featureDescriptor : featureDescriptors) { addFeature(featureDescriptor); } } final ApplicabilityFilter[] applicabilityFilters = provider.getApplicabilityFilters(); if (applicabilityFilters != null) { myApplicabilityFilters.add(new ApplicabilityFiltersData(provider, applicabilityFilters)); } return Unit.INSTANCE; }); }