aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2016-03-16 21:52:47 +0100
committerSimon Brandhof <simon.brandhof@sonarsource.com>2016-03-18 10:13:42 +0100
commitb5f917337a9373d801f63910214d8ce4be53afdd (patch)
tree2c34473d1915466faf27b30379a71b98307b14c8 /sonar-core
parentcfcbe278f7ced12599d898d50f3fe68bfbf95155 (diff)
downloadsonarqube-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')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java18
-rw-r--r--sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java6
-rw-r--r--sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java11
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"));
}
/**