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();

Reply via email to