This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch jira/solr16547
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/jira/solr16547 by this push:
new 944d7aedba9 QParserPlugin migrated
944d7aedba9 is described below
commit 944d7aedba94e6f0c5ad535119a21d16d314f19e
Author: Noble Paul <[email protected]>
AuthorDate: Thu Nov 17 19:27:41 2022 +1100
QParserPlugin migrated
---
.../src/java/org/apache/solr/core/PluginBag.java | 2 +-
.../java/org/apache/solr/core/ResponseWriters.java | 9 +-
.../src/java/org/apache/solr/core/SolrCore.java | 11 +-
.../java/org/apache/solr/search/QParserPlugin.java | 117 ++++++++++++---------
.../search/SignificantTermsQParserPluginTest.java | 8 +-
.../apache/solr/search/TestStandardQParsers.java | 7 +-
6 files changed, 85 insertions(+), 69 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/core/PluginBag.java
b/solr/core/src/java/org/apache/solr/core/PluginBag.java
index 26b1ecf53dc..4ad39e53776 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginBag.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginBag.java
@@ -228,7 +228,7 @@ public class PluginBag<T> implements AutoCloseable {
return removed == null ? null : removed.get();
}
- void init(Map<String, T> defaults, SolrCore solrCore) {
+ public void init(Map<String, T> defaults, SolrCore solrCore) {
init(defaults, solrCore,
solrCore.getSolrConfig().getPluginInfos(klass.getName()));
}
diff --git a/solr/core/src/java/org/apache/solr/core/ResponseWriters.java
b/solr/core/src/java/org/apache/solr/core/ResponseWriters.java
index d4405d49dfc..8b216a0bb69 100644
--- a/solr/core/src/java/org/apache/solr/core/ResponseWriters.java
+++ b/solr/core/src/java/org/apache/solr/core/ResponseWriters.java
@@ -132,12 +132,9 @@ public class ResponseWriters {
* may also be configured.
*/
public static PluginBag<QueryResponseWriter> create(SolrCore core) {
- PluginBag<QueryResponseWriter> responseWriters = new PluginBag<>(
- QueryResponseWriter.class,
- core,
- false,
- DEFAULT_RESPONSE_WRITER_HOLDERS,
- info);
+ PluginBag<QueryResponseWriter> responseWriters =
+ new PluginBag<>(
+ QueryResponseWriter.class, core, false,
DEFAULT_RESPONSE_WRITER_HOLDERS, info);
responseWriters.init(null, core);
// configure the default response writer; this one should never be null
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java
b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 656a0f74e78..8ddfe43dc97 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -1108,7 +1108,7 @@ public class SolrCore implements SolrInfoBean, Closeable {
initIndex(prev != null, reload);
responseWriters = ResponseWriters.create(this);
- qParserPlugins.init(QParserPlugin.standardPlugins, this);
+ qParserPlugins = QParserPlugin.create(this);
valueSourceParsers.init(ValueSourceParser.standardValueSourceParsers,
this);
transformerFactories.init(TransformerFactory.defaultFactories, this);
loadSearchComponents();
@@ -1757,7 +1757,7 @@ public class SolrCore implements SolrInfoBean, Closeable {
if (reqHandlers != null) reqHandlers.close();
if (responseWriters != null) responseWriters.close();
searchComponents.close();
- qParserPlugins.close();
+ if (qParserPlugins != null) qParserPlugins.close();
valueSourceParsers.close();
transformerFactories.close();
@@ -2975,15 +2975,13 @@ public class SolrCore implements SolrInfoBean,
Closeable {
return responseWriters;
}
- private final PluginBag<QueryResponseWriter> responseWriters ;
+ private final PluginBag<QueryResponseWriter> responseWriters;
public void fetchLatestSchema() {
IndexSchema schema = configSet.getIndexSchema(true);
setLatestSchema(schema);
}
-
-
/** Finds a writer by name, or returns the default writer if not found. */
public final QueryResponseWriter getQueryResponseWriter(String writerName) {
return responseWriters.get(writerName, true);
@@ -2997,8 +2995,7 @@ public class SolrCore implements SolrInfoBean, Closeable {
return getQueryResponseWriter(request.getParams().get(CommonParams.WT));
}
- private final PluginBag<QParserPlugin> qParserPlugins =
- new PluginBag<>(QParserPlugin.class, this);
+ private final PluginBag<QParserPlugin> qParserPlugins;
public QParserPlugin getQueryPlugin(String parserName) {
return qParserPlugins.get(parserName);
diff --git a/solr/core/src/java/org/apache/solr/search/QParserPlugin.java
b/solr/core/src/java/org/apache/solr/search/QParserPlugin.java
index 84f41c99ee3..c7ebdf62a77 100644
--- a/solr/core/src/java/org/apache/solr/search/QParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/QParserPlugin.java
@@ -16,10 +16,12 @@
*/
package org.apache.solr.search;
-import java.util.Collections;
-import java.util.HashMap;
+import com.google.common.collect.ImmutableMap;
import java.util.Map;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.core.PluginBag;
+import org.apache.solr.core.SolrConfig;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.metrics.SolrMetricsContext;
import org.apache.solr.request.SolrQueryRequest;
@@ -33,62 +35,83 @@ import org.apache.solr.search.neural.KnnQParserPlugin;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
public abstract class QParserPlugin implements NamedListInitializedPlugin,
SolrInfoBean {
+ private static final SolrConfig.SolrPluginInfo info =
+ SolrConfig.classVsSolrPluginInfo.get(QParserPlugin.class.getName());
/** internal use - name of the default parser */
public static final String DEFAULT_QTYPE = LuceneQParserPlugin.NAME;
+ public static PluginBag<QParserPlugin> create(SolrCore core) {
+ PluginBag<QParserPlugin> pluginBag =
+ new PluginBag<>(QParserPlugin.class, core, false, standardPlugins,
info);
+
+ pluginBag.init(null, core);
+ return pluginBag;
+ }
+
+ public static QParserPlugin get(String name) {
+ PluginBag.PluginHolder<QParserPlugin> result = standardPlugins.get(name);
+ return result == null ? null : result.get();
+ }
+
/**
* Internal use - name to parser for the builtin parsers. Each query parser
plugin extending
* {@link QParserPlugin} has own instance of standardPlugins. This leads to
cyclic dependencies of
* static fields and to case when NAME field is not yet initialized. This
result to NPE during
* initialization. For every plugin, listed here, NAME field has to be final
and static.
*/
- public static final Map<String, QParserPlugin> standardPlugins;
+ public static final Map<String, PluginBag.PluginHolder<QParserPlugin>>
standardPlugins;
static {
- HashMap<String, QParserPlugin> map = new HashMap<>(30, 1);
- map.put(LuceneQParserPlugin.NAME, new LuceneQParserPlugin());
- map.put(FunctionQParserPlugin.NAME, new FunctionQParserPlugin());
- map.put(PrefixQParserPlugin.NAME, new PrefixQParserPlugin());
- map.put(BoostQParserPlugin.NAME, new BoostQParserPlugin());
- map.put(DisMaxQParserPlugin.NAME, new DisMaxQParserPlugin());
- map.put(ExtendedDismaxQParserPlugin.NAME, new
ExtendedDismaxQParserPlugin());
- map.put(FieldQParserPlugin.NAME, new FieldQParserPlugin());
- map.put(RawQParserPlugin.NAME, new RawQParserPlugin());
- map.put(TermQParserPlugin.NAME, new TermQParserPlugin());
- map.put(TermsQParserPlugin.NAME, new TermsQParserPlugin());
- map.put(NestedQParserPlugin.NAME, new NestedQParserPlugin());
- map.put(FunctionRangeQParserPlugin.NAME, new FunctionRangeQParserPlugin());
- map.put(SpatialFilterQParserPlugin.NAME, new SpatialFilterQParserPlugin());
- map.put(SpatialBoxQParserPlugin.NAME, new SpatialBoxQParserPlugin());
- map.put(JoinQParserPlugin.NAME, new JoinQParserPlugin());
- map.put(SurroundQParserPlugin.NAME, new SurroundQParserPlugin());
- map.put(SwitchQParserPlugin.NAME, new SwitchQParserPlugin());
- map.put(MaxScoreQParserPlugin.NAME, new MaxScoreQParserPlugin());
- map.put(BlockJoinParentQParserPlugin.NAME, new
BlockJoinParentQParserPlugin());
- map.put(BlockJoinChildQParserPlugin.NAME, new
BlockJoinChildQParserPlugin());
- map.put(FiltersQParserPlugin.NAME, new FiltersQParserPlugin());
- map.put(CollapsingQParserPlugin.NAME, new CollapsingQParserPlugin());
- map.put(SimpleQParserPlugin.NAME, new SimpleQParserPlugin());
- map.put(ComplexPhraseQParserPlugin.NAME, new ComplexPhraseQParserPlugin());
- map.put(ReRankQParserPlugin.NAME, new ReRankQParserPlugin());
- map.put(ExportQParserPlugin.NAME, new ExportQParserPlugin());
- map.put(MLTQParserPlugin.NAME, new MLTQParserPlugin());
- map.put(HashQParserPlugin.NAME, new HashQParserPlugin());
- map.put(GraphQParserPlugin.NAME, new GraphQParserPlugin());
- map.put(XmlQParserPlugin.NAME, new XmlQParserPlugin());
- map.put(GraphTermsQParserPlugin.NAME, new GraphTermsQParserPlugin());
- map.put(IGainTermsQParserPlugin.NAME, new IGainTermsQParserPlugin());
- map.put(TextLogisticRegressionQParserPlugin.NAME, new
TextLogisticRegressionQParserPlugin());
- map.put(SignificantTermsQParserPlugin.NAME, new
SignificantTermsQParserPlugin());
- map.put(PayloadScoreQParserPlugin.NAME, new PayloadScoreQParserPlugin());
- map.put(PayloadCheckQParserPlugin.NAME, new PayloadCheckQParserPlugin());
- map.put(BoolQParserPlugin.NAME, new BoolQParserPlugin());
- map.put(MinHashQParserPlugin.NAME, new MinHashQParserPlugin());
- map.put(HashRangeQParserPlugin.NAME, new HashRangeQParserPlugin());
- map.put(RankQParserPlugin.NAME, new RankQParserPlugin());
- map.put(KnnQParserPlugin.NAME, new KnnQParserPlugin());
-
- standardPlugins = Collections.unmodifiableMap(map);
+ ImmutableMap.Builder<String, PluginBag.PluginHolder<QParserPlugin>> map =
+ ImmutableMap.builder();
+
+ map.put(LuceneQParserPlugin.NAME, wrap(new LuceneQParserPlugin()));
+ map.put(FunctionQParserPlugin.NAME, wrap(new FunctionQParserPlugin()));
+ map.put(PrefixQParserPlugin.NAME, wrap(new PrefixQParserPlugin()));
+ map.put(BoostQParserPlugin.NAME, wrap(new BoostQParserPlugin()));
+ map.put(DisMaxQParserPlugin.NAME, wrap(new DisMaxQParserPlugin()));
+ map.put(ExtendedDismaxQParserPlugin.NAME, wrap(new
ExtendedDismaxQParserPlugin()));
+ map.put(FieldQParserPlugin.NAME, wrap(new FieldQParserPlugin()));
+ map.put(RawQParserPlugin.NAME, wrap(new RawQParserPlugin()));
+ map.put(TermQParserPlugin.NAME, wrap(new TermQParserPlugin()));
+ map.put(TermsQParserPlugin.NAME, wrap(new TermsQParserPlugin()));
+ map.put(NestedQParserPlugin.NAME, wrap(new NestedQParserPlugin()));
+ map.put(FunctionRangeQParserPlugin.NAME, wrap(new
FunctionRangeQParserPlugin()));
+ map.put(SpatialFilterQParserPlugin.NAME, wrap(new
SpatialFilterQParserPlugin()));
+ map.put(SpatialBoxQParserPlugin.NAME, wrap(new SpatialBoxQParserPlugin()));
+ map.put(JoinQParserPlugin.NAME, wrap(new JoinQParserPlugin()));
+ map.put(SurroundQParserPlugin.NAME, wrap(new SurroundQParserPlugin()));
+ map.put(SwitchQParserPlugin.NAME, wrap(new SwitchQParserPlugin()));
+ map.put(MaxScoreQParserPlugin.NAME, wrap(new MaxScoreQParserPlugin()));
+ map.put(BlockJoinParentQParserPlugin.NAME, wrap(new
BlockJoinParentQParserPlugin()));
+ map.put(BlockJoinChildQParserPlugin.NAME, wrap(new
BlockJoinChildQParserPlugin()));
+ map.put(FiltersQParserPlugin.NAME, wrap(new FiltersQParserPlugin()));
+ map.put(CollapsingQParserPlugin.NAME, wrap(new CollapsingQParserPlugin()));
+ map.put(SimpleQParserPlugin.NAME, wrap(new SimpleQParserPlugin()));
+ map.put(ComplexPhraseQParserPlugin.NAME, wrap(new
ComplexPhraseQParserPlugin()));
+ map.put(ReRankQParserPlugin.NAME, wrap(new ReRankQParserPlugin()));
+ map.put(ExportQParserPlugin.NAME, wrap(new ExportQParserPlugin()));
+ map.put(MLTQParserPlugin.NAME, wrap(new MLTQParserPlugin()));
+ map.put(HashQParserPlugin.NAME, wrap(new HashQParserPlugin()));
+ map.put(GraphQParserPlugin.NAME, wrap(new GraphQParserPlugin()));
+ map.put(XmlQParserPlugin.NAME, wrap(new XmlQParserPlugin()));
+ map.put(GraphTermsQParserPlugin.NAME, wrap(new GraphTermsQParserPlugin()));
+ map.put(IGainTermsQParserPlugin.NAME, wrap(new IGainTermsQParserPlugin()));
+ map.put(
+ TextLogisticRegressionQParserPlugin.NAME, wrap(new
TextLogisticRegressionQParserPlugin()));
+ map.put(SignificantTermsQParserPlugin.NAME, wrap(new
SignificantTermsQParserPlugin()));
+ map.put(PayloadScoreQParserPlugin.NAME, wrap(new
PayloadScoreQParserPlugin()));
+ map.put(PayloadCheckQParserPlugin.NAME, wrap(new
PayloadCheckQParserPlugin()));
+ map.put(BoolQParserPlugin.NAME, wrap(new BoolQParserPlugin()));
+ map.put(MinHashQParserPlugin.NAME, wrap(new MinHashQParserPlugin()));
+ map.put(HashRangeQParserPlugin.NAME, wrap(new HashRangeQParserPlugin()));
+ map.put(RankQParserPlugin.NAME, wrap(new RankQParserPlugin()));
+ map.put(KnnQParserPlugin.NAME, wrap(new KnnQParserPlugin()));
+ standardPlugins = map.build();
+ }
+
+ private static PluginBag.PluginHolder<QParserPlugin> wrap(QParserPlugin v) {
+ return new PluginBag.PluginHolder<>(v, info);
}
/** return a {@link QParser} */
diff --git
a/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
b/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
index cc64c320e50..1480f144c68 100644
---
a/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
+++
b/solr/core/src/test/org/apache/solr/search/SignificantTermsQParserPluginTest.java
@@ -59,14 +59,13 @@ public class SignificantTermsQParserPluginTest extends
SolrTestCaseJ4 {
assertEquals("significantTerms", SignificantTermsQParserPlugin.NAME);
assertEquals(
SignificantTermsQParserPlugin.class,
-
QParserPlugin.standardPlugins.get(SignificantTermsQParserPlugin.NAME).getClass());
+ QParserPlugin.get(SignificantTermsQParserPlugin.NAME).getClass());
}
@Test
public void testEmptyCollectionDoesNotThrow() throws Exception {
SolrCore emptyCore = h.getCore();
- QParserPlugin qParserPlugin =
- QParserPlugin.standardPlugins.get(SignificantTermsQParserPlugin.NAME);
+ QParserPlugin qParserPlugin =
QParserPlugin.get(SignificantTermsQParserPlugin.NAME);
Map<String, String> params = new HashMap<>();
params.put("field", "cat");
QParser parser =
@@ -99,8 +98,7 @@ public class SignificantTermsQParserPluginTest extends
SolrTestCaseJ4 {
SolrCore dataCore = h.getCore();
addTestDocs(dataCore);
- QParserPlugin qParserPlugin =
- QParserPlugin.standardPlugins.get(SignificantTermsQParserPlugin.NAME);
+ QParserPlugin qParserPlugin =
QParserPlugin.get(SignificantTermsQParserPlugin.NAME);
Map<String, String> params = new HashMap<>();
params.put("field", "cat");
QParser parser =
diff --git
a/solr/core/src/test/org/apache/solr/search/TestStandardQParsers.java
b/solr/core/src/test/org/apache/solr/search/TestStandardQParsers.java
index b7517e1c620..b63dc64f088 100644
--- a/solr/core/src/test/org/apache/solr/search/TestStandardQParsers.java
+++ b/solr/core/src/test/org/apache/solr/search/TestStandardQParsers.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.solr.SolrTestCase;
+import org.apache.solr.core.PluginBag;
import org.junit.Test;
/**
@@ -49,10 +50,10 @@ public class TestStandardQParsers extends SolrTestCase {
List<String> notFinal = new
ArrayList<>(QParserPlugin.standardPlugins.size());
List<String> mismatch = new
ArrayList<>(QParserPlugin.standardPlugins.size());
- for (Map.Entry<String, QParserPlugin> pair :
QParserPlugin.standardPlugins.entrySet()) {
+ for (Map.Entry<String, PluginBag.PluginHolder<QParserPlugin>> pair :
+ QParserPlugin.standardPlugins.entrySet()) {
String regName = pair.getKey();
- Class<? extends QParserPlugin> clazz = pair.getValue().getClass();
- ;
+ Class<? extends QParserPlugin> clazz = pair.getValue().get().getClass();
Field nameField = clazz.getField(FIELD_NAME);
int modifiers = nameField.getModifiers();