aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java13
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java12
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java8
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java4
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jarbin2079 -> 1613 bytes
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jarbin2079 -> 1613 bytes
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jarbin2050 -> 1587 bytes
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/ProfileLoader.java38
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java9
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java15
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java13
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java7
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/compute/package-info.java24
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/debt/package-info.java23
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/deprecated/ResourceFilters.java49
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/Data.java28
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/ResourceNotPersistedException.java34
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/StringData.java40
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java13
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java6
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java8
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/deprecated/ResourceFiltersTest.java47
-rw-r--r--sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java4
-rw-r--r--sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java14
-rw-r--r--sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java4
-rw-r--r--sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java3
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/Plugin.java64
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java22
31 files changed, 446 insertions, 68 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java
index c23cbb881a9..0b04cd571f9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java
@@ -22,17 +22,18 @@ package org.sonar.server.debt;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Maps;
+import org.picocontainer.Startable;
+import org.sonar.api.Plugin;
+import org.sonar.api.server.ServerSide;
+import org.sonar.core.platform.PluginInfo;
+import org.sonar.core.platform.PluginRepository;
+
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
-import org.picocontainer.Startable;
-import org.sonar.api.SonarPlugin;
-import org.sonar.api.server.ServerSide;
-import org.sonar.core.platform.PluginInfo;
-import org.sonar.core.platform.PluginRepository;
import static com.google.common.collect.Lists.newArrayList;
@@ -89,7 +90,7 @@ public class DebtModelPluginRepository implements Startable {
contributingPluginKeyToClassLoader.put(DEFAULT_MODEL, getClass().getClassLoader());
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
String pluginKey = pluginInfo.getKey();
- SonarPlugin plugin = pluginRepository.getPluginInstance(pluginKey);
+ Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
ClassLoader classLoader = plugin.getClass().getClassLoader();
if (classLoader.getResource(getXMLFilePath(pluginKey)) != null) {
contributingPluginKeyToClassLoader.put(pluginKey, classLoader);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java b/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
index 392f1b8ae6a..8f7cb251897 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
@@ -21,19 +21,21 @@ package org.sonar.server.platform;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
-import java.io.File;
-import java.io.IOException;
-import javax.annotation.Nullable;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.api.platform.ServerFileSystem;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;
+import javax.annotation.Nullable;
+
+import java.io.File;
+import java.io.IOException;
+
/**
* Ruby on Rails requires the files to be on filesystem but not in Java classpath (JAR). This component extracts
* all the needed files from plugins and copy them to $SONAR_HOME/temp
@@ -60,7 +62,7 @@ public class RailsAppsDeployer implements Startable {
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
String pluginKey = pluginInfo.getKey();
- SonarPlugin plugin = pluginRepository.getPluginInstance(pluginKey);
+ Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
try {
deployRailsApp(appsDir, pluginKey, plugin.getClass().getClassLoader());
} catch (Exception e) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java
index f7f35e3c8e2..1bd64568383 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java
@@ -24,7 +24,7 @@ import com.google.common.collect.ListMultimap;
import java.util.Map;
import org.sonar.api.Extension;
import org.sonar.api.ExtensionProvider;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.AnnotationUtils;
import org.sonar.core.platform.ComponentContainer;
@@ -49,7 +49,7 @@ public class ServerExtensionInstaller {
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
try {
String pluginKey = pluginInfo.getKey();
- SonarPlugin plugin = pluginRepository.getPluginInstance(pluginKey);
+ Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
container.addExtension(pluginInfo, plugin);
for (Object extension : plugin.getExtensions()) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
index e0da2f5fc37..ea29ff323f7 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
@@ -37,7 +37,7 @@ import java.util.Set;
import javax.annotation.Nonnull;
import org.apache.commons.io.FileUtils;
import org.picocontainer.Startable;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.api.platform.Server;
import org.sonar.api.platform.ServerUpgradeStatus;
import org.sonar.api.utils.MessageException;
@@ -83,7 +83,7 @@ public class ServerPluginRepository implements PluginRepository, Startable {
// following fields are available after startup
private final Map<String, PluginInfo> pluginInfosByKeys = new HashMap<>();
- private final Map<String, SonarPlugin> pluginInstancesByKeys = new HashMap<>();
+ private final Map<String, Plugin> pluginInstancesByKeys = new HashMap<>();
public ServerPluginRepository(Server server, ServerUpgradeStatus upgradeStatus,
DefaultServerFileSystem fs, PluginLoader loader) {
@@ -348,8 +348,8 @@ public class ServerPluginRepository implements PluginRepository, Startable {
}
@Override
- public SonarPlugin getPluginInstance(String key) {
- SonarPlugin plugin = pluginInstancesByKeys.get(key);
+ public Plugin getPluginInstance(String key) {
+ Plugin plugin = pluginInstancesByKeys.get(key);
if (plugin == null) {
throw new IllegalArgumentException(format("Plugin [%s] does not exist", key));
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
index 68890ed20da..cbc4aeee1a3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
@@ -27,7 +27,7 @@ import java.util.List;
import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.api.config.License;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
@@ -285,7 +285,7 @@ public final class JRubyFacade {
}
public Object getComponentByClassname(String pluginKey, String className) {
- SonarPlugin plugin = get(PluginRepository.class).getPluginInstance(pluginKey);
+ Plugin plugin = get(PluginRepository.class).getPluginInstance(pluginKey);
try {
Class componentClass = plugin.getClass().getClassLoader().loadClass(className);
return get(componentClass);
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jar b/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jar
index e6ba8a4cc4b..1ca2ea2d1f6 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jar
+++ b/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jar
Binary files differ
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jar b/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jar
index 59fc4bcfc75..c814e8a5176 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jar
+++ b/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jar
Binary files differ
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jar b/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jar
index 4e58b7f8b58..9d608e08281 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jar
+++ b/server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jar
Binary files differ
diff --git a/sonar-batch/src/main/java/org/sonar/batch/ProfileLoader.java b/sonar-batch/src/main/java/org/sonar/batch/ProfileLoader.java
new file mode 100644
index 00000000000..bc00a1c1a31
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/ProfileLoader.java
@@ -0,0 +1,38 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch;
+
+import org.sonar.api.config.Settings;
+import org.sonar.api.profiles.RulesProfile;
+
+/**
+ * This interface is implemented by the views plugin!!
+ *
+ * @deprecated in 4.2
+ */
+@Deprecated
+public interface ProfileLoader {
+
+ /**
+ * Loads quality profile for specified project.
+ */
+ RulesProfile load(Settings settings);
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
index 8bc7ba788eb..b6744b5ff4a 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
@@ -19,18 +19,21 @@
*/
package org.sonar.batch.bootstrap;
+import com.google.common.io.Files;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
-import com.google.common.io.Files;
+
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+
import org.apache.commons.lang.CharUtils;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
@@ -79,7 +82,7 @@ public class BatchPluginInstaller implements PluginInstaller {
* @see org.sonar.batch.mediumtest.BatchMediumTester
*/
@Override
- public Map<String, SonarPlugin> installLocals() {
+ public Map<String, Plugin> installLocals() {
return Collections.emptyMap();
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java
index bba8bea0ab2..bf1d7d12519 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java
@@ -21,14 +21,15 @@ package org.sonar.batch.bootstrap;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
-import java.util.Collection;
-import java.util.Map;
import org.picocontainer.Startable;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginLoader;
import org.sonar.core.platform.PluginRepository;
+import java.util.Collection;
+import java.util.Map;
+
/**
* Orchestrates the installation and loading of plugins
*/
@@ -37,7 +38,7 @@ public class BatchPluginRepository implements PluginRepository, Startable {
private final PluginInstaller installer;
private final PluginLoader loader;
- private Map<String, SonarPlugin> pluginInstancesByKeys;
+ private Map<String, Plugin> pluginInstancesByKeys;
private Map<String, PluginInfo> infosByKeys;
public BatchPluginRepository(PluginInstaller installer, PluginLoader loader) {
@@ -51,7 +52,7 @@ public class BatchPluginRepository implements PluginRepository, Startable {
pluginInstancesByKeys = Maps.newHashMap(loader.load(infosByKeys));
// this part is only used by tests
- for (Map.Entry<String, SonarPlugin> entry : installer.installLocals().entrySet()) {
+ for (Map.Entry<String, Plugin> entry : installer.installLocals().entrySet()) {
String pluginKey = entry.getKey();
infosByKeys.put(pluginKey, new PluginInfo(pluginKey));
pluginInstancesByKeys.put(pluginKey, entry.getValue());
@@ -80,8 +81,8 @@ public class BatchPluginRepository implements PluginRepository, Startable {
}
@Override
- public SonarPlugin getPluginInstance(String key) {
- SonarPlugin instance = pluginInstancesByKeys.get(key);
+ public Plugin getPluginInstance(String key) {
+ Plugin instance = pluginInstancesByKeys.get(key);
Preconditions.checkState(instance != null, String.format("Plugin [%s] does not exist", key));
return instance;
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java
index d0860693004..aa4f22e4e1e 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java
@@ -20,9 +20,11 @@
package org.sonar.batch.bootstrap;
import java.util.List;
+
import javax.annotation.Nullable;
+
import org.sonar.api.ExtensionProvider;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.batch.bootstrapper.EnvironmentInformation;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginInfo;
@@ -49,7 +51,7 @@ public class ExtensionInstaller {
// plugin extensions
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
- SonarPlugin plugin = pluginRepository.getPluginInstance(pluginInfo.getKey());
+ Plugin plugin = pluginRepository.getPluginInstance(pluginInfo.getKey());
for (Object extension : plugin.getExtensions()) {
doInstall(container, matcher, pluginInfo, extension);
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java
index db806c103c9..882aa173e48 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java
@@ -26,8 +26,10 @@ import org.sonar.batch.rule.RulesProvider;
import java.util.List;
import java.util.Map;
+
import org.sonar.api.CoreProperties;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
+import org.sonar.api.utils.Durations;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.UriReader;
import org.sonar.batch.index.CachesManager;
@@ -44,6 +46,8 @@ import org.sonar.batch.repository.ServerIssuesLoader;
import org.sonar.batch.repository.user.UserRepository;
import org.sonar.batch.scan.ProjectScanContainer;
import org.sonar.core.config.Logback;
+import org.sonar.core.i18n.DefaultI18n;
+import org.sonar.core.i18n.RuleI18nManager;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginClassloaderFactory;
import org.sonar.core.platform.PluginInfo;
@@ -83,7 +87,7 @@ public class GlobalContainer extends ComponentContainer {
BatchPluginPredicate.class,
ExtensionInstaller.class,
- CachesManager.class,
+ CachesManager.class,
GlobalMode.class,
GlobalSettings.class,
new RulesProvider(),
@@ -97,6 +101,9 @@ public class GlobalContainer extends ComponentContainer {
new PersistentCacheProvider(),
new WSLoaderGlobalProvider(),
System2.INSTANCE,
+ DefaultI18n.class,
+ Durations.class,
+ RuleI18nManager.class,
new GlobalRepositoriesProvider(),
UserRepository.class);
addIfMissing(BatchPluginInstaller.class, PluginInstaller.class);
@@ -121,7 +128,7 @@ public class GlobalContainer extends ComponentContainer {
private void installPlugins() {
PluginRepository pluginRepository = getComponentByType(PluginRepository.class);
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
- SonarPlugin instance = pluginRepository.getPluginInstance(pluginInfo.getKey());
+ Plugin instance = pluginRepository.getPluginInstance(pluginInfo.getKey());
addExtension(pluginInfo, instance);
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java
index dac66e617f0..e1213cfbe13 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java
@@ -19,11 +19,12 @@
*/
package org.sonar.batch.bootstrap;
-import java.util.Map;
-import org.sonar.api.SonarPlugin;
import org.sonar.api.batch.BatchSide;
+import org.sonar.api.Plugin;
import org.sonar.core.platform.PluginInfo;
+import java.util.Map;
+
@BatchSide
public interface PluginInstaller {
@@ -38,5 +39,5 @@ public interface PluginInstaller {
* Used only by tests.
* @see org.sonar.batch.mediumtest.BatchMediumTester
*/
- Map<String, SonarPlugin> installLocals();
+ Map<String, Plugin> installLocals();
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/compute/package-info.java b/sonar-batch/src/main/java/org/sonar/batch/compute/package-info.java
new file mode 100644
index 00000000000..7fd21f3ba7c
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/compute/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.batch.compute;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
diff --git a/sonar-batch/src/main/java/org/sonar/batch/debt/package-info.java b/sonar-batch/src/main/java/org/sonar/batch/debt/package-info.java
new file mode 100644
index 00000000000..98d74a000ac
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/debt/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.batch.debt;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/deprecated/ResourceFilters.java b/sonar-batch/src/main/java/org/sonar/batch/deprecated/ResourceFilters.java
new file mode 100644
index 00000000000..f60713506d7
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/deprecated/ResourceFilters.java
@@ -0,0 +1,49 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.deprecated;
+
+import com.google.common.base.Joiner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonar.api.batch.ResourceFilter;
+
+/**
+ * @since 1.12
+ */
+public class ResourceFilters {
+
+ public ResourceFilters(ResourceFilter[] filters) {
+ this(LoggerFactory.getLogger(ResourceFilters.class), filters);
+ }
+
+ public ResourceFilters() {
+ // perfect
+ }
+
+ ResourceFilters(Logger logger, ResourceFilter[] filters) {
+ check(logger, filters);
+ }
+
+ private void check(Logger logger, ResourceFilter[] filters) {
+ if (filters.length > 0) {
+ logger.warn("ResourceFilters are not supported since version 4.2: " + Joiner.on(", ").join(filters));
+ }
+ }
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/Data.java b/sonar-batch/src/main/java/org/sonar/batch/index/Data.java
new file mode 100644
index 00000000000..aa47c04e799
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/Data.java
@@ -0,0 +1,28 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.index;
+
+import java.io.Serializable;
+
+public interface Data extends Serializable {
+
+ String writeString();
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/ResourceNotPersistedException.java b/sonar-batch/src/main/java/org/sonar/batch/index/ResourceNotPersistedException.java
new file mode 100644
index 00000000000..1cf29c6fd76
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/ResourceNotPersistedException.java
@@ -0,0 +1,34 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.index;
+
+import org.sonar.api.resources.Resource;
+import org.sonar.api.utils.SonarException;
+
+/**
+ * @since 2.6
+ */
+public final class ResourceNotPersistedException extends SonarException {
+
+ public ResourceNotPersistedException(Resource resource) {
+ super(resource.toString());
+ }
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/StringData.java b/sonar-batch/src/main/java/org/sonar/batch/index/StringData.java
new file mode 100644
index 00000000000..6a88b5979b2
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/StringData.java
@@ -0,0 +1,40 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.index;
+
+public class StringData implements Data {
+ private String data = null;
+
+ public StringData() {
+ }
+
+ public StringData(String s) {
+ this.data = s;
+ }
+
+ public String data() {
+ return data;
+ }
+
+ @Override
+ public String writeString() {
+ return data;
+ }
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java
index f7544d2956b..cbd837c66c9 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java
@@ -19,24 +19,25 @@
*/
package org.sonar.batch.mediumtest;
+import org.sonar.api.Plugin;
+import org.sonar.batch.bootstrap.PluginInstaller;
+import org.sonar.core.platform.PluginInfo;
+
import java.io.File;
import java.util.HashMap;
import java.util.Map;
-import org.sonar.api.SonarPlugin;
-import org.sonar.batch.bootstrap.PluginInstaller;
-import org.sonar.core.platform.PluginInfo;
public class FakePluginInstaller implements PluginInstaller {
private final Map<String, PluginInfo> infosByKeys = new HashMap<>();
- private final Map<String, SonarPlugin> instancesByKeys = new HashMap<>();
+ private final Map<String, Plugin> instancesByKeys = new HashMap<>();
public FakePluginInstaller add(String pluginKey, File jarFile) {
infosByKeys.put(pluginKey, PluginInfo.create(jarFile));
return this;
}
- public FakePluginInstaller add(String pluginKey, SonarPlugin instance) {
+ public FakePluginInstaller add(String pluginKey, Plugin instance) {
instancesByKeys.put(pluginKey, instance);
return this;
}
@@ -47,7 +48,7 @@ public class FakePluginInstaller implements PluginInstaller {
}
@Override
- public Map<String, SonarPlugin> installLocals() {
+ public Map<String, Plugin> installLocals() {
return instancesByKeys;
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
index 039da7d57e0..1363134d449 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
@@ -35,6 +35,7 @@ import org.sonar.batch.bootstrap.ExtensionInstaller;
import org.sonar.batch.bootstrap.ExtensionMatcher;
import org.sonar.batch.bootstrap.ExtensionUtils;
import org.sonar.batch.deprecated.DeprecatedSensorContext;
+import org.sonar.batch.deprecated.ResourceFilters;
import org.sonar.batch.deprecated.perspectives.BatchPerspectives;
import org.sonar.batch.events.EventBus;
import org.sonar.batch.index.DefaultIndex;
@@ -146,6 +147,7 @@ public class ModuleScanContainer extends ComponentContainer {
BatchExtensionDictionnary.class,
IssueFilters.class,
CoverageExclusions.class,
+ ResourceFilters.class,
// rules
ModuleQProfiles.class,
diff --git a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java
index 5f260785615..2adf1b31452 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java
@@ -21,7 +21,7 @@ package org.sonar.batch.bootstrap;
import com.google.common.collect.ImmutableMap;
import org.junit.Test;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginLoader;
@@ -42,7 +42,7 @@ public class BatchPluginRepositoryTest {
public void install_and_load_plugins() {
PluginInfo info = new PluginInfo("squid");
ImmutableMap<String, PluginInfo> infos = ImmutableMap.of("squid", info);
- SonarPlugin instance = mock(SonarPlugin.class);
+ Plugin instance = mock(Plugin.class);
when(loader.load(infos)).thenReturn(ImmutableMap.of("squid", instance));
when(installer.installRemotes()).thenReturn(infos);
@@ -53,7 +53,7 @@ public class BatchPluginRepositoryTest {
assertThat(underTest.getPluginInstance("squid")).isSameAs(instance);
underTest.stop();
- verify(loader).unload(anyCollectionOf(SonarPlugin.class));
+ verify(loader).unload(anyCollectionOf(Plugin.class));
}
@Test
diff --git a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java
index 68fd361319e..aef314012ca 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java
@@ -19,19 +19,21 @@
*/
package org.sonar.batch.bootstrap;
-import java.util.Arrays;
-import java.util.List;
import org.apache.commons.lang.ClassUtils;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.BatchExtension;
import org.sonar.api.ExtensionProvider;
+import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.batch.SupportedEnvironment;
import org.sonar.batch.bootstrapper.EnvironmentInformation;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginInfo;
+import java.util.Arrays;
+import java.util.List;
+
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -41,7 +43,7 @@ public class ExtensionInstallerTest {
GlobalMode mode;
BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class);
- private static SonarPlugin newPluginInstance(final Object... extensions) {
+ private static Plugin newPluginInstance(final Object... extensions) {
return new SonarPlugin() {
public List getExtensions() {
return Arrays.asList(extensions);
diff --git a/sonar-batch/src/test/java/org/sonar/batch/deprecated/ResourceFiltersTest.java b/sonar-batch/src/test/java/org/sonar/batch/deprecated/ResourceFiltersTest.java
new file mode 100644
index 00000000000..0a4ad891ce7
--- /dev/null
+++ b/sonar-batch/src/test/java/org/sonar/batch/deprecated/ResourceFiltersTest.java
@@ -0,0 +1,47 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.deprecated;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.sonar.api.batch.ResourceFilter;
+
+import static org.mockito.Matchers.startsWith;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+public class ResourceFiltersTest {
+ @Test
+ public void warn_on_resource_filters() {
+ Logger logger = mock(Logger.class);
+ ResourceFilter[] filters = {mock(ResourceFilter.class)};
+ new ResourceFilters(logger, filters);
+ verify(logger).warn(startsWith("ResourceFilters are not supported since version 4.2"));
+
+ // verify that the standard constructor does not fail
+ new ResourceFilters(filters);
+ }
+
+ @Test
+ public void ok_if_no_resource_filters() {
+ // just for verify that it does not fail. Should check that no warning is logged.
+ new ResourceFilters();
+ }
+}
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 2aebd74e24e..4020f09ffaf 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,7 +24,7 @@ import com.google.common.collect.Lists;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
-import org.sonar.api.SonarPlugin;
+import org.sonar.api.Plugin;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;
@@ -71,7 +71,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 9d2aa844adb..c3a28428141 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
@@ -26,7 +26,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
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;
@@ -59,7 +59,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);
@@ -113,9 +113,9 @@ public class PluginLoader {
* @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();
@@ -125,7 +125,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);
@@ -138,8 +138,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 836523abce8..8457d391f9c 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;
@@ -38,7 +38,7 @@ public interface PluginRepository {
/**
* @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 6242956e496..fbeae3a2483 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
@@ -29,6 +29,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;
@@ -50,7 +51,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);
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/Plugin.java b/sonar-plugin-api/src/main/java/org/sonar/api/Plugin.java
new file mode 100644
index 00000000000..23f5021d3fb
--- /dev/null
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/Plugin.java
@@ -0,0 +1,64 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api;
+
+import java.util.List;
+
+/**
+ * A plugin is a group of extensions. See <code>org.sonar.api.Extension</code> interface to browse
+ * available extension points.
+ * <p>The manifest property <code>Plugin-Class</code> must declare the name of the implementation class.
+ * It is automatically set by sonar-packaging-maven-plugin when building plugins.</p>
+ * <p>Implementation must declare a public constructor with no-parameters.</p>
+ *
+ * @see org.sonar.api.Extension
+ * @since 1.10
+ * @deprecated in 2.8. Use {@link SonarPlugin} instead.
+ */
+@Deprecated
+public interface Plugin {
+
+ /**
+ * Unique key within sonar plugins
+ * @deprecated since 2.2. The key must be set in the manifest.
+ */
+ @Deprecated
+ String getKey();
+
+ /**
+ * Descriptive name
+ * @deprecated since 2.2. The name must be set in the manifest.
+ */
+ @Deprecated
+ String getName();
+
+ /**
+ * description of the plugin, can contains html or ruby code
+ * @deprecated since 2.2. The description must be set in the manifest.
+ */
+ @Deprecated
+ String getDescription();
+
+ /**
+ * Classes of the implemented extensions.
+ */
+ List getExtensions();
+
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java b/sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java
index 6253c7a4cc0..31f2f349abe 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java
@@ -19,8 +19,6 @@
*/
package org.sonar.api;
-import java.util.List;
-
/**
* Plugin entry-point used to declare its extensions (see {@link org.sonar.api.Extension}.
* <p/>
@@ -29,12 +27,22 @@ import java.util.List;
*
* @since 2.8
*/
-public abstract class SonarPlugin {
+public abstract class SonarPlugin implements Plugin {
- /**
- * Classes of the implemented extensions.
- */
- public abstract List getExtensions();
+ @Override
+ public final String getKey() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public final String getName() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public final String getDescription() {
+ throw new UnsupportedOperationException();
+ }
/**
* Returns a string representation of the plugin, suitable for debugging purposes only.