diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2016-03-16 21:52:47 +0100 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2016-03-18 10:13:42 +0100 |
commit | b5f917337a9373d801f63910214d8ce4be53afdd (patch) | |
tree | 2c34473d1915466faf27b30379a71b98307b14c8 /sonar-core | |
parent | cfcbe278f7ced12599d898d50f3fe68bfbf95155 (diff) | |
download | sonarqube-b5f917337a9373d801f63910214d8ce4be53afdd.tar.gz sonarqube-b5f917337a9373d801f63910214d8ce4be53afdd.zip |
SONAR-7459 new interface org.sonar.api.Plugin
It allows to check version of SonarQube to filter extensions
Diffstat (limited to 'sonar-core')
4 files changed, 20 insertions, 18 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java b/sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java index 56ed5525948..d5da2bb12a8 100644 --- a/sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java +++ b/sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java @@ -24,6 +24,7 @@ import com.google.common.collect.Lists; import java.net.URL; import java.net.URLClassLoader; import java.util.List; +import org.sonar.api.Plugin; import org.sonar.api.SonarPlugin; import org.sonar.core.platform.PluginInfo; import org.sonar.core.platform.PluginRepository; @@ -71,7 +72,7 @@ class I18nClassloader extends URLClassLoader { // there may be duplicated classloaders in the list. List<ClassLoader> list = Lists.newArrayList(); for (PluginInfo info : pluginRepository.getPluginInfos()) { - SonarPlugin plugin = pluginRepository.getPluginInstance(info.getKey()); + Plugin plugin = pluginRepository.getPluginInstance(info.getKey()); list.add(plugin.getClass().getClassLoader()); } list.add(I18nClassloader.class.getClassLoader()); diff --git a/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java b/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java index 44b90ae7d55..d88d037fa7e 100644 --- a/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java +++ b/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java @@ -28,7 +28,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; import org.apache.commons.lang.SystemUtils; -import org.sonar.api.SonarPlugin; +import org.sonar.api.Plugin; import org.sonar.api.utils.log.Loggers; import org.sonar.updatecenter.common.Version; @@ -46,7 +46,7 @@ import static java.util.Arrays.asList; * Plugins have their own isolated classloader, inheriting only from API classes. * Some plugins can extend a "base" plugin, sharing the same classloader. * <p/> - * This class is stateless. It does not keep pointers to classloaders and {@link org.sonar.api.SonarPlugin}. + * This class is stateless. It does not keep pointers to classloaders and {@link org.sonar.api.Plugin}. */ public class PluginLoader { @@ -67,7 +67,7 @@ public class PluginLoader { this.classloaderFactory = classloaderFactory; } - public Map<String, SonarPlugin> load(Map<String, PluginInfo> infoByKeys) { + public Map<String, Plugin> load(Map<String, PluginInfo> infoByKeys) { Collection<PluginClassLoaderDef> defs = defineClassloaders(infoByKeys); Map<PluginClassLoaderDef, ClassLoader> classloaders = classloaderFactory.create(defs); return instantiatePluginClasses(classloaders); @@ -120,15 +120,15 @@ public class PluginLoader { } /** - * Instantiates collection of {@link org.sonar.api.SonarPlugin} according to given metadata and classloaders + * Instantiates collection of {@link org.sonar.api.Plugin} according to given metadata and classloaders * * @return the instances grouped by plugin key * @throws IllegalStateException if at least one plugin can't be correctly loaded */ @VisibleForTesting - Map<String, SonarPlugin> instantiatePluginClasses(Map<PluginClassLoaderDef, ClassLoader> classloaders) { + Map<String, Plugin> instantiatePluginClasses(Map<PluginClassLoaderDef, ClassLoader> classloaders) { // instantiate plugins - Map<String, SonarPlugin> instancesByPluginKey = new HashMap<>(); + Map<String, Plugin> instancesByPluginKey = new HashMap<>(); for (Map.Entry<PluginClassLoaderDef, ClassLoader> entry : classloaders.entrySet()) { PluginClassLoaderDef def = entry.getKey(); ClassLoader classLoader = entry.getValue(); @@ -138,7 +138,7 @@ public class PluginLoader { String pluginKey = mainClassEntry.getKey(); String mainClass = mainClassEntry.getValue(); try { - instancesByPluginKey.put(pluginKey, (SonarPlugin) classLoader.loadClass(mainClass).newInstance()); + instancesByPluginKey.put(pluginKey, (Plugin) classLoader.loadClass(mainClass).newInstance()); } catch (UnsupportedClassVersionError e) { throw new IllegalStateException(String.format("The plugin [%s] does not support Java %s", pluginKey, SystemUtils.JAVA_VERSION_TRIMMED), e); @@ -151,8 +151,8 @@ public class PluginLoader { return instancesByPluginKey; } - public void unload(Collection<SonarPlugin> plugins) { - for (SonarPlugin plugin : plugins) { + public void unload(Collection<Plugin> plugins) { + for (Plugin plugin : plugins) { ClassLoader classLoader = plugin.getClass().getClassLoader(); if (classLoader instanceof Closeable && classLoader != classloaderFactory.baseClassLoader()) { try { diff --git a/sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java b/sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java index e71e5e58bf1..9f302ac81f7 100644 --- a/sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java +++ b/sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java @@ -20,7 +20,7 @@ package org.sonar.core.platform; import java.util.Collection; -import org.sonar.api.SonarPlugin; +import org.sonar.api.Plugin; import org.sonar.api.batch.BatchSide; import org.sonar.api.server.ServerSide; @@ -36,9 +36,9 @@ public interface PluginRepository { PluginInfo getPluginInfo(String key); /** - * @return the instance of {@link SonarPlugin} for the given plugin key. Never return null. + * @return the instance of {@link Plugin} for the given plugin key. Never return null. */ - SonarPlugin getPluginInstance(String key); + Plugin getPluginInstance(String key); boolean hasPlugin(String key); } diff --git a/sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java b/sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java index e2912f3ff20..0bdef80d769 100644 --- a/sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java +++ b/sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java @@ -30,6 +30,7 @@ import org.assertj.core.data.MapEntry; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; +import org.sonar.api.Plugin; import org.sonar.api.SonarPlugin; import org.sonar.updatecenter.common.Version; @@ -51,7 +52,7 @@ public class PluginLoaderTest { PluginClassLoaderDef def = new PluginClassLoaderDef("fake"); def.addMainClass("fake", FakePlugin.class.getName()); - Map<String, SonarPlugin> instances = loader.instantiatePluginClasses(ImmutableMap.of(def, getClass().getClassLoader())); + Map<String, Plugin> instances = loader.instantiatePluginClasses(ImmutableMap.of(def, getClass().getClassLoader())); assertThat(instances).containsOnlyKeys("fake"); assertThat(instances.get("fake")).isInstanceOf(FakePlugin.class); } @@ -168,7 +169,7 @@ public class PluginLoaderTest { public void plugin_is_not_recognised_as_system_extension_if_key_is_views_and_extends_another_plugin() throws IOException { PluginInfo foo = create52PluginInfo("foo"); PluginInfo views = create52PluginInfo("views") - .setBasePlugin("foo"); + .setBasePlugin("foo"); Collection<PluginClassLoaderDef> defs = loader.defineClassloaders(ImmutableMap.of("foo", foo, "views", views)); @@ -178,9 +179,9 @@ public class PluginLoaderTest { private PluginInfo create52PluginInfo(String pluginKey) throws IOException { File jarFile = temp.newFile(); return new PluginInfo(pluginKey) - .setJarFile(jarFile) - .setMainClass("org.foo." + pluginKey + "Plugin") - .setMinimalSqVersion(Version.create("5.2")); + .setJarFile(jarFile) + .setMainClass("org.foo." + pluginKey + "Plugin") + .setMinimalSqVersion(Version.create("5.2")); } /** |