public static final String FILE_SIZE_LIMIT = "sonar.filesize.limit";
public static final String LINKS_SOURCES_DEV = "sonar.links.scm_dev";
public static final String DISABLE_PROJECT_AND_ORG_AUTODETECTION = "sonar.keys_autodetection.disabled";
+ public static final String PLUGIN_LOADING_OPTIMIZATION_KEY = "sonar.plugins.downloadOnlyRequired";
private ScannerProperties() {
// only static stuff
.description(
"Allows discarding files from analysis exceeding certain sizes.")
.hidden()
+ .build(),
+ PropertyDefinition.builder(PLUGIN_LOADING_OPTIMIZATION_KEY)
+ .name("Enable scanner plugin loading optimization")
+ .description("When enabled, scanners will only download plugins required for detected languages.")
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory("Performance")
+ .type(BOOLEAN)
+ .defaultValue("true")
.build());
}
}
import static java.util.stream.Collectors.toMap;
import static org.sonar.api.utils.Preconditions.checkState;
+import static org.sonar.core.config.ScannerProperties.PLUGIN_LOADING_OPTIMIZATION_KEY;
/**
* Orchestrates the installation and loading of plugins
private Map<String, Plugin> pluginInstancesByKeys;
private Map<String, ScannerPlugin> pluginsByKeys;
private Map<ClassLoader, String> keysByClassLoader;
- private boolean shouldLoadAllPluginsOnStart;
+ private boolean shouldLoadOnlyRequiredPluginsOnStart;
public ScannerPluginRepository(PluginInstaller installer, PluginJarExploder pluginJarExploder, PluginClassLoader loader, Configuration properties) {
this.installer = installer;
@Override
public void start() {
- shouldLoadAllPluginsOnStart = properties.getBoolean("sonar.plugins.loadAll").orElse(false);
- if (shouldLoadAllPluginsOnStart) {
- LOG.warn("sonar.plugins.loadAll is true, so ALL available plugins will be downloaded");
+ shouldLoadOnlyRequiredPluginsOnStart = properties.getBoolean(PLUGIN_LOADING_OPTIMIZATION_KEY).orElse(true);
+ if (!shouldLoadOnlyRequiredPluginsOnStart) {
+ LOG.warn("{} is false, so ALL available plugins will be downloaded", PLUGIN_LOADING_OPTIMIZATION_KEY);
pluginsByKeys = new HashMap<>(installer.installAllPlugins());
} else {
pluginsByKeys = new HashMap<>(installer.installRequiredPlugins());
}
public Collection<PluginInfo> installPluginsForLanguages(Set<String> languageKeys) {
- if (shouldLoadAllPluginsOnStart) {
+ if (!shouldLoadOnlyRequiredPluginsOnStart) {
return Collections.emptySet();
}
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import static org.sonar.core.config.ScannerProperties.PLUGIN_LOADING_OPTIMIZATION_KEY;
public class ScannerPluginRepositoryTest {
}
@Test
- public void should_install_all_plugins_when_loadall_flag_is_set() {
- when(properties.getBoolean("sonar.plugins.loadAll")).thenReturn(Optional.of(true));
-
+ public void should_install_all_plugins_when_downloadOnlyRequired_flag_is_false() {
+ when(properties.getBoolean(PLUGIN_LOADING_OPTIMIZATION_KEY)).thenReturn(Optional.of(false));
underTest.start();
verify(installer).installAllPlugins();