You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 09:53:48 UTC
[lucene] 02/08: support super classes implementing
COnfigurablePlugin
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch jira/solr14977
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit df7840dee5894dd819fbd552f1cbe002729e6dd5
Author: noblepaul <no...@gmail.com>
AuthorDate: Mon Nov 9 09:35:41 2020 +1100
support super classes implementing COnfigurablePlugin<T>
---
.../apache/solr/api/ContainerPluginsRegistry.java | 21 ++++++++++++++-------
.../apache/solr/handler/TestContainerPlugin.java | 10 ++++++++++
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java b/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
index 690aee8..883767a 100644
--- a/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
+++ b/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
@@ -377,7 +377,7 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
throw new RuntimeException("Must have a no-arg constructor or CoreContainer constructor ");
}
if (instance instanceof ConfigurablePlugin) {
- Class c = getConfigObj(instance);
+ Class c = getConfigClass((ConfigurablePlugin<?>) instance);
if(c != null) {
Object initVal = mapper.readValue(Utils.toJSON(holder.original), c);
((ConfigurablePlugin) instance).initConfig(initVal);
@@ -397,19 +397,26 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
}
}
- @SuppressWarnings("rawtypes")
- private Class getConfigObj(Object o) {
- Type[] interfaces = o.getClass().getGenericInterfaces();
+ }
+
+ /**Get the generic type of a {@link ConfigurablePlugin}
+ */
+ @SuppressWarnings("rawtypes")
+ public static Class getConfigClass(ConfigurablePlugin<?> o) {
+ Class klas = o.getClass();
+ do {
+ Type[] interfaces = klas.getGenericInterfaces();
for (Type type : interfaces) {
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
- if(parameterizedType.getRawType() == ConfigurablePlugin.class) {
+ if (parameterizedType.getRawType() == ConfigurablePlugin.class) {
return (Class) parameterizedType.getActualTypeArguments()[0];
}
}
}
- return null;
- }
+ klas = klas.getSuperclass();
+ } while (klas != null && klas != Object.class);
+ return null;
}
public ApiInfo createInfo(Map<String,Object> info, List<String> errs) throws IOException {
diff --git a/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java b/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java
index 79e3458..f3dea90 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestContainerPlugin.java
@@ -29,6 +29,7 @@ import org.apache.lucene.util.ResourceLoader;
import org.apache.lucene.util.ResourceLoaderAware;
import org.apache.solr.api.Command;
import org.apache.solr.api.ConfigurablePlugin;
+import org.apache.solr.api.ContainerPluginsRegistry;
import org.apache.solr.api.EndPoint;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
@@ -188,6 +189,9 @@ public class TestContainerPlugin extends SolrCloudTestCase {
assertTrue("startCalled", C6.startCalled);
assertFalse("stopCalled", C6.stopCalled);
+ assertEquals( CConfig.class, ContainerPluginsRegistry.getConfigClass(new CC()));
+ assertEquals( CConfig.class, ContainerPluginsRegistry.getConfigClass(new CC1()));
+
CConfig p = new CConfig();
p.boolVal = Boolean.TRUE;
p.strVal = "Something";
@@ -336,6 +340,12 @@ public class TestContainerPlugin extends SolrCloudTestCase {
}
}
+ public static class CC1 extends CC {
+
+ }
+ public static class CC2 extends CC1 {
+
+ }
public static class CC implements ConfigurablePlugin<CConfig> {
private CConfig cfg;