From f25c971275702a3a53195b568fe3c91469076c83 Mon Sep 17 00:00:00 2001
From: simonbrandhof
Date: Tue, 28 Sep 2010 15:53:04 +0000
Subject: [PATCH] SONAR-1814 add the method ExtensionProvider.provide() in
order to support obfuscated code
---
.../sonar/batch/BatchPluginRepository.java | 1 +
.../core/plugin/AbstractPluginRepository.java | 49 +++++++++++--------
.../plugin/AbstractPluginRepositoryTest.java | 34 +++++++------
.../java/org/sonar/api/ExtensionProvider.java | 35 +++++++------
.../sonar/api/platform/PluginRepository.java | 3 ++
.../plugins/ServerPluginRepository.java | 1 +
6 files changed, 73 insertions(+), 50 deletions(-)
diff --git a/sonar-batch/src/main/java/org/sonar/batch/BatchPluginRepository.java b/sonar-batch/src/main/java/org/sonar/batch/BatchPluginRepository.java
index 5544762ad7a..51a2e095380 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/BatchPluginRepository.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/BatchPluginRepository.java
@@ -105,6 +105,7 @@ public class BatchPluginRepository extends AbstractPluginRepository {
throw new SonarException("Fail to load extensions from plugin " + pluginMetadata.getKey(), e);
}
}
+ invokeExtensionProviders(pico);
}
boolean shouldRegisterCoverageExtension(String pluginKey) {
diff --git a/sonar-core/src/main/java/org/sonar/core/plugin/AbstractPluginRepository.java b/sonar-core/src/main/java/org/sonar/core/plugin/AbstractPluginRepository.java
index b62bf983045..9a15c9e06ba 100644
--- a/sonar-core/src/main/java/org/sonar/core/plugin/AbstractPluginRepository.java
+++ b/sonar-core/src/main/java/org/sonar/core/plugin/AbstractPluginRepository.java
@@ -19,16 +19,18 @@
*/
package org.sonar.core.plugin;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
import com.google.common.collect.Maps;
import org.picocontainer.Characteristics;
import org.picocontainer.MutablePicoContainer;
-import org.picocontainer.injectors.ProviderAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.*;
import org.sonar.api.platform.PluginRepository;
import java.util.Collection;
+import java.util.List;
import java.util.Map;
/**
@@ -38,7 +40,7 @@ public abstract class AbstractPluginRepository implements PluginRepository {
private static final Logger LOG = LoggerFactory.getLogger(AbstractPluginRepository.class);
- private Map pluginByKey = Maps.newHashMap();
+ private BiMap pluginByKey = HashBiMap.create();
private Map
*
* Example:
*
- * public class RuleRepositoryProvider extends ExtensionProvider {
- * public RuleRepository[] provide(Language[] languages) {
- * RuleRepository[] result = new RuleRepository[languages.length];
- * for(int index=0; index < languages.length ; index++) {
- * Language language = languages[index];
- * result[index] = new RuleRepository(...);
+ * public class RuleRepositoryProvider extends ExtensionProvider implements ServerExtension {
+ * private Language[] languages;
+ *
+ * public RuleRepositoryProvider(Language[] languages) {
+ * this.languages = languages;
+ * }
+ *
+ * public List provide() {
+ * List result = new ArrayList();
+ * for(Language language: languages) {
+ * result.add(new RuleRepository(..., language, ...));
* }
* return result;
* }
* }
*
*
- *
+ *
* @since 2.3
*/
-public abstract class ExtensionProvider implements Extension, Provider {
+public abstract class ExtensionProvider implements Extension {
+ public abstract Object provide();
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/platform/PluginRepository.java b/sonar-plugin-api/src/main/java/org/sonar/api/platform/PluginRepository.java
index 8529642a9f1..49e42cd4c8c 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/platform/PluginRepository.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/platform/PluginRepository.java
@@ -31,6 +31,9 @@ public interface PluginRepository extends BatchComponent, ServerComponent {
Plugin getPlugin(String key);
+ /**
+ * @deprecated since 2.3
+ */
@Deprecated
Plugin getPluginForExtension(Object extension);
diff --git a/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java b/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
index cfb1191fc11..318a5ac5769 100644
--- a/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
+++ b/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
@@ -60,6 +60,7 @@ public class ServerPluginRepository extends AbstractPluginRepository {
throw new SonarException("Please check the plugin manifest. The main plugin class does not exist: " + jpaPlugin.getPluginClass(), e);
}
}
+ invokeExtensionProviders(pico);
}
@Override
--
2.39.5