Index: . =================================================================== --- . (revision 1365638) +++ . (working copy) Property changes on: . ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/branches/lucene2510:r1364862-1365496 Merged /lucene/dev/trunk:r1365586,1365602,1365610 Index: lucene =================================================================== --- lucene (revision 1365638) +++ lucene (working copy) Property changes on: lucene ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/lucene:r1364862-1365496 Index: lucene/JRE_VERSION_MIGRATION.txt =================================================================== --- lucene/JRE_VERSION_MIGRATION.txt (revision 1365638) +++ lucene/JRE_VERSION_MIGRATION.txt (working copy) Property changes on: lucene/JRE_VERSION_MIGRATION.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/JRE_VERSION_MIGRATION.txt:r1365586,1365602,1365610 Index: lucene/BUILD.txt =================================================================== --- lucene/BUILD.txt (revision 1365638) +++ lucene/BUILD.txt (working copy) Property changes on: lucene/BUILD.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/BUILD.txt:r1365586,1365602,1365610 Index: lucene/suggest =================================================================== --- lucene/suggest (revision 1365638) +++ lucene/suggest (working copy) Property changes on: lucene/suggest ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/suggest:r1365586,1365602,1365610 Index: lucene/module-build.xml =================================================================== --- lucene/module-build.xml (revision 1365638) +++ lucene/module-build.xml (working copy) Property changes on: lucene/module-build.xml ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/module-build.xml:r1365586,1365602,1365610 Index: lucene/common-build.xml =================================================================== --- lucene/common-build.xml (revision 1365638) +++ lucene/common-build.xml (working copy) Property changes on: lucene/common-build.xml ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/common-build.xml:r1365586,1365602,1365610 Index: lucene/demo =================================================================== --- lucene/demo (revision 1365638) +++ lucene/demo (working copy) Property changes on: lucene/demo ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/demo:r1365586,1365602,1365610 Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 1365638) +++ lucene/CHANGES.txt (working copy) @@ -29,6 +29,10 @@ memory as uncompressed simple arrays. This uses a tremendous amount of RAM but gives good search performance gains. (Mike McCandless) +* LUCENE-2510, LUCENE-4044: Migrated Solr's Tokenizer-, TokenFilter-, and + CharFilterFactories to the lucene-analysis module. The API is still + experimental. (Chris Male, Robert Muir, Uwe Schindler) + API Changes * LUCENE-4138: update of morfologik (Polish morphological analyzer) to 1.5.3. Property changes on: lucene/CHANGES.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/CHANGES.txt:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/lucene/CHANGES.txt:r1364862-1365496 Index: lucene/core =================================================================== --- lucene/core (revision 1365638) +++ lucene/core (working copy) Property changes on: lucene/core ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/core:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/lucene/core:r1364862-1365496 Index: lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java =================================================================== --- lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java (revision 1365638) +++ lucene/core/src/java/org/apache/lucene/util/NamedSPILoader.java (working copy) @@ -22,7 +22,7 @@ import java.util.Map; import java.util.LinkedHashMap; import java.util.Set; -import java.util.ServiceLoader; +import java.util.ServiceConfigurationError; /** * Helper class for loading named SPIs from classpath (e.g. Codec, PostingsFormat). @@ -32,64 +32,53 @@ public final class NamedSPILoader implements Iterable { private final Map services; - - /** This field is a hack for LuceneTestCase to get access - * to the modifiable map (to work around bugs in IBM J9) */ - @SuppressWarnings("unused") - @Deprecated - // Hackidy-Häck-Hack for bugs in IBM J9 ServiceLoader - private final Map modifiableServices; - private final Class clazz; public NamedSPILoader(Class clazz) { this.clazz = clazz; - final ServiceLoader loader = ServiceLoader.load(clazz); + final SPIClassIterator loader = SPIClassIterator.get(clazz); final LinkedHashMap services = new LinkedHashMap(); - for (final S service : loader) { - final String name = service.getName(); - // only add the first one for each name, later services will be ignored - // this allows to place services before others in classpath to make - // them used instead of others - if (!services.containsKey(name)) { - assert checkServiceName(name); - services.put(name, service); + while (loader.hasNext()) { + final Class c = loader.next(); + try { + final S service = c.newInstance(); + final String name = service.getName(); + // only add the first one for each name, later services will be ignored + // this allows to place services before others in classpath to make + // them used instead of others + if (!services.containsKey(name)) { + checkServiceName(name); + services.put(name, service); + } + } catch (Exception e) { + throw new ServiceConfigurationError("Cannot instantiate SPI class: " + c.getName(), e); } } - this.modifiableServices = services; // hack, remove when IBM J9 is fixed! this.services = Collections.unmodifiableMap(services); } /** * Validates that a service name meets the requirements of {@link NamedSPI} */ - public static boolean checkServiceName(String name) { + public static void checkServiceName(String name) { // based on harmony charset.java if (name.length() >= 128) { throw new IllegalArgumentException("Illegal service name: '" + name + "' is too long (must be < 128 chars)."); } - for (int i = 0; i < name.length(); i++) { + for (int i = 0, len = name.length(); i < len; i++) { char c = name.charAt(i); - if (!isLetter(c) && !isDigit(c)) { + if (!isLetterOrDigit(c)) { throw new IllegalArgumentException("Illegal service name: '" + name + "' must be simple ascii alphanumeric."); } } - return true; } - /* - * Checks whether a character is a letter (ascii) which are defined in the spec. + /** + * Checks whether a character is a letter or digit (ascii) which are defined in the spec. */ - private static boolean isLetter(char c) { - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); + private static boolean isLetterOrDigit(char c) { + return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'); } - - /* - * Checks whether a character is a digit (ascii) which are defined in the spec. - */ - private static boolean isDigit(char c) { - return ('0' <= c && c <= '9'); - } public S lookup(String name) { final S service = services.get(name); Index: lucene/sandbox =================================================================== --- lucene/sandbox (revision 1365638) +++ lucene/sandbox (working copy) Property changes on: lucene/sandbox ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/sandbox:r1365586,1365602,1365610 Index: lucene/highlighter =================================================================== --- lucene/highlighter (revision 1365638) +++ lucene/highlighter (working copy) Property changes on: lucene/highlighter ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/highlighter:r1365586,1365602,1365610 Index: lucene/join =================================================================== --- lucene/join (revision 1365638) +++ lucene/join (working copy) Property changes on: lucene/join ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/join:r1365586,1365602,1365610 Index: lucene/LICENSE.txt =================================================================== --- lucene/LICENSE.txt (revision 1365638) +++ lucene/LICENSE.txt (working copy) Property changes on: lucene/LICENSE.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/LICENSE.txt:r1365586,1365602,1365610 Index: lucene/site =================================================================== --- lucene/site (revision 1365638) +++ lucene/site (working copy) Property changes on: lucene/site ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/site:r1365586,1365602,1365610 Index: lucene/MIGRATE.txt =================================================================== --- lucene/MIGRATE.txt (revision 1365638) +++ lucene/MIGRATE.txt (working copy) Property changes on: lucene/MIGRATE.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/MIGRATE.txt:r1365586,1365602,1365610 Index: lucene/memory =================================================================== --- lucene/memory (revision 1365638) +++ lucene/memory (working copy) Property changes on: lucene/memory ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/memory:r1365586,1365602,1365610 Index: lucene/queries =================================================================== --- lucene/queries (revision 1365638) +++ lucene/queries (working copy) Property changes on: lucene/queries ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/queries:r1365586,1365602,1365610 Index: lucene/queryparser =================================================================== --- lucene/queryparser (revision 1365638) +++ lucene/queryparser (working copy) Property changes on: lucene/queryparser ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/queryparser:r1365586,1365602,1365610 Index: lucene/facet =================================================================== --- lucene/facet (revision 1365638) +++ lucene/facet (working copy) Property changes on: lucene/facet ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/facet:r1365586,1365602,1365610 Index: lucene/analysis =================================================================== --- lucene/analysis (revision 1365638) +++ lucene/analysis (working copy) Property changes on: lucene/analysis ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/analysis:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/lucene/analysis:r1364862-1365496 Index: lucene/analysis/icu/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactory =================================================================== --- lucene/analysis/icu/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactory (working copy) +++ lucene/analysis/icu/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactory (working copy) @@ -16,3 +16,4 @@ org.apache.lucene.analysis.icu.ICUFoldingFilterFactory org.apache.lucene.analysis.icu.ICUNormalizer2FilterFactory org.apache.lucene.analysis.icu.ICUTransformFilterFactory +org.apache.lucene.collation.ICUCollationKeyFilterFactory Index: lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationKeyFilterFactory.java =================================================================== --- lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationKeyFilterFactory.java (working copy) +++ lucene/analysis/icu/src/test/org/apache/lucene/collation/TestICUCollationKeyFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.collation; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -17,15 +17,19 @@ * limitations under the License. */ +import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.StringReader; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.lucene.analysis.BaseTokenStreamTestCase; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.core.KeywordTokenizer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; +import org.apache.lucene.analysis.util.ResourceLoader; import com.ibm.icu.text.Collator; import com.ibm.icu.text.RuleBasedCollator; @@ -48,7 +52,7 @@ args.put("locale", "tr"); args.put("strength", "primary"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsUpper = factory.create( new KeywordTokenizer(new StringReader(turkishUpperCase))); TokenStream tsLower = factory.create( @@ -68,7 +72,7 @@ args.put("strength", "primary"); args.put("decomposition", "canonical"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsUpper = factory.create( new KeywordTokenizer(new StringReader(turkishUpperCase))); TokenStream tsLower = factory.create( @@ -88,7 +92,7 @@ args.put("strength", "secondary"); args.put("decomposition", "no"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsUpper = factory.create( new KeywordTokenizer(new StringReader(upperCase))); TokenStream tsLower = factory.create( @@ -109,7 +113,7 @@ args.put("strength", "primary"); args.put("alternate", "shifted"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsPunctuation = factory.create( new KeywordTokenizer(new StringReader(withPunctuation))); TokenStream tsWithoutPunctuation = factory.create( @@ -132,7 +136,7 @@ args.put("alternate", "shifted"); args.put("variableTop", " "); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsWithSpace = factory.create( new KeywordTokenizer(new StringReader(withSpace))); TokenStream tsWithoutSpace = factory.create( @@ -158,7 +162,7 @@ args.put("locale", "en"); args.put("numeric", "true"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsNine = factory.create( new KeywordTokenizer(new StringReader(nine))); TokenStream tsTen = factory.create( @@ -181,7 +185,7 @@ args.put("strength", "primary"); args.put("caseLevel", "true"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsWithAccents = factory.create( new KeywordTokenizer(new StringReader(withAccents))); TokenStream tsWithoutAccents = factory.create( @@ -215,7 +219,7 @@ args.put("strength", "tertiary"); args.put("caseFirst", "upper"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsLower = factory.create( new KeywordTokenizer(new StringReader(lower))); TokenStream tsUpper = factory.create( @@ -251,7 +255,7 @@ args.put("custom", "rules.txt"); args.put("strength", "primary"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader(tailoredRules)); + factory.inform(new StringMockResourceLoader(tailoredRules)); TokenStream tsUmlaut = factory.create( new KeywordTokenizer(new StringReader(germanUmlaut))); TokenStream tsOE = factory.create( @@ -275,4 +279,24 @@ assertFalse(stream1.incrementToken()); assertFalse(stream2.incrementToken()); } + + private class StringMockResourceLoader implements ResourceLoader { + String text; + + StringMockResourceLoader(String text) { + this.text = text; + } + + public List getLines(String resource) throws IOException { + return null; + } + + public T newInstance(String cname, Class expectedType, String... subpackages) { + return null; + } + + public InputStream openResource(String resource) throws IOException { + return new ByteArrayInputStream(text.getBytes("UTF-8")); + } + } } Index: lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java =================================================================== --- lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java (working copy) +++ lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.collation; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -17,14 +17,14 @@ * limitations under the License. */ +import java.io.IOException; import java.io.InputStream; +import java.io.Reader; -import org.apache.commons.io.IOUtils; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.util.*; import org.apache.lucene.collation.ICUCollationKeyFilter; -import org.apache.solr.common.SolrException; -import org.apache.solr.common.SolrException.ErrorCode; +import org.apache.lucene.util.IOUtils; import com.ibm.icu.text.Collator; import com.ibm.icu.text.RuleBasedCollator; @@ -66,7 +66,7 @@ * @see Collator * @see ULocale * @see RuleBasedCollator - * @deprecated use {@link org.apache.solr.schema.ICUCollationField} instead. + * @deprecated use {@link ICUCollationKeyAnalyzer} instead. */ @Deprecated public class ICUCollationKeyFilterFactory extends TokenFilterFactory implements MultiTermAwareComponent, ResourceLoaderAware { @@ -85,10 +85,10 @@ String variableTop = args.get("variableTop"); if (custom == null && localeID == null) - throw new SolrException(ErrorCode.SERVER_ERROR, "Either custom or locale is required."); + throw new InitializationException("Either custom or locale is required."); if (custom != null && localeID != null) - throw new SolrException(ErrorCode.SERVER_ERROR, "Cannot specify both locale and custom. " + throw new InitializationException("Cannot specify both locale and custom. " + "To tailor rules for a built-in language, see the javadocs for RuleBasedCollator. " + "Then save the entire customized ruleset to a file, and use with the custom parameter"); @@ -113,7 +113,7 @@ else if (strength.equalsIgnoreCase("identical")) collator.setStrength(Collator.IDENTICAL); else - throw new SolrException(ErrorCode.SERVER_ERROR, "Invalid strength: " + strength); + throw new InitializationException("Invalid strength: " + strength); } // set the decomposition flag, otherwise it will be the default. @@ -123,7 +123,7 @@ else if (decomposition.equalsIgnoreCase("canonical")) collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); else - throw new SolrException(ErrorCode.SERVER_ERROR, "Invalid decomposition: " + decomposition); + throw new InitializationException("Invalid decomposition: " + decomposition); } // expert options: concrete subclasses are always a RuleBasedCollator @@ -134,7 +134,7 @@ } else if (alternate.equalsIgnoreCase("non-ignorable")) { rbc.setAlternateHandlingShifted(false); } else { - throw new SolrException(ErrorCode.SERVER_ERROR, "Invalid alternate: " + alternate); + throw new InitializationException("Invalid alternate: " + alternate); } } if (caseLevel != null) { @@ -146,7 +146,7 @@ } else if (caseFirst.equalsIgnoreCase("upper")) { rbc.setUpperCaseFirst(true); } else { - throw new SolrException(ErrorCode.SERVER_ERROR, "Invalid caseFirst: " + caseFirst); + throw new InitializationException("Invalid caseFirst: " + caseFirst); } } if (numeric != null) { @@ -177,13 +177,13 @@ InputStream input = null; try { input = loader.openResource(fileName); - String rules = IOUtils.toString(input, "UTF-8"); + String rules = toUTF8String(input); return new RuleBasedCollator(rules); } catch (Exception e) { // io error or invalid rules throw new RuntimeException(e); } finally { - IOUtils.closeQuietly(input); + IOUtils.closeWhileHandlingException(input); } } @@ -191,4 +191,15 @@ public AbstractAnalysisFactory getMultiTermComponent() { return this; } + + private String toUTF8String(InputStream in) throws IOException { + StringBuilder sb = new StringBuilder(); + char buffer[] = new char[1024]; + Reader r = IOUtils.getDecodingReader(in, IOUtils.CHARSET_UTF_8); + int len = 0; + while ((len = r.read(buffer)) > 0) { + sb.append(buffer, 0, len); + } + return sb.toString(); + } } Property changes on: lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java ___________________________________________________________________ Added: svn:mergeinfo Merged /lucene/dev/branches/lucene_solr_3_2/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1128223,1128247,1129418,1129472 Merged /lucene/dev/branches/lucene_solr_3_3/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1138390,1138979,1139775 Merged /lucene/dev/trunk/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1344531,1344775,1344844,1344946,1344958,1344967,1345376,1345523,1345548,1345869,1346001,1346101,1346407,1346419,1346434,1346494,1346500,1346645,1346785,1346873-1346975,1347313,1347323,1347817,1347880,1347928,1348171,1348236,1348289,1348517,1348524,1348621,1348630,1348672,1348685,1348760,1348924,1348964,1348974,1348977,1348980,1349012,1349027,1349046,1349127,1349361,1349378,1349502,1349612,1349633,1349664,1349671,1349758,1349979,1350050,1350074,1350195,1350199,1350436,1350444,1350464,1350466,1350718,1350723,1350890,1351026,1351460,1351590,1351839,1351879,1351931-1351932,1352238,1352760,1352795,1352942,1353801,1353889,1354105,1354308,1354455,1354864-1354865,1354887,1355004,1355069,1356033,1356313,1356435-1356437,1356469,1356522,1356778,1356842,1357027,1357324,1357331,1357359,1357887,1357983,1357996,1357998,1358214,1358219-1358220,1358262,1358481,1358650,1359202,1359238,1359267,1359301,1359322,1359324,1359355,1359449,1359467,1359590,1359684,1359732-1359733,1359920,1360254,1360354,1360363,1360395,1360416,1360446,1360451,1360454,1360475,1360494,1360630,1360634,1360639,1360643,1360645,1360931,1361017,1361091,1361276,1361301,1361310,1361315,1361408,1361480,1361517,1361568,1361636,1361707-1361708,1361805,1361840,1361857,1362027,1362074,1362232,1362236,1362371,1362442,1362500,1362994,1363013,1363024,1363082,1363084,1363115,1363161,1363330,1363333,1363335,1363379,1363512,1363555,1363781,1363799,1363819,1363971,1364013,1364015,1364031,1364349,1364409,1364570,1364728,1364940,1364967,1365014,1365166,1365363,1365383,1365390 Merged /lucene/solr/branches/newtrunk/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r924462 Merged /lucene/java/branches/lucene_3_0/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r880793,896906 Merged /lucene/java/branches/lucene_2_4/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r748824 Merged /lucene/dev/trunk/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java:r1365586,1365602,1365610 Merged /lucene/dev/branches/bulkpostings/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1069647,1069925 Merged /lucene/dev/branches/docvalues/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1021634-1134288 Merged /lucene/dev/branches/lucene2621/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1188713-1197598,1197605-1199706,1199787-1202835 Merged /lucene/java/branches/lucene_2_9/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r817269-818600,825998,829134,829881,831036,896850,909334 Merged /lucene/dev/branches/realtime_search/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r953476-1097796 Merged /lucene/dev/branches/lucene3622/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1211241-1213825 Merged /lucene/dev/branches/lucene4055/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1338960-1343359 Merged /lucene/dev/branches/lucene3606/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1209906-1212022 Merged /lucene/dev/branches/lucene3661/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1233476-1237242,1237250-1238012 Merged /lucene/java/branches/lucene_2_9_back_compat_tests/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r818601-821336 Merged /lucene/dev/branches/solr2452/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1087601-1144716 Merged /lucene/solr/trunk/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r922950-923910,923912-925091 Merged /lucene/dev/branches/LUCENE2793/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1137551-1144189 Merged /lucene/dev/branches/lucene2858/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1234440-1238051 Merged /lucene/dev/branches/lucene4199/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1358548-1359191 Merged /lucene/dev/branches/lucene3795_lsp_spatial_module/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1291491-1300396 Merged /lucene/dev/branches/preflexfixes/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r967125-979432 Merged /lucene/dev/branches/lucene3969/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1311219-1324948 Merged /lucene/dev/branches/branch_3x/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r949730,961612,979161,980654,982195,987811,988512,1025544,1026614,1034080,1039151,1050654,1056762,1060014,1060438,1060784,1061035,1063880,1063934,1065324,1070818,1075044,1079376,1079381,1080071,1081052,1083240,1085811,1090423,1091501,1092373,1095519,1098770,1099210,1100407,1100480,1100494,1100515,1101106,1103086,1128215,1128227,1128462,1129419,1129435,1130612,1132581,1132978,1134823,1134917,1136714,1138351,1139430,1139461,1141060,1144653,1148611,1148849,1148864,1150434,1151830,1151947,1152766,1166791,1171384,1173311,1173701,1173745,1177994,1184955,1188805,1189914,1189969,1198337,1199847,1204494,1204519,1204547,1204565,1204826,1207010,1208375,1226235,1229268,1230429,1232954,1234450,1235713,1244960,1302703,1302733,1302749,1302808,1303269,1303733,1304295,1304360,1304660,1304904,1305074,1305574,1305585,1305622,1305681,1305693,1305741,1306929,1310314 Merged /lucene/dev/branches/lucene_solr_3_1/solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java:r1081856,1083239,1085499,1085511,1085532,1085809,1101103 Index: lucene/analysis/common/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactory =================================================================== --- lucene/analysis/common/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactory (working copy) +++ lucene/analysis/common/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenFilterFactory (working copy) @@ -19,6 +19,7 @@ org.apache.lucene.analysis.br.BrazilianStemFilterFactory org.apache.lucene.analysis.cjk.CJKBigramFilterFactory org.apache.lucene.analysis.cjk.CJKWidthFilterFactory +org.apache.lucene.analysis.cn.ChineseFilterFactory org.apache.lucene.analysis.commongrams.CommonGramsFilterFactory org.apache.lucene.analysis.commongrams.CommonGramsQueryFilterFactory org.apache.lucene.analysis.compound.DictionaryCompoundWordTokenFilterFactory @@ -88,3 +89,4 @@ org.apache.lucene.analysis.synonym.SynonymFilterFactory org.apache.lucene.analysis.th.ThaiWordFilterFactory org.apache.lucene.analysis.tr.TurkishLowerCaseFilterFactory +org.apache.lucene.collation.CollationKeyFilterFactory Index: lucene/analysis/common/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenizerFactory =================================================================== --- lucene/analysis/common/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenizerFactory (working copy) +++ lucene/analysis/common/src/resources/META-INF/services/org.apache.lucene.analysis.util.TokenizerFactory (working copy) @@ -13,6 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +org.apache.lucene.analysis.ar.ArabicLetterTokenizerFactory +org.apache.lucene.analysis.cjk.CJKTokenizerFactory +org.apache.lucene.analysis.cn.ChineseTokenizerFactory org.apache.lucene.analysis.core.KeywordTokenizerFactory org.apache.lucene.analysis.core.LetterTokenizerFactory org.apache.lucene.analysis.core.LowerCaseTokenizerFactory @@ -21,6 +24,7 @@ org.apache.lucene.analysis.ngram.NGramTokenizerFactory org.apache.lucene.analysis.path.PathHierarchyTokenizerFactory org.apache.lucene.analysis.pattern.PatternTokenizerFactory +org.apache.lucene.analysis.ru.RussianLetterTokenizerFactory org.apache.lucene.analysis.standard.ClassicTokenizerFactory org.apache.lucene.analysis.standard.StandardTokenizerFactory org.apache.lucene.analysis.standard.UAX29URLEmailTokenizerFactory Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestAllAnalyzersHaveFactories.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestAllAnalyzersHaveFactories.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestAllAnalyzersHaveFactories.java (working copy) @@ -43,6 +43,9 @@ import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.ValidatingTokenFilter; import org.apache.lucene.analysis.core.TestRandomChains; +import org.apache.lucene.analysis.fr.FrenchStemFilter; +import org.apache.lucene.analysis.in.IndicTokenizer; +import org.apache.lucene.analysis.nl.DutchStemFilter; import org.apache.lucene.analysis.path.ReversePathHierarchyTokenizer; import org.apache.lucene.analysis.sinks.TeeSinkTokenFilter; import org.apache.lucene.analysis.snowball.SnowballFilter; @@ -85,6 +88,17 @@ ); } + // these are deprecated components that are just exact dups of other functionality: they dont need factories + // (they never had them) + private static final Set> deprecatedDuplicatedComponents = Collections.newSetFromMap(new IdentityHashMap,Boolean>()); + static { + Collections.>addAll(deprecatedDuplicatedComponents, + DutchStemFilter.class, + FrenchStemFilter.class, + IndicTokenizer.class + ); + } + // these are oddly-named (either the actual analyzer, or its factory) // they do actually have factories. // TODO: clean this up! @@ -99,6 +113,7 @@ public void test() throws Exception { List> analysisClasses = new ArrayList>(); TestRandomChains.getClassesForPackage("org.apache.lucene.analysis", analysisClasses); + TestRandomChains.getClassesForPackage("org.apache.lucene.collation", analysisClasses); for (final Class c : analysisClasses) { final int modifiers = c.getModifiers(); @@ -109,6 +124,7 @@ || testComponents.contains(c) || crazyComponents.contains(c) || oddlyNamedComponents.contains(c) + || deprecatedDuplicatedComponents.contains(c) || !(Tokenizer.class.isAssignableFrom(c) || TokenFilter.class.isAssignableFrom(c) || CharFilter.class.isAssignableFrom(c)) ) { continue; Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java (revision 1365638) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java (working copy) @@ -235,7 +235,7 @@ private static Constructor castConstructor(Class instanceClazz, Constructor ctor) { return (Constructor) ctor; } - private static void getClassesForPackage(String pckgname, List> classes) throws Exception { + static void getClassesForPackage(String pckgname, List> classes) throws Exception { final ClassLoader cld = TestRandomChains.class.getClassLoader(); final String path = pckgname.replace('.', '/'); final Enumeration resources = cld.getResources(path); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/ru/TestRussianFilters.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/ru/TestRussianFilters.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/ru/TestRussianFilters.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.ru; /* * Licensed to the Apache Software Foundation (ASF) under one or more Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/cn/TestChineseFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/cn/TestChineseFilterFactory.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/cn/TestChineseFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.cn; /* * Licensed to the Apache Software Foundation (ASF) under one or more Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/cn/TestChineseTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/cn/TestChineseTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/cn/TestChineseTokenizerFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.cn; /* * Licensed to the Apache Software Foundation (ASF) under one or more Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/standard/TestUAX29URLEmailTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/standard/TestUAX29URLEmailTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/standard/TestUAX29URLEmailTokenizerFactory.java (working copy) @@ -25,6 +25,7 @@ import org.apache.lucene.analysis.BaseTokenStreamTestCase; import org.apache.lucene.analysis.Tokenizer; +import org.apache.lucene.util.Version; /** * A few tests based on org.apache.lucene.analysis.TestUAX29URLEmailTokenizer @@ -189,4 +190,25 @@ assertTokenStreamContents(stream, new String[] {"one", "two", "three", longWord, "four", "five", "six" }); } + + /** @deprecated nuke this test in lucene 5.0 */ + @Deprecated + public void testMatchVersion() throws Exception { + Reader reader = new StringReader("ざ"); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.setLuceneMatchVersion(TEST_VERSION_CURRENT); + Map args = Collections.emptyMap(); + factory.init(args); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"ざ"}); + + reader = new StringReader("ざ"); + factory = new UAX29URLEmailTokenizerFactory(); + factory.setLuceneMatchVersion(Version.LUCENE_31); + factory.init(args); + stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"さ"}); // old broken behavior + } } Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/cjk/TestCJKTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/cjk/TestCJKTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/cjk/TestCJKTokenizerFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.cjk; /* * Licensed to the Apache Software Foundation (ASF) under one or more Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestMultiWordSynonyms.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestMultiWordSynonyms.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestMultiWordSynonyms.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.synonym; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,11 +17,10 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import org.apache.lucene.analysis.BaseTokenStreamTestCase; import org.apache.lucene.analysis.MockTokenizer; import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.analysis.synonym.SynonymFilterFactory; import org.apache.lucene.analysis.util.ResourceLoader; import java.io.ByteArrayInputStream; Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymMap.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymMap.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymMap.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.synonym; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,8 +17,6 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -25,12 +25,12 @@ import java.util.Map; import org.apache.lucene.analysis.Token; +import org.apache.lucene.analysis.ngram.NGramTokenizerFactory; import org.apache.lucene.analysis.util.InitializationException; import org.apache.lucene.analysis.util.TokenizerFactory; import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.analysis.util.ResourceLoader; - /** * @deprecated Remove this test in Lucene 5.0 */ Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java (working copy) @@ -27,6 +27,7 @@ import org.apache.lucene.analysis.synonym.SynonymFilter; import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader; import org.apache.lucene.analysis.util.StringMockResourceLoader; +import org.apache.lucene.util.Version; public class TestSynonymFilterFactory extends BaseTokenStreamTestCase { /** test that we can parse and use the solr syn file */ @@ -44,6 +45,42 @@ new int[] { 1, 0, 0, 0 }); } + /** test that we can parse and use the solr syn file, with the old impl + * @deprecated Remove this test in Lucene 5.0 */ + @Deprecated + public void testSynonymsOld() throws Exception { + SynonymFilterFactory factory = new SynonymFilterFactory(); + Map args = new HashMap(); + args.put("synonyms", "synonyms.txt"); + factory.setLuceneMatchVersion(Version.LUCENE_33); + factory.init(args); + factory.inform(new ResourceAsStreamResourceLoader(getClass())); + TokenStream ts = factory.create(new MockTokenizer(new StringReader("GB"), MockTokenizer.WHITESPACE, false)); + assertTrue(ts instanceof SlowSynonymFilter); + assertTokenStreamContents(ts, + new String[] { "GB", "gib", "gigabyte", "gigabytes" }, + new int[] { 1, 0, 0, 0 }); + } + + /** test multiword offsets with the old impl + * @deprecated Remove this test in Lucene 5.0 */ + @Deprecated + public void testMultiwordOffsetsOld() throws Exception { + SynonymFilterFactory factory = new SynonymFilterFactory(); + Map args = new HashMap(); + args.put("synonyms", "synonyms.txt"); + factory.setLuceneMatchVersion(Version.LUCENE_33); + factory.init(args); + factory.inform(new StringMockResourceLoader("national hockey league, nhl")); + TokenStream ts = factory.create(new MockTokenizer(new StringReader("national hockey league"), MockTokenizer.WHITESPACE, false)); + // WTF? + assertTokenStreamContents(ts, + new String[] { "national", "nhl", "hockey", "league" }, + new int[] { 0, 0, 0, 0 }, + new int[] { 22, 22, 22, 22 }, + new int[] { 1, 0, 1, 1 }); + } + /** if the synonyms are completely empty, test that we still analyze correctly */ public void testEmptySynonyms() throws Exception { SynonymFilterFactory factory = new SynonymFilterFactory(); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSlowSynonymFilter.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSlowSynonymFilter.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSlowSynonymFilter.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.synonym; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,8 +17,6 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/ar/TestArabicFilters.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/ar/TestArabicFilters.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/ar/TestArabicFilters.java (working copy) @@ -32,6 +32,20 @@ * Simple tests to ensure the Arabic filter Factories are working. */ public class TestArabicFilters extends BaseTokenStreamTestCase { + /** + * Test ArabicLetterTokenizerFactory + * @deprecated (3.1) Remove in Lucene 5.0 + */ + @Deprecated + public void testTokenizer() throws Exception { + Reader reader = new StringReader("الذين مَلكت أيمانكم"); + ArabicLetterTokenizerFactory factory = new ArabicLetterTokenizerFactory(); + factory.setLuceneMatchVersion(TEST_VERSION_CURRENT); + Map args = Collections.emptyMap(); + factory.init(args); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, new String[] {"الذين", "مَلكت", "أيمانكم"}); + } /** * Test ArabicNormalizationFilterFactory Index: lucene/analysis/common/src/test/org/apache/lucene/collation/TestCollationKeyFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/collation/TestCollationKeyFilterFactory.java (working copy) +++ lucene/analysis/common/src/test/org/apache/lucene/collation/TestCollationKeyFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.collation; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -17,14 +17,11 @@ * limitations under the License. */ -import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.InputStream; import java.io.StringReader; import java.text.Collator; import java.text.RuleBasedCollator; import java.util.HashMap; -import java.util.List; import java.util.Locale; import java.util.Map; @@ -32,7 +29,7 @@ import org.apache.lucene.analysis.MockTokenizer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; -import org.apache.lucene.analysis.util.ResourceLoader; +import org.apache.lucene.analysis.util.StringMockResourceLoader; public class TestCollationKeyFilterFactory extends BaseTokenStreamTestCase { @@ -50,7 +47,7 @@ args.put("language", "tr"); args.put("strength", "primary"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsUpper = factory.create( new MockTokenizer(new StringReader(turkishUpperCase), MockTokenizer.KEYWORD, false)); TokenStream tsLower = factory.create( @@ -70,7 +67,7 @@ args.put("strength", "primary"); args.put("decomposition", "canonical"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsUpper = factory.create( new MockTokenizer(new StringReader(turkishUpperCase), MockTokenizer.KEYWORD, false)); TokenStream tsLower = factory.create( @@ -91,7 +88,7 @@ args.put("strength", "identical"); args.put("decomposition", "full"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsFull = factory.create( new MockTokenizer(new StringReader(fullWidth), MockTokenizer.KEYWORD, false)); TokenStream tsHalf = factory.create( @@ -111,7 +108,7 @@ args.put("strength", "secondary"); args.put("decomposition", "no"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader("")); + factory.inform(new StringMockResourceLoader("")); TokenStream tsUpper = factory.create( new MockTokenizer(new StringReader(upperCase), MockTokenizer.KEYWORD, false)); TokenStream tsLower = factory.create( @@ -147,7 +144,7 @@ args.put("custom", "rules.txt"); args.put("strength", "primary"); factory.init(args); - factory.inform(new StringMockSolrResourceLoader(tailoredRules)); + factory.inform(new StringMockResourceLoader(tailoredRules)); TokenStream tsUmlaut = factory.create( new MockTokenizer(new StringReader(germanUmlaut), MockTokenizer.KEYWORD, false)); TokenStream tsOE = factory.create( @@ -156,26 +153,6 @@ assertCollatesToSame(tsUmlaut, tsOE); } - private class StringMockSolrResourceLoader implements ResourceLoader { - String text; - - StringMockSolrResourceLoader(String text) { - this.text = text; - } - - public List getLines(String resource) throws IOException { - return null; - } - - public T newInstance(String cname, Class expectedType, String... subpackages) { - return null; - } - - public InputStream openResource(String resource) throws IOException { - return new ByteArrayInputStream(text.getBytes("UTF-8")); - } - } - private void assertCollatesToSame(TokenStream stream1, TokenStream stream2) throws IOException { stream1.reset(); Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/payloads/NumericPayloadTokenFilter.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/payloads/NumericPayloadTokenFilter.java (revision 1365638) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/payloads/NumericPayloadTokenFilter.java (working copy) @@ -40,6 +40,9 @@ public NumericPayloadTokenFilter(TokenStream input, float payload, String typeMatch) { super(input); + if (typeMatch == null) { + throw new IllegalArgumentException("typeMatch cannot be null"); + } //Need to encode the payload thePayload = new BytesRef(PayloadHelper.encodeFloat(payload)); this.typeMatch = typeMatch; Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/ru/RussianLetterTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/ru/RussianLetterTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/ru/RussianLetterTokenizerFactory.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.ru; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,16 +17,13 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import java.io.Reader; import java.util.Map; import org.apache.lucene.analysis.ru.RussianLetterTokenizer; +import org.apache.lucene.analysis.standard.StandardTokenizerFactory; // javadocs import org.apache.lucene.analysis.util.InitializationException; import org.apache.lucene.analysis.util.TokenizerFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** @deprecated Use {@link StandardTokenizerFactory} instead. * This tokenizer has no Russian-specific functionality. @@ -32,8 +31,6 @@ @Deprecated public class RussianLetterTokenizerFactory extends TokenizerFactory { - private static final Logger log = LoggerFactory.getLogger(RussianLetterTokenizerFactory.class); - @Override public void init(Map args) { super.init(args); @@ -42,7 +39,6 @@ "The charset parameter is no longer supported. " + "Please process your documents as Unicode instead."); assureMatchVersion(); - log.warn(getClass().getSimpleName() + " is deprecated. Use StandardTokenizerFactory instead."); } public RussianLetterTokenizer create(Reader in) { Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/cn/ChineseFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/cn/ChineseFilterFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/cn/ChineseFilterFactory.java (working copy) @@ -1,3 +1,4 @@ +package org.apache.lucene.analysis.cn; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -16,15 +17,10 @@ * limitations under the License. */ - -package org.apache.solr.analysis; -import java.util.Map; - import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.cn.ChineseFilter; +import org.apache.lucene.analysis.core.StopFilterFactory; // javadocs import org.apache.lucene.analysis.util.TokenFilterFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Factory for {@link ChineseFilter} @@ -32,14 +28,6 @@ */ @Deprecated public class ChineseFilterFactory extends TokenFilterFactory { - - private static final Logger log = LoggerFactory.getLogger(ChineseFilterFactory.class); - - @Override - public void init(Map args) { - super.init(args); - log.warn(getClass().getSimpleName() + " is deprecated. Use StopFilterFactory instead."); - } public ChineseFilter create(TokenStream in) { return new ChineseFilter(in); Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/cn/ChineseTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/cn/ChineseTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/cn/ChineseTokenizerFactory.java (working copy) @@ -1,3 +1,4 @@ +package org.apache.lucene.analysis.cn; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -16,16 +17,11 @@ * limitations under the License. */ - -package org.apache.solr.analysis; - import java.io.Reader; -import java.util.Map; import org.apache.lucene.analysis.cn.ChineseTokenizer; +import org.apache.lucene.analysis.standard.StandardTokenizerFactory; // javadocs import org.apache.lucene.analysis.util.TokenizerFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Factory for {@link ChineseTokenizer} @@ -33,14 +29,6 @@ */ @Deprecated public class ChineseTokenizerFactory extends TokenizerFactory { - - private static final Logger log = LoggerFactory.getLogger(ChineseTokenizerFactory.class); - - @Override - public void init(Map args) { - super.init(args); - log.warn(getClass().getSimpleName() + " is deprecated. Use StandardTokenizeFactory instead."); - } public ChineseTokenizer create(Reader in) { return new ChineseTokenizer(in); Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/CharFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/util/CharFilterFactory.java (revision 1365638) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/CharFilterFactory.java (working copy) @@ -18,6 +18,7 @@ */ import java.io.Reader; +import java.util.Set; import org.apache.lucene.analysis.CharFilter; @@ -27,5 +28,32 @@ */ public abstract class CharFilterFactory extends AbstractAnalysisFactory { - public abstract CharFilter create(Reader input); + private static final AnalysisSPILoader loader = + getSPILoader(Thread.currentThread().getContextClassLoader()); + + /** + * Used by e.g. Apache Solr to get a correctly configured instance + * of {@link AnalysisSPILoader} from Solr's classpath. + * @lucene.internal + */ + public static AnalysisSPILoader getSPILoader(ClassLoader classloader) { + return new AnalysisSPILoader(CharFilterFactory.class, classloader); + } + + /** looks up a charfilter by name from context classpath */ + public static CharFilterFactory forName(String name) { + return loader.newInstance(name); + } + + /** looks up a charfilter class by name from context classpath */ + public static Class lookupClass(String name) { + return loader.lookupClass(name); + } + + /** returns a list of all available charfilter names */ + public static Set availableCharFilters() { + return loader.availableServices(); + } + + public abstract Reader create(Reader input); } Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/TokenFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/util/TokenFilterFactory.java (revision 1365638) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/TokenFilterFactory.java (working copy) @@ -17,6 +17,8 @@ * limitations under the License. */ +import java.util.Set; + import org.apache.lucene.analysis.TokenStream; /** @@ -25,6 +27,34 @@ */ public abstract class TokenFilterFactory extends AbstractAnalysisFactory { + private static final AnalysisSPILoader loader = + getSPILoader(Thread.currentThread().getContextClassLoader()); + + /** + * Used by e.g. Apache Solr to get a correctly configured instance + * of {@link AnalysisSPILoader} from Solr's classpath. + * @lucene.internal + */ + public static AnalysisSPILoader getSPILoader(ClassLoader classloader) { + return new AnalysisSPILoader(TokenFilterFactory.class, + new String[] { "TokenFilterFactory", "FilterFactory" }, classloader); + } + + /** looks up a tokenfilter by name from context classpath */ + public static TokenFilterFactory forName(String name) { + return loader.newInstance(name); + } + + /** looks up a tokenfilter class by name from context classpath */ + public static Class lookupClass(String name) { + return loader.lookupClass(name); + } + + /** returns a list of all available tokenfilter names from context classpath */ + public static Set availableTokenFilters() { + return loader.availableServices(); + } + /** Transform the specified input TokenStream */ public abstract TokenStream create(TokenStream input); } Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/TokenizerFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/util/TokenizerFactory.java (revision 1365638) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/TokenizerFactory.java (working copy) @@ -20,6 +20,7 @@ import org.apache.lucene.analysis.Tokenizer; import java.io.Reader; +import java.util.Set; /** * Abstract parent class for analysis factories that create {@link Tokenizer} @@ -27,6 +28,33 @@ */ public abstract class TokenizerFactory extends AbstractAnalysisFactory { + private static final AnalysisSPILoader loader = + getSPILoader(Thread.currentThread().getContextClassLoader()); + + /** + * Used by e.g. Apache Solr to get a correctly configured instance + * of {@link AnalysisSPILoader} from Solr's classpath. + * @lucene.internal + */ + public static AnalysisSPILoader getSPILoader(ClassLoader classloader) { + return new AnalysisSPILoader(TokenizerFactory.class, classloader); + } + + /** looks up a tokenizer by name from context classpath */ + public static TokenizerFactory forName(String name) { + return loader.newInstance(name); + } + + /** looks up a tokenizer class by name from context classpath */ + public static Class lookupClass(String name) { + return loader.lookupClass(name); + } + + /** returns a list of all available tokenizer names from context classpath */ + public static Set availableTokenizers() { + return loader.availableServices(); + } + /** Creates a TokenStream of the specified input */ public abstract Tokenizer create(Reader input); } Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternReplaceCharFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternReplaceCharFilterFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/pattern/PatternReplaceCharFilterFactory.java (working copy) @@ -43,6 +43,8 @@ private Pattern p; private String replacement; + private int maxBlockChars; + private String blockDelimiters; @Override public void init(Map args) { @@ -51,10 +53,12 @@ replacement = args.get( "replacement" ); if( replacement == null ) replacement = ""; - // TODO: throw exception if you set maxBlockChars or blockDelimiters ? + // TODO: warn if you set maxBlockChars or blockDelimiters ? + maxBlockChars = getInt( "maxBlockChars", PatternReplaceCharFilter.DEFAULT_MAX_BLOCK_CHARS ); + blockDelimiters = args.get( "blockDelimiters" ); } public CharFilter create(Reader input) { - return new PatternReplaceCharFilter( p, replacement, input ); + return new PatternReplaceCharFilter( p, replacement, maxBlockChars, blockDelimiters, input ); } } Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicLetterTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicLetterTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicLetterTokenizerFactory.java (working copy) @@ -1,4 +1,5 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.ar; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -18,8 +19,6 @@ import org.apache.lucene.analysis.ar.ArabicLetterTokenizer; import org.apache.lucene.analysis.util.TokenizerFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.Reader; import java.util.Map; @@ -32,13 +31,10 @@ @Deprecated public class ArabicLetterTokenizerFactory extends TokenizerFactory { - private static final Logger log = LoggerFactory.getLogger(ArabicLetterTokenizerFactory.class); - @Override public void init(Map args) { super.init(args); assureMatchVersion(); - log.warn(getClass().getSimpleName() + " is deprecated. Use StandardTokenizeFactory instead."); } public ArabicLetterTokenizer create(Reader input) { Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/cjk/CJKTokenizerFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/cjk/CJKTokenizerFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/cjk/CJKTokenizerFactory.java (working copy) @@ -1,3 +1,4 @@ +package org.apache.lucene.analysis.cjk; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -16,9 +17,6 @@ * limitations under the License. */ - -package org.apache.solr.analysis; - import org.apache.lucene.analysis.cjk.CJKTokenizer; import org.apache.lucene.analysis.util.TokenizerFactory; Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilter.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilter.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilter.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.synonym; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,8 +17,6 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.TokenStream; Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/FSTSynonymFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.synonym; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -38,9 +38,6 @@ import org.apache.lucene.analysis.synonym.WordnetSynonymParser; import org.apache.lucene.analysis.util.*; import org.apache.lucene.util.Version; -import org.apache.solr.common.util.StrUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * @deprecated (3.4) use {@link SynonymFilterFactory} instead. this is only a backwards compatibility @@ -50,8 +47,6 @@ @Deprecated final class FSTSynonymFilterFactory extends TokenFilterFactory implements ResourceLoaderAware { - public static final Logger log = LoggerFactory.getLogger(FSTSynonymFilterFactory.class); - private SynonymMap map; private boolean ignoreCase; @@ -94,10 +89,6 @@ } catch (Exception e) { throw new InitializationException("Exception thrown while loading synonyms", e); } - - if (map.fst == null) { - log.warn("Synonyms loaded with " + args + " has empty rule set!"); - } } /** @@ -119,7 +110,7 @@ decoder.reset(); parser.add(new InputStreamReader(loader.openResource(synonyms), decoder)); } else { - List files = StrUtils.splitFileNames(synonyms); + List files = splitFileNames(synonyms); for (String file : files) { decoder.reset(); parser.add(new InputStreamReader(loader.openResource(file), decoder)); @@ -147,7 +138,7 @@ decoder.reset(); parser.add(new InputStreamReader(loader.openResource(synonyms), decoder)); } else { - List files = StrUtils.splitFileNames(synonyms); + List files = splitFileNames(synonyms); for (String file : files) { decoder.reset(); parser.add(new InputStreamReader(loader.openResource(file), decoder)); Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SynonymFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.analysis.synonym; /* * Licensed to the Apache Software Foundation (ASF) under one or more Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymMap.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymMap.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymMap.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.synonym; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,8 +17,6 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.util.CharArrayMap; import org.apache.lucene.analysis.util.InitializationException; Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/synonym/SlowSynonymFilterFactory.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.lucene.analysis.synonym; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,12 +17,9 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.analysis.util.*; -import org.apache.solr.common.util.StrUtils; import java.io.File; import java.io.IOException; @@ -73,7 +72,7 @@ if (synonymFile.exists()) { wlist = loader.getLines(synonyms); } else { - List files = StrUtils.splitFileNames(synonyms); + List files = splitFileNames(synonyms); wlist = new ArrayList(); for (String file : files) { List lines = loader.getLines(file.trim()); @@ -97,7 +96,7 @@ // do unescaping at some point anyway, we wouldn't be saving any effort // by using regexes. - List mapping = StrUtils.splitSmart(rule, mappingSep, false); + List mapping = splitSmart(rule, mappingSep, false); List> source; List> target; @@ -135,12 +134,12 @@ // a , b c , d e f => [[a],[b,c],[d,e,f]] private static List> getSynList(String str, String separator, TokenizerFactory tokFactory) { - List strList = StrUtils.splitSmart(str, separator, false); + List strList = splitSmart(str, separator, false); // now split on whitespace to get a list of token strings List> synList = new ArrayList>(); for (String toks : strList) { List tokList = tokFactory == null ? - StrUtils.splitWS(toks, true) : splitByTokenizer(toks, tokFactory); + splitWS(toks, true) : splitByTokenizer(toks, tokFactory); synList.add(tokList); } return synList; @@ -186,4 +185,93 @@ public SlowSynonymFilter create(TokenStream input) { return new SlowSynonymFilter(input,synMap); } + + public static List splitWS(String s, boolean decode) { + ArrayList lst = new ArrayList(2); + StringBuilder sb = new StringBuilder(); + int pos=0, end=s.length(); + while (pos < end) { + char ch = s.charAt(pos++); + if (Character.isWhitespace(ch)) { + if (sb.length() > 0) { + lst.add(sb.toString()); + sb=new StringBuilder(); + } + continue; + } + + if (ch=='\\') { + if (!decode) sb.append(ch); + if (pos>=end) break; // ERROR, or let it go? + ch = s.charAt(pos++); + if (decode) { + switch(ch) { + case 'n' : ch='\n'; break; + case 't' : ch='\t'; break; + case 'r' : ch='\r'; break; + case 'b' : ch='\b'; break; + case 'f' : ch='\f'; break; + } + } + } + + sb.append(ch); + } + + if (sb.length() > 0) { + lst.add(sb.toString()); + } + + return lst; + } + + /** Splits a backslash escaped string on the separator. + *

+ * Current backslash escaping supported: + *
\n \t \r \b \f are escaped the same as a Java String + *
Other characters following a backslash are produced verbatim (\c => c) + * + * @param s the string to split + * @param separator the separator to split on + * @param decode decode backslash escaping + */ + public static List splitSmart(String s, String separator, boolean decode) { + ArrayList lst = new ArrayList(2); + StringBuilder sb = new StringBuilder(); + int pos=0, end=s.length(); + while (pos < end) { + if (s.startsWith(separator,pos)) { + if (sb.length() > 0) { + lst.add(sb.toString()); + sb=new StringBuilder(); + } + pos+=separator.length(); + continue; + } + + char ch = s.charAt(pos++); + if (ch=='\\') { + if (!decode) sb.append(ch); + if (pos>=end) break; // ERROR, or let it go? + ch = s.charAt(pos++); + if (decode) { + switch(ch) { + case 'n' : ch='\n'; break; + case 't' : ch='\t'; break; + case 'r' : ch='\r'; break; + case 'b' : ch='\b'; break; + case 'f' : ch='\f'; break; + } + } + } + + sb.append(ch); + } + + if (sb.length() > 0) { + lst.add(sb.toString()); + } + + return lst; + } } Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilter.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilter.java (revision 1365638) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenFilter.java (working copy) @@ -57,6 +57,9 @@ */ public DictionaryCompoundWordTokenFilter(Version matchVersion, TokenStream input, CharArraySet dictionary) { super(matchVersion, input, dictionary); + if (dictionary == null) { + throw new IllegalArgumentException("dictionary cannot be null"); + } } /** @@ -83,6 +86,9 @@ public DictionaryCompoundWordTokenFilter(Version matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, boolean onlyLongestMatch) { super(matchVersion, input, dictionary, minWordSize, minSubwordSize, maxSubwordSize, onlyLongestMatch); + if (dictionary == null) { + throw new IllegalArgumentException("dictionary cannot be null"); + } } @Override Index: lucene/analysis/common/src/java/org/apache/lucene/collation/CollationKeyFilterFactory.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/collation/CollationKeyFilterFactory.java (working copy) +++ lucene/analysis/common/src/java/org/apache/lucene/collation/CollationKeyFilterFactory.java (working copy) @@ -1,4 +1,4 @@ -package org.apache.solr.analysis; +package org.apache.lucene.collation; /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -19,15 +19,16 @@ import java.io.IOException; import java.io.InputStream; +import java.io.Reader; import java.text.Collator; import java.text.ParseException; import java.text.RuleBasedCollator; import java.util.Locale; -import org.apache.commons.io.IOUtils; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.util.*; import org.apache.lucene.collation.CollationKeyFilter; +import org.apache.lucene.util.IOUtils; /** * Factory for {@link CollationKeyFilter}. @@ -66,7 +67,7 @@ * @see Locale * @see RuleBasedCollator * @since solr 3.1 - * @deprecated use {@link org.apache.solr.schema.CollationField} instead. + * @deprecated use {@link CollationKeyAnalyzer} instead. */ @Deprecated public class CollationKeyFilterFactory extends TokenFilterFactory implements MultiTermAwareComponent, ResourceLoaderAware { @@ -155,7 +156,7 @@ InputStream input = null; try { input = loader.openResource(fileName); - String rules = IOUtils.toString(input, "UTF-8"); + String rules = toUTF8String(input); return new RuleBasedCollator(rules); } catch (IOException e) { // io error @@ -164,7 +165,7 @@ // invalid rules throw new InitializationException("ParseException thrown while parsing rules", e); } finally { - IOUtils.closeQuietly(input); + IOUtils.closeWhileHandlingException(input); } } @@ -172,4 +173,15 @@ public AbstractAnalysisFactory getMultiTermComponent() { return this; } + + private String toUTF8String(InputStream in) throws IOException { + StringBuilder sb = new StringBuilder(); + char buffer[] = new char[1024]; + Reader r = IOUtils.getDecodingReader(in, IOUtils.CHARSET_UTF_8); + int len = 0; + while ((len = r.read(buffer)) > 0) { + sb.append(buffer, 0, len); + } + return sb.toString(); + } } Index: lucene/benchmark =================================================================== --- lucene/benchmark (revision 1365638) +++ lucene/benchmark (working copy) Property changes on: lucene/benchmark ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/benchmark:r1365586,1365602,1365610 Index: lucene/grouping =================================================================== --- lucene/grouping (revision 1365638) +++ lucene/grouping (working copy) Property changes on: lucene/grouping ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/grouping:r1365586,1365602,1365610 Index: lucene/misc =================================================================== --- lucene/misc (revision 1365638) +++ lucene/misc (working copy) Property changes on: lucene/misc ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/misc:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/lucene/misc:r1364862-1365496 Index: lucene/spatial =================================================================== --- lucene/spatial (revision 1365638) +++ lucene/spatial (working copy) Property changes on: lucene/spatial ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/branches/lucene2510/lucene/spatial:r1364862-1365496 Merged /lucene/dev/trunk/lucene/spatial:r1365586,1365602,1365610 Index: lucene/build.xml =================================================================== --- lucene/build.xml (revision 1365638) +++ lucene/build.xml (working copy) Property changes on: lucene/build.xml ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/build.xml:r1365586,1365602,1365610 Index: lucene/NOTICE.txt =================================================================== --- lucene/NOTICE.txt (revision 1365638) +++ lucene/NOTICE.txt (working copy) Property changes on: lucene/NOTICE.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/NOTICE.txt:r1365586,1365602,1365610 Index: lucene/tools =================================================================== --- lucene/tools (revision 1365638) +++ lucene/tools (working copy) Property changes on: lucene/tools ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/tools:r1365586,1365602,1365610 Index: lucene/backwards =================================================================== --- lucene/backwards (revision 1365638) +++ lucene/backwards (working copy) Property changes on: lucene/backwards ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/backwards:r1365586,1365602,1365610 Index: lucene/ivy-settings.xml =================================================================== --- lucene/ivy-settings.xml (revision 1365638) +++ lucene/ivy-settings.xml (working copy) Property changes on: lucene/ivy-settings.xml ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/ivy-settings.xml:r1365586,1365602,1365610 Index: lucene/test-framework =================================================================== --- lucene/test-framework (revision 1365638) +++ lucene/test-framework (working copy) Property changes on: lucene/test-framework ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/test-framework:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/lucene/test-framework:r1364862-1365496 Index: lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java =================================================================== --- lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java (revision 1365638) +++ lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java (working copy) @@ -88,32 +88,6 @@ restoreProperties.put("solr.solr.home", System.getProperty("solr.solr.home")); restoreProperties.put("solr.data.dir", System.getProperty("solr.data.dir")); - // enable the Lucene 3.x PreflexRW codec explicitly, to work around bugs in IBM J9 / Harmony ServiceLoader: - try { - final java.lang.reflect.Field spiLoaderField = Codec.class.getDeclaredField("loader"); - spiLoaderField.setAccessible(true); - final Object spiLoader = spiLoaderField.get(null); - final java.lang.reflect.Field modifiableServicesField = NamedSPILoader.class.getDeclaredField("modifiableServices"); - modifiableServicesField.setAccessible(true); - @SuppressWarnings({"unchecked","rawtypes"}) final Map serviceMap = - (Map) modifiableServicesField.get(spiLoader); - if (!(Codec.forName("Lucene3x") instanceof PreFlexRWCodec)) { - if (Constants.JAVA_VENDOR.startsWith("IBM")) { - // definitely a buggy version - System.err.println("ERROR: Your VM's java.util.ServiceLoader implementation is buggy"+ - " and does not respect classpath order, please report this to the vendor."); - } else { - // could just be a classpath issue - System.err.println("ERROR: fix your classpath to have tests-framework.jar before lucene-core.jar!"+ - " If you have already done this, then your VM's java.util.ServiceLoader implementation is buggy"+ - " and does not respect classpath order, please report this to the vendor."); - } - serviceMap.put("Lucene3x", new PreFlexRWCodec()); - } - } catch (Exception e) { - throw new RuntimeException("Cannot access internals of Codec and NamedSPILoader classes", e); - } - // if verbose: print some debugging stuff about which codecs are loaded. if (VERBOSE) { Set codecs = Codec.availableCodecs(); Index: lucene/README.txt =================================================================== --- lucene/README.txt (revision 1365638) +++ lucene/README.txt (working copy) Property changes on: lucene/README.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/lucene/README.txt:r1365586,1365602,1365610 Index: dev-tools =================================================================== --- dev-tools (revision 1365638) +++ dev-tools (working copy) Property changes on: dev-tools ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/branches/lucene2510/dev-tools:r1364862-1365496 Merged /lucene/dev/trunk/dev-tools:r1365586,1365602,1365610 Index: dev-tools/eclipse/dot.classpath =================================================================== --- dev-tools/eclipse/dot.classpath (revision 1365638) +++ dev-tools/eclipse/dot.classpath (working copy) @@ -17,25 +17,28 @@ - + - + - + + - + - + + + Index: solr =================================================================== --- solr (revision 1365638) +++ solr (working copy) Property changes on: solr ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/solr:r1364862-1365496 Index: solr/scripts =================================================================== --- solr/scripts (revision 1365638) +++ solr/scripts (working copy) Property changes on: solr/scripts ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/scripts:r1365586,1365602,1365610 Index: solr/core =================================================================== --- solr/core (revision 1365638) +++ solr/core (working copy) Property changes on: solr/core ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/core:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/solr/core:r1364862-1365496 Index: solr/core/src/test/org/apache/solr/analysis/TestGermanMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestJapaneseTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestSynonymFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestRussianFilters.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestThaiWordFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestTypeTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestHunspellStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPortugueseLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestSpanishLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestLatvianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestSwedishLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestUAX29URLEmailTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/LengthFilterTest.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestMappingCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestEnglishMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPortugueseStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestNGramFilters.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGermanStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPorterStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPatternReplaceCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestMultiWordSynonyms.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestCapitalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestJapaneseKatakanaStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestRemoveDuplicatesTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestIrishLowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestKeywordMarkerFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestShingleFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestHungarianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestTurkishLowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGalicianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestJapanesePartOfSpeechStopFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestElisionFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestReverseStringFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestJapaneseReadingFormFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestRussianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestDictionaryCompoundWordTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/CommonGramsQueryFilterFactoryTest.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPhoneticFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestNorwegianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java =================================================================== --- solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java (revision 1365638) +++ solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java (working copy) @@ -1,3 +1,5 @@ +package org.apache.solr.analysis; + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -15,8 +17,6 @@ * limitations under the License. */ -package org.apache.solr.analysis; - import java.io.StringReader; import java.util.HashMap; import java.util.Map; @@ -25,6 +25,7 @@ import org.apache.lucene.analysis.MockTokenizer; import org.apache.lucene.analysis.TokenStream; import org.apache.solr.SolrTestCaseJ4; +import org.apache.lucene.analysis.miscellaneous.WordDelimiterFilterFactory; import org.apache.lucene.analysis.util.ResourceLoader; import org.apache.solr.core.SolrResourceLoader; import org.junit.BeforeClass; @@ -33,6 +34,7 @@ /** * New WordDelimiterFilter tests... most of the tests are in ConvertedLegacyTest */ +// TODO: add a low-level test for this factory public class TestWordDelimiterFilterFactory extends SolrTestCaseJ4 { @BeforeClass Index: solr/core/src/test/org/apache/solr/analysis/TestDelimitedPayloadTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestStemmerOverrideFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestSynonymMap.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/SnowballPorterFilterFactoryTest.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestJapaneseIterationMarkCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestChineseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestFinnishLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGermanNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestKStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestHTMLStripCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestStopFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestCzechStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestHindiFilters.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGreekStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestHyphenationCompoundWordTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestNorwegianMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestCJKBigramFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestSlowSynonymFilter.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestWikipediaTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestBeiderMorseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPortugueseMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPatternTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestChineseTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestJapaneseBaseFormFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGalicianMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestCJKWidthFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPersianNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestPatternReplaceFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestTrimFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/DoubleMetaphoneFilterFactoryTest.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestArabicFilters.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestIndonesianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/CommonGramsFilterFactoryTest.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestKeepFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestFrenchLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGermanLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestCJKTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestCollationKeyFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestBulgarianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestItalianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestGreekLowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestStandardFactories.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestBrazilianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/analysis/TestFrenchMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/test/org/apache/solr/schema/MultiTermTest.java =================================================================== --- solr/core/src/test/org/apache/solr/schema/MultiTermTest.java (revision 1365638) +++ solr/core/src/test/org/apache/solr/schema/MultiTermTest.java (working copy) @@ -18,6 +18,12 @@ */ import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.charfilter.MappingCharFilterFactory; +import org.apache.lucene.analysis.core.KeywordTokenizerFactory; +import org.apache.lucene.analysis.core.LowerCaseFilterFactory; +import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory; +import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilterFactory; +import org.apache.lucene.analysis.miscellaneous.TrimFilterFactory; import org.apache.lucene.analysis.util.TokenFilterFactory; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.analysis.*; Index: solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java =================================================================== --- solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java (revision 1365638) +++ solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java (working copy) @@ -20,8 +20,8 @@ import junit.framework.Assert; import org.apache.lucene.util.LuceneTestCase; -import org.apache.solr.analysis.KeywordTokenizerFactory; -import org.apache.solr.analysis.NGramFilterFactory; +import org.apache.lucene.analysis.core.KeywordTokenizerFactory; +import org.apache.lucene.analysis.ngram.NGramFilterFactory; import org.apache.solr.common.SolrException; import org.apache.solr.handler.admin.LukeRequestHandler; import org.apache.solr.handler.component.FacetComponent; Index: solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java =================================================================== --- solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (revision 1365638) +++ solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (working copy) @@ -29,11 +29,15 @@ import java.net.URLClassLoader; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.lucene.analysis.util.CharFilterFactory; import org.apache.lucene.analysis.util.ResourceLoaderAware; import org.apache.lucene.analysis.util.TokenFilterFactory; import org.apache.lucene.analysis.util.TokenizerFactory; +import org.apache.lucene.analysis.util.AnalysisSPILoader; +import org.apache.lucene.util.WeakIdentityMap; import org.apache.solr.common.ResourceLoader; import org.apache.solr.handler.admin.CoreAdminHandler; import org.apache.solr.handler.component.ShardHandlerFactory; @@ -366,8 +370,15 @@ /* * A static map of short class name to fully qualified class name */ - private static Map classNameCache = new ConcurrentHashMap(); + private static final Map classNameCache = new ConcurrentHashMap(); + // A static map of AnalysisSPILoaders, keyed by ClassLoader used (because it can change during Solr lifetime) and expected base class: + private static final WeakIdentityMap,AnalysisSPILoader>> expectedTypesSPILoaders = WeakIdentityMap.newConcurrentHashMap(); + + // Using this pattern, legacy analysis components from previous Solr versions are identified and delegated to SPI loader: + private static final Pattern legacyAnalysisPattern = + Pattern.compile("((\\Q"+base+".analysis.\\E)|(\\Q"+project+".\\E))([\\p{L}_$][\\p{L}\\p{N}_$]+?)(TokenFilter|Filter|Tokenizer|CharFilter)Factory"); + /** * This method loads a class either with it's FQN or a short-name (solr.class-simplename or class-simplename). * It tries to load the class with the name that is given first and if it fails, it tries all the known @@ -394,6 +405,31 @@ } } Class clazz = null; + + // first try legacy analysis patterns, now replaced by Lucene's Analysis package: + final Matcher m = legacyAnalysisPattern.matcher(cname); + if (m.matches()) { + log.trace("Trying to load class from analysis SPI"); + // retrieve the map of classLoader -> expectedType -> SPI from cache / regenerate cache + Map,AnalysisSPILoader> spiLoaders = expectedTypesSPILoaders.get(classLoader); + if (spiLoaders == null) { + spiLoaders = new IdentityHashMap,AnalysisSPILoader>(3); + spiLoaders.put(CharFilterFactory.class, CharFilterFactory.getSPILoader(classLoader)); + spiLoaders.put(TokenizerFactory.class, TokenizerFactory.getSPILoader(classLoader)); + spiLoaders.put(TokenFilterFactory.class, TokenFilterFactory.getSPILoader(classLoader)); + expectedTypesSPILoaders.put(classLoader, spiLoaders); + } + final AnalysisSPILoader loader = spiLoaders.get(expectedType); + if (loader != null) { + // it's a correct expected type for analysis! Let's go on! + try { + return clazz = loader.lookupClass(m.group(4)).asSubclass(expectedType); + } catch (IllegalArgumentException ex) { + // ok, we fall back to legacy loading + } + } + } + // first try cname == full name try { return Class.forName(cname, true, classLoader).asSubclass(expectedType); Index: solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java =================================================================== --- solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java (revision 1365638) +++ solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java (working copy) @@ -27,6 +27,7 @@ import java.util.Set; import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.core.StopFilterFactory; import org.apache.lucene.analysis.util.TokenFilterFactory; import org.apache.lucene.queries.function.BoostedQuery; import org.apache.lucene.queries.function.FunctionQuery; @@ -36,7 +37,6 @@ import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.*; -import org.apache.solr.analysis.StopFilterFactory; import org.apache.solr.analysis.TokenizerChain; import org.apache.solr.search.SolrQueryParser.MagicFieldName; import org.apache.solr.common.params.DisMaxParams; Index: solr/core/src/java/org/apache/solr/analysis/LetterTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/LowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/StopFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/KeywordMarkerFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/FrenchLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HyphenationCompoundWordTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SlowSynonymFilter.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/NorwegianMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/NGramTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/EnglishMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GermanLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/WikipediaTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PortugueseStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/IndicNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/StandardFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ReverseStringFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GermanStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PorterStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/JapaneseBaseFormFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PatternReplaceCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CJKWidthFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HyphenatedWordsFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PersianNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/KeywordTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/WordDelimiterFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ArabicStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/JapaneseTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/DelimitedPayloadTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/TrimFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CapitalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SynonymFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/JapaneseIterationMarkCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/TypeAsPayloadTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/WhitespaceTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SlowSynonymMap.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/KStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PortugueseLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/IrishLowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HTMLStripCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CzechStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GreekStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/LatvianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/MappingCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CJKBigramFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HungarianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CollationKeyFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ItalianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PortugueseMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/TokenOffsetPayloadTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PositionFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/LowerCaseTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/NorwegianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SnowballPorterFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/EnglishPossessiveFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/NumericPayloadTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ThaiWordFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ClassicFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HunspellStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/StandardTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SpanishLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SwedishLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/LimitTokenCountFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/UAX29URLEmailTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ShingleFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/RussianLetterTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ASCIIFoldingFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/BulgarianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ElisionFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PatternTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ChineseTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/JapaneseReadingFormFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/NGramFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/BrazilianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/FrenchMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ClassicTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/DictionaryCompoundWordTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PatternReplaceFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GermanMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/LegacyHTMLStripCharFilterFactory.java =================================================================== --- solr/core/src/java/org/apache/solr/analysis/LegacyHTMLStripCharFilterFactory.java (revision 1365638) +++ solr/core/src/java/org/apache/solr/analysis/LegacyHTMLStripCharFilterFactory.java (working copy) @@ -20,6 +20,7 @@ import java.io.Reader; +import org.apache.lucene.analysis.charfilter.HTMLStripCharFilterFactory; import org.apache.lucene.analysis.util.CharFilterFactory; /** Index: solr/core/src/java/org/apache/solr/analysis/JapaneseKatakanaStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/StemmerOverrideFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ChineseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GermanNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/IndonesianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/KeepWordFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/SlowSynonymFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/TypeTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HindiStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ArabicLetterTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/ArabicNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/FSTSynonymFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/EdgeNGramFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CJKTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/TurkishLowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PersianCharFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/BeiderMorseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GalicianStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/JapanesePartOfSpeechStopFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GreekLowerCaseFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/HindiNormalizationFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/RussianLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/GalicianMinimalStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CommonGramsQueryFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/PhoneticFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/DoubleMetaphoneFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/RemoveDuplicatesTokenFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/EdgeNGramTokenizerFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/FinnishLightStemFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/LengthFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/analysis/CommonGramsFilterFactory.java (deleted) =================================================================== Index: solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java =================================================================== --- solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java (revision 1365638) +++ solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java (working copy) @@ -19,9 +19,9 @@ import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.core.KeywordAnalyzer; +import org.apache.lucene.analysis.core.KeywordTokenizerFactory; import org.apache.lucene.analysis.util.*; import org.apache.lucene.util.Version; -import org.apache.solr.analysis.KeywordTokenizerFactory; import org.apache.solr.analysis.TokenizerChain; import org.apache.solr.common.SolrException; import org.apache.solr.util.DOMUtil; Index: solr/solrj =================================================================== --- solr/solrj (revision 1365638) +++ solr/solrj (working copy) Property changes on: solr/solrj ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/solrj:r1365586,1365602,1365610 Index: solr/example =================================================================== --- solr/example (revision 1365638) +++ solr/example (working copy) Property changes on: solr/example ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/example:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/solr/example:r1364862-1365496 Index: solr/build.xml =================================================================== --- solr/build.xml (revision 1365638) +++ solr/build.xml (working copy) Property changes on: solr/build.xml ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/build.xml:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/solr/build.xml:r1364862-1365496 Index: solr/lib =================================================================== --- solr/lib (revision 1365638) +++ solr/lib (working copy) Property changes on: solr/lib ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/lib:r1365586,1365602,1365610 Index: solr/webapp =================================================================== --- solr/webapp (revision 1365638) +++ solr/webapp (working copy) Property changes on: solr/webapp ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/webapp:r1365586,1365602,1365610 Index: solr/cloud-dev =================================================================== --- solr/cloud-dev (revision 1365638) +++ solr/cloud-dev (working copy) Property changes on: solr/cloud-dev ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/cloud-dev:r1365586,1365602,1365610 Index: solr/CHANGES.txt =================================================================== --- solr/CHANGES.txt (revision 1365638) +++ solr/CHANGES.txt (working copy) @@ -77,7 +77,14 @@ already exist. To assert that the document must exist, use the optimistic concurrency feature by specifying a _version_ of 1. (yonik) +* LUCENE-2510, LUCENE-4044: Migrated Solr's Tokenizer-, TokenFilter-, and + CharFilterFactories to the lucene-analysis module. To add new analysis + modules to Solr (like ICU, SmartChinese, Morfologik,...), just drop in + the JAR files from Lucene's binary distribution into your Solr instance's + lib folder. The factories are automatically made available with SPI. + (Chris Male, Robert Muir, Uwe Schindler) + Bug Fixes ---------------------- Property changes on: solr/CHANGES.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/branches/lucene2510/solr/CHANGES.txt:r1364862-1365496 Merged /lucene/dev/trunk/solr/CHANGES.txt:r1365586,1365602,1365610 Index: solr/NOTICE.txt =================================================================== --- solr/NOTICE.txt (revision 1365638) +++ solr/NOTICE.txt (working copy) Property changes on: solr/NOTICE.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/NOTICE.txt:r1365586,1365602,1365610 Index: solr/contrib =================================================================== --- solr/contrib (revision 1365638) +++ solr/contrib (working copy) Property changes on: solr/contrib ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/contrib:r1365586,1365602,1365610 Merged /lucene/dev/branches/lucene2510/solr/contrib:r1364862-1365496 Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUFoldingFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUTokenizerFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUNormalizer2FilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/MorfologikFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUTransformFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/ICUCollationKeyFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/SmartChineseSentenceTokenizerFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/StempelPolishStemFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/java/org/apache/solr/analysis/SmartChineseWordTokenFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestICUFoldingFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestICUTokenizerFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestICUNormalizer2FilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestSmartChineseFactories.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestMorfologikFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestICUTransformFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestICUCollationKeyFilterFactory.java (deleted) =================================================================== Index: solr/contrib/analysis-extras/src/test/org/apache/solr/analysis/TestStempelPolishStemFilterFactory.java (deleted) =================================================================== Index: solr/contrib/uima/src/java/org/apache/solr/uima/analysis/UIMAAnnotationsTokenizerFactory.java (deleted) =================================================================== Index: solr/contrib/uima/src/java/org/apache/solr/uima/analysis/UIMATypeAwareAnnotationsTokenizerFactory.java (deleted) =================================================================== Index: solr/contrib/uima/src/test-files/uima/uima-tokenizers-schema.xml =================================================================== --- solr/contrib/uima/src/test-files/uima/uima-tokenizers-schema.xml (revision 1365638) +++ solr/contrib/uima/src/test-files/uima/uima-tokenizers-schema.xml (working copy) @@ -299,14 +299,14 @@ - - Index: solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java =================================================================== --- solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java (revision 1365638) +++ solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java (working copy) @@ -23,8 +23,8 @@ import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.util.CharArraySet; import org.apache.lucene.analysis.util.TokenFilterFactory; -import org.apache.solr.analysis.CommonGramsFilterFactory; -import org.apache.solr.analysis.StopFilterFactory; +import org.apache.lucene.analysis.commongrams.CommonGramsFilterFactory; +import org.apache.lucene.analysis.core.StopFilterFactory; import org.apache.solr.analysis.TokenizerChain; import org.apache.solr.schema.IndexSchema; import org.carrot2.core.LanguageCode; Index: solr/LICENSE.txt =================================================================== --- solr/LICENSE.txt (revision 1365638) +++ solr/LICENSE.txt (working copy) Property changes on: solr/LICENSE.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/LICENSE.txt:r1365586,1365602,1365610 Index: solr/test-framework =================================================================== --- solr/test-framework (revision 1365638) +++ solr/test-framework (working copy) Property changes on: solr/test-framework ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/test-framework:r1365586,1365602,1365610 Index: solr/README.txt =================================================================== --- solr/README.txt (revision 1365638) +++ solr/README.txt (working copy) Property changes on: solr/README.txt ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/README.txt:r1365586,1365602,1365610 Index: solr/dev-tools =================================================================== --- solr/dev-tools (revision 1365638) +++ solr/dev-tools (working copy) Property changes on: solr/dev-tools ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/dev-tools:r1365586,1365602,1365610 Index: solr/testlogging.properties =================================================================== --- solr/testlogging.properties (revision 1365638) +++ solr/testlogging.properties (working copy) Property changes on: solr/testlogging.properties ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/testlogging.properties:r1365586,1365602,1365610 Index: solr/common-build.xml =================================================================== --- solr/common-build.xml (revision 1365638) +++ solr/common-build.xml (working copy) Property changes on: solr/common-build.xml ___________________________________________________________________ Modified: svn:mergeinfo Merged /lucene/dev/trunk/solr/common-build.xml:r1365586,1365602,1365610