From e635b2d1ac0e9e85d5d43a1835a30bebb5899df5 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mar 07 2014 21:34:21 +0000 Subject: Update to Lucene 4. - Enable bootstrap build to work around broken UA (Help) bundles. --- diff --git a/eclipse-help-doc-adjust-dependencies.patch b/eclipse-help-doc-adjust-dependencies.patch index 8716eaa..beaf499 100644 --- a/eclipse-help-doc-adjust-dependencies.patch +++ b/eclipse-help-doc-adjust-dependencies.patch @@ -1,7 +1,8 @@ -diff -r -Nu eclipse-3.8.0-M1-src/features/org.eclipse.help/feature.xml eclipse-3.8.0-M1-src.patched/features/org.eclipse.help/feature.xml ---- eclipse.platform.releng/features/org.eclipse.help-feature/feature.xml 2011-03-27 10:30:27.000000000 -0400 -+++ eclipse.platform.releng/features/org.eclipse.help-feature/feature.xml 2011-08-23 14:01:19.026328809 -0400 -@@ -36,7 +36,7 @@ +diff --git a/eclipse.platform.releng/features/org.eclipse.help-feature/feature.xml b/eclipse.platform.releng/features/org.eclipse.help-feature/feature.xml +index c63d1e1..8e7cc30 100644 +--- a/eclipse.platform.releng/features/org.eclipse.help-feature/feature.xml ++++ b/eclipse.platform.releng/features/org.eclipse.help-feature/feature.xml +@@ -42,7 +42,7 @@ unpack="false"/> + + eclipse-plugin +- org.apache.lucene +- [3.5,4.0) ++ org.apache.lucene.core ++ [3.5,5.0) + + + eclipse-plugin + org.apache.lucene.analysis +- [3.5,4.0) ++ [3.5,5.0) + + + +diff --git a/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF b/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF +index 0af7e6b..1985d9e 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF ++++ b/eclipse.platform.ua/org.eclipse.help.base/META-INF/MANIFEST.MF +@@ -43,8 +43,8 @@ Require-Bundle: org.eclipse.ant.core;bundle-version="3.2.200";resolution:=option + org.eclipse.core.runtime;bundle-version="3.6.0", + org.eclipse.help;bundle-version="[3.5.0,4.0.0)";visibility:=reexport, + org.eclipse.core.expressions;bundle-version="[3.4.200,4.0.0)", +- org.apache.lucene.analysis;bundle-version="[3.5.0,4.0.0)", +- org.apache.lucene.core;bundle-version="[3.5.0,4.0.0)" ++ org.apache.lucene.analysis;bundle-version="[3.5.0,5.0.0)", ++ org.apache.lucene.core;bundle-version="[3.5.0,5.0.0)" + Import-Package: com.ibm.icu.text, + org.eclipse.equinox.http.jetty;resolution:=optional + Bundle-RequiredExecutionEnvironment: J2SE-1.5 +diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF b/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF +index 12beb8e..e20ea19 100644 +--- a/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF ++++ b/eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF +@@ -25,9 +25,9 @@ Bundle-Vendor: Eclipse.org + Bundle-ClassPath: ua-tests.jar + Import-Package: javax.servlet;version="2.4.0", + javax.servlet.http;version="2.4.0", +- org.apache.lucene.index;core=split;version="[3.5.0,4.0.0)", +- org.apache.lucene.search;core=split;version="[3.5.0,4.0.0)", +- org.apache.lucene.store;core=split;version="[3.5.0,4.0.0)" ++ org.apache.lucene.index;version="[3.5.0,5.0.0)", ++ org.apache.lucene.search;version="[3.5.0,5.0.0)", ++ org.apache.lucene.store;version="[3.5.0,5.0.0)" + Bundle-RequiredExecutionEnvironment: J2SE-1.5 + Export-Package: org.eclipse.ua.tests, + org.eclipse.ua.tests.browser, +diff --git a/eclipse.platform.ua/org.eclipse.ua.tests/pom.xml b/eclipse.platform.ua/org.eclipse.ua.tests/pom.xml +index 06eb56f..d7b592d 100644 +--- a/eclipse.platform.ua/org.eclipse.ua.tests/pom.xml ++++ b/eclipse.platform.ua/org.eclipse.ua.tests/pom.xml +@@ -20,4 +20,29 @@ org.eclipse.ua.tests 3.3.600-SNAPSHOT eclipse-test-plugin @@ -37,12 +93,12 @@ diff -r -Nu eclipse-3.8.0-M1-src/features/org.eclipse.help/feature.xml eclipse-3 + + eclipse-plugin + org.apache.lucene.core -+ [3.0,4.0) ++ [3.0,5.0) + + + eclipse-plugin + org.apache.lucene.analysis -+ [3.0,4.0) ++ [3.0,5.0) + + + @@ -51,29 +107,23 @@ diff -r -Nu eclipse-3.8.0-M1-src/features/org.eclipse.help/feature.xml eclipse-3 + + - --- eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF.orig 2013-02-20 17:00:07.000000000 +0100 -+++ eclipse.platform.ua/org.eclipse.ua.tests/META-INF/MANIFEST.MF 2013-02-21 16:29:42.318407536 +0100 -@@ -25,9 +25,9 @@ - Bundle-ClassPath: ua-tests.jar - Import-Package: javax.servlet;version="2.4.0", - javax.servlet.http;version="2.4.0", -- org.apache.lucene.index;core=split;version="[3.5.0,4.0.0)", -- org.apache.lucene.search;core=split;version="[3.5.0,4.0.0)", -- org.apache.lucene.store;core=split;version="[3.5.0,4.0.0)" -+ org.apache.lucene.index;version="[3.5.0,4.0.0)", -+ org.apache.lucene.search;version="[3.5.0,4.0.0)", -+ org.apache.lucene.store;version="[3.5.0,4.0.0)" - Bundle-RequiredExecutionEnvironment: J2SE-1.5 - Export-Package: org.eclipse.ua.tests, - org.eclipse.ua.tests.browser, ---- eclipse.platform.releng/features/org.eclipse.help-feature/pom.xml.bak 2013-03-14 11:18:11.000000000 +0100 -+++ eclipse.platform.releng/features/org.eclipse.help-feature/pom.xml 2013-03-14 12:29:48.067564008 +0100 -@@ -31,7 +31,7 @@ - +diff --git a/eclipse.platform.ua/pom.xml b/eclipse.platform.ua/pom.xml +index 927e027..c2480a8 100644 +--- a/eclipse.platform.ua/pom.xml ++++ b/eclipse.platform.ua/pom.xml +@@ -59,12 +59,12 @@ eclipse-plugin -- org.apache.lucene -+ org.apache.lucene.core - [3.5,4.0) + org.apache.lucene +- [3.5,4.0) ++ [3.5,5.0) + eclipse-plugin + org.apache.lucene.analysis +- [3.5,4.0) ++ [3.5,5.0) + + + + diff --git a/eclipse-lucene-4.patch b/eclipse-lucene-4.patch new file mode 100644 index 0000000..49da5e4 --- /dev/null +++ b/eclipse-lucene-4.patch @@ -0,0 +1,425 @@ +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java +index 4e6786c..49dc51b 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java +@@ -10,10 +10,14 @@ + *******************************************************************************/ + package org.eclipse.help.internal.search; + import java.io.*; +-import java.util.HashSet; +-import java.util.Set; ++import java.util.ArrayList; ++import java.util.List; + + import org.apache.lucene.analysis.*; ++import org.apache.lucene.analysis.en.*; ++import org.apache.lucene.analysis.core.*; ++import org.apache.lucene.analysis.util.*; ++import org.apache.lucene.util.Version; + /** + * Lucene Analyzer for English. LowerCaseTokenizer->StopFilter->PorterStemFilter + */ +@@ -25,18 +29,22 @@ public final class Analyzer_en extends Analyzer { + super(); + } + /** +- * Creates a TokenStream which tokenizes all the text in the provided ++ * Creates a TokenStreamComponents which tokenizes all the text in the provided + * Reader. + */ +- public final TokenStream tokenStream(String fieldName, Reader reader) { +- return new PorterStemFilter(new StopFilter(false, new LowerCaseAndDigitsTokenizer(reader), getStopWords(), false)); ++ @Override ++ public final TokenStreamComponents createComponents(String fieldName, Reader reader) { ++ CharArraySet stopWordsSet = StopFilter.makeStopSet(Version.LUCENE_47, getStopWords(), true); ++ Tokenizer source = new LowerCaseAndDigitsTokenizer(reader); ++ TokenStream filter = new PorterStemFilter(new StopFilter(Version.LUCENE_47, source, stopWordsSet)); ++ return new TokenStreamComponents(source, filter); + } + +- private Set stopWords; ++ private List stopWords; + +- private Set getStopWords() { ++ private List getStopWords() { + if ( stopWords == null ) { +- stopWords = new HashSet(); ++ stopWords = new ArrayList(); + for (int i = 0; i < STOP_WORDS.length; i++) { + stopWords.add(STOP_WORDS[i]); + } +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java +index 50258d2..f72615f 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/DefaultAnalyzer.java +@@ -15,8 +15,10 @@ import java.util.StringTokenizer; + import com.ibm.icu.text.BreakIterator; + + import org.apache.lucene.analysis.Analyzer; +-import org.apache.lucene.analysis.LowerCaseFilter; ++import org.apache.lucene.analysis.core.LowerCaseFilter; ++import org.apache.lucene.analysis.Tokenizer; + import org.apache.lucene.analysis.TokenStream; ++import org.apache.lucene.util.Version; + + import org.eclipse.help.internal.base.HelpBasePlugin; + +@@ -82,11 +84,14 @@ public final class DefaultAnalyzer extends Analyzer { + } + + /** +- * Creates a TokenStream which tokenizes all the text in the provided ++ * Creates a TokenStreamComponents which tokenizes all the text in the provided + * Reader. + */ +- public final TokenStream tokenStream(String fieldName, Reader reader) { +- return new LowerCaseFilter(new WordTokenStream(fieldName, reader, locale)); ++ @Override ++ public final TokenStreamComponents createComponents(String fieldName, Reader reader) { ++ Tokenizer source = new WordTokenStream(fieldName, reader, locale); ++ LowerCaseFilter filter = new LowerCaseFilter(Version.LUCENE_47, source); ++ return new TokenStreamComponents(source, filter); + } + + /** +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java +index 0dd3943..d101ae9 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/LowerCaseAndDigitsTokenizer.java +@@ -12,7 +12,8 @@ package org.eclipse.help.internal.search; + + import java.io.*; + +-import org.apache.lucene.analysis.*; ++import org.apache.lucene.analysis.util.*; ++import org.apache.lucene.util.Version; + + /** + * Tokenizer breaking words around letters or digits. +@@ -20,13 +21,14 @@ import org.apache.lucene.analysis.*; + public class LowerCaseAndDigitsTokenizer extends CharTokenizer { + + public LowerCaseAndDigitsTokenizer(Reader input) { +- super(input); ++ super(Version.LUCENE_47, input); + } + protected char normalize(char c) { + return Character.toLowerCase(c); + } + +- protected boolean isTokenChar(char c) { ++ @Override ++ public boolean isTokenChar(int c) { + return Character.isLetterOrDigit(c); + } + +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java +index 00c2799..4a3d34f 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java +@@ -243,10 +243,10 @@ public class QueryBuilder { + private List analyzeText(Analyzer analyzer, String fieldName, String text) { + List words = new ArrayList(1); + Reader reader = new StringReader(text); +- TokenStream tStream = analyzer.tokenStream(fieldName, reader); + +- CharTermAttribute termAttribute = (CharTermAttribute) tStream.getAttribute(CharTermAttribute.class); + try { ++ TokenStream tStream = analyzer.tokenStream(fieldName, reader); ++ CharTermAttribute termAttribute = (CharTermAttribute) tStream.getAttribute(CharTermAttribute.class); + while (tStream.incrementToken()) { + String term = termAttribute.toString(); + words.add(term); +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java +index e860c8d..0d5a8b6 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java +@@ -31,13 +31,20 @@ import java.util.Set; + import java.util.zip.ZipEntry; + import java.util.zip.ZipInputStream; + ++import org.apache.lucene.analysis.Analyzer; ++import org.apache.lucene.analysis.miscellaneous.LimitTokenCountAnalyzer; + import org.apache.lucene.document.Document; + import org.apache.lucene.document.Field; ++import org.apache.lucene.index.AtomicReader; ++import org.apache.lucene.index.DirectoryReader; ++import org.apache.lucene.index.DocsEnum; + import org.apache.lucene.index.IndexReader; + import org.apache.lucene.index.IndexWriter; ++import org.apache.lucene.index.IndexWriterConfig; ++import org.apache.lucene.index.IndexWriterConfig.OpenMode; ++import org.apache.lucene.index.LogDocMergePolicy; ++import org.apache.lucene.index.SlowCompositeReaderWrapper; + import org.apache.lucene.index.Term; +-import org.apache.lucene.index.TermDocs; +-import org.apache.lucene.index.IndexWriter.MaxFieldLength; + import org.apache.lucene.search.BooleanQuery; + import org.apache.lucene.search.IndexSearcher; + import org.apache.lucene.search.Query; +@@ -265,10 +272,10 @@ public class SearchIndex implements IHelpSearchIndex { + if (iw != null) { + iw.close(); + } +- boolean create = false; ++ OpenMode create = OpenMode.APPEND; + if (!indexDir.exists() || !isLuceneCompatible() || !isAnalyzerCompatible() + || inconsistencyFile.exists() && firstOperation) { +- create = true; ++ create = OpenMode.CREATE; + indexDir.mkdirs(); + if (!indexDir.exists()) + return false; // unable to setup index directory +@@ -276,9 +283,13 @@ public class SearchIndex implements IHelpSearchIndex { + indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir); + indexedDocs.restore(); + setInconsistent(true); +- MaxFieldLength max = new MaxFieldLength(1000000); +- iw = new IndexWriter(luceneDirectory, analyzerDescriptor.getAnalyzer(), create, max); +- iw.setMergeFactor(20); ++ Analyzer wrapper = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(), 1000000); ++ IndexWriterConfig iconfig = new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_47, wrapper); ++ iconfig.setOpenMode(create); ++ LogDocMergePolicy policy = new LogDocMergePolicy(); ++ policy.setMergeFactor(20); ++ iconfig.setMergePolicy(policy); ++ iw = new IndexWriter(luceneDirectory, iconfig); + return true; + } catch (IOException e) { + HelpBasePlugin.logError("Exception occurred in search indexing at beginAddBatch.", e); //$NON-NLS-1$ +@@ -297,7 +308,7 @@ public class SearchIndex implements IHelpSearchIndex { + indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir); + indexedDocs.restore(); + setInconsistent(true); +- ir = IndexReader.open(luceneDirectory, false); ++ ir = DirectoryReader.open(luceneDirectory); + return true; + } catch (IOException e) { + HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$ +@@ -313,7 +324,7 @@ public class SearchIndex implements IHelpSearchIndex { + if (ir != null) { + ir.close(); + } +- ir = IndexReader.open(luceneDirectory, false); ++ ir = DirectoryReader.open(luceneDirectory); + return true; + } catch (IOException e) { + HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$ +@@ -331,7 +342,7 @@ public class SearchIndex implements IHelpSearchIndex { + public IStatus removeDocument(String name) { + Term term = new Term(FIELD_NAME, name); + try { +- ir.deleteDocuments(term); ++ iw.deleteDocuments(term); + indexedDocs.remove(name); + } catch (IOException e) { + return new Status(IStatus.ERROR, HelpBasePlugin.PLUGIN_ID, IStatus.ERROR, +@@ -350,7 +361,7 @@ public class SearchIndex implements IHelpSearchIndex { + if (iw == null) + return false; + if (optimize) +- iw.optimize(); ++ iw.forceMerge(1); + iw.close(); + iw = null; + // save the update info: +@@ -369,7 +380,7 @@ public class SearchIndex implements IHelpSearchIndex { + * know about this change. Close it so that it gets reloaded next search. + */ + if (searcher != null) { +- searcher.close(); ++ searcher.getIndexReader().close(); + searcher = null; + } + return true; +@@ -401,7 +412,7 @@ public class SearchIndex implements IHelpSearchIndex { + * know about this change. Close it so that it gets reloaded next search. + */ + if (searcher != null) { +- searcher.close(); ++ searcher.getIndexReader().close(); + searcher = null; + } + return true; +@@ -505,8 +516,8 @@ public class SearchIndex implements IHelpSearchIndex { + } + Directory[] luceneDirs = dirList.toArray(new Directory[dirList.size()]); + try { +- iw.addIndexesNoOptimize(luceneDirs); +- iw.optimize(); ++ iw.addIndexes(luceneDirs); ++ iw.forceMerge(1); + } catch (IOException ioe) { + HelpBasePlugin.logError("Merging search indexes failed.", ioe); //$NON-NLS-1$ + return new HashMap(); +@@ -515,18 +526,19 @@ public class SearchIndex implements IHelpSearchIndex { + } + + public IStatus removeDuplicates(String name, String[] index_paths) { +- TermDocs hrefDocs = null; +- TermDocs indexDocs = null; +- Term hrefTerm = new Term(FIELD_NAME, name); + try { ++ AtomicReader ar = SlowCompositeReaderWrapper.wrap(ir); ++ DocsEnum hrefDocs = null; ++ DocsEnum indexDocs = null; ++ Term hrefTerm = new Term(FIELD_NAME, name); + for (int i = 0; i < index_paths.length; i++) { + Term indexTerm = new Term(FIELD_INDEX_ID, index_paths[i]); + if (i == 0) { +- hrefDocs = ir.termDocs(hrefTerm); +- indexDocs = ir.termDocs(indexTerm); ++ hrefDocs = ar.termDocsEnum(hrefTerm); ++ indexDocs = ar.termDocsEnum(indexTerm); + } else { +- hrefDocs.seek(hrefTerm); +- indexDocs.seek(indexTerm); ++ hrefDocs = ar.termDocsEnum(hrefTerm); ++ indexDocs = ar.termDocsEnum(indexTerm); + } + removeDocuments(hrefDocs, indexDocs); + } +@@ -535,19 +547,6 @@ public class SearchIndex implements IHelpSearchIndex { + "IO exception occurred while removing duplicates of document " + name //$NON-NLS-1$ + + " from index " + indexDir.getAbsolutePath() + ".", //$NON-NLS-1$ //$NON-NLS-2$ + ioe); +- } finally { +- if (hrefDocs != null) { +- try { +- hrefDocs.close(); +- } catch (IOException e) { +- } +- } +- if (indexDocs != null) { +- try { +- indexDocs.close(); +- } catch (IOException e) { +- } +- } + } + return Status.OK_STATUS; + } +@@ -559,33 +558,33 @@ public class SearchIndex implements IHelpSearchIndex { + * @param docs2 + * @throws IOException + */ +- private void removeDocuments(TermDocs doc1, TermDocs docs2) throws IOException { +- if (!doc1.next()) { ++ private void removeDocuments(DocsEnum doc1, DocsEnum docs2) throws IOException { ++ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) { + return; + } +- if (!docs2.next()) { ++ if (docs2.nextDoc() == DocsEnum.NO_MORE_DOCS) { + return; + } + while (true) { +- if (doc1.doc() < docs2.doc()) { +- if (!doc1.skipTo(docs2.doc())) { +- if (!doc1.next()) { ++ if (doc1.docID() < docs2.docID()) { ++ if (doc1.advance(docs2.docID()) == DocsEnum.NO_MORE_DOCS) { ++ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) { + return; + } + } +- } else if (doc1.doc() > docs2.doc()) { +- if (!docs2.skipTo(doc1.doc())) { +- if (!doc1.next()) { ++ } else if (doc1.docID() > docs2.docID()) { ++ if (docs2.advance(doc1.docID()) == DocsEnum.NO_MORE_DOCS) { ++ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) { + return; + } + } + } +- if (doc1.doc() == docs2.doc()) { +- ir.deleteDocument(doc1.doc()); +- if (!doc1.next()) { ++ if (doc1.docID() == docs2.docID()) { ++ iw.tryDeleteDocument(ir, doc1.docID()); ++ if (doc1.nextDoc() == DocsEnum.NO_MORE_DOCS) { + return; + } +- if (!docs2.next()) { ++ if (docs2.nextDoc() == DocsEnum.NO_MORE_DOCS) { + return; + } + } +@@ -792,7 +791,7 @@ public class SearchIndex implements IHelpSearchIndex { + public void openSearcher() throws IOException { + synchronized (searcherCreateLock) { + if (searcher == null) { +- searcher = new IndexSearcher(luceneDirectory, false); ++ searcher = new IndexSearcher(DirectoryReader.open(luceneDirectory)); + } + } + } +@@ -814,7 +813,7 @@ public class SearchIndex implements IHelpSearchIndex { + // + if (searcher != null) { + try { +- searcher.close(); ++ searcher.getIndexReader().close(); + } catch (IOException ioe) { + } + } +@@ -888,9 +887,11 @@ public class SearchIndex implements IHelpSearchIndex { + */ + private void cleanOldIndex() { + IndexWriter cleaner = null; +- MaxFieldLength max = new MaxFieldLength(10000); + try { +- cleaner = new IndexWriter(luceneDirectory, analyzerDescriptor.getAnalyzer(), true, max); ++ Analyzer wrapper = new LimitTokenCountAnalyzer(analyzerDescriptor.getAnalyzer(), 10000); ++ IndexWriterConfig iconfig = new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_47, wrapper); ++ iconfig.setOpenMode(OpenMode.CREATE); ++ cleaner = new IndexWriter(luceneDirectory, iconfig); + } catch (IOException ioe) { + } finally { + try { +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java +index d0a7bb7..df31d89 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/SmartAnalyzer.java +@@ -18,7 +18,7 @@ import org.apache.lucene.analysis.*; + * Smart Analyzer. Chooses underlying implementation based on the field which + * text is analyzed. + */ +-public final class SmartAnalyzer extends Analyzer { ++public final class SmartAnalyzer extends AnalyzerWrapper { + Analyzer pluggedInAnalyzer; + Analyzer exactAnalyzer; + +@@ -31,14 +31,14 @@ public final class SmartAnalyzer extends Analyzer { + this.exactAnalyzer = new DefaultAnalyzer(locale); + } + /** +- * Creates a TokenStream which tokenizes all the text in the provided +- * Reader. Delegates to DefaultAnalyzer when field used to search for exact ++ * Delegates to DefaultAnalyzer when field used to search for exact + * match, and to plugged-in analyzer for other fields. + */ +- public final TokenStream tokenStream(String fieldName, Reader reader) { ++ @Override ++ public final Analyzer getWrappedAnalyzer(String fieldName) { + if (fieldName != null && fieldName.startsWith("exact_")) { //$NON-NLS-1$ +- return exactAnalyzer.tokenStream(fieldName, reader); ++ return exactAnalyzer; + } +- return pluggedInAnalyzer.tokenStream(fieldName, reader); ++ return pluggedInAnalyzer; + } + } +diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java +index 1360599..17ddbe4 100644 +--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java ++++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/search/WordTokenStream.java +@@ -35,6 +35,7 @@ public final class WordTokenStream extends Tokenizer { + * Constructor + */ + public WordTokenStream(String fieldName, Reader reader, Locale locale) { ++ super(reader); + this.reader = reader; + boundary = BreakIterator.getWordInstance(locale); + diff --git a/eclipse.spec b/eclipse.spec index d89f063..1c1c8d8 100644 --- a/eclipse.spec +++ b/eclipse.spec @@ -5,7 +5,7 @@ # Set to 1 to build Eclipse without dependency to eclipse-pde # Some parts (help) will not be built, and second run will be required, # but this is a way to bootstrap Eclipse on secondary archs. -%global bootstrap 0 +%global bootstrap 1 Epoch: 1 @@ -20,7 +20,7 @@ Epoch: 1 %global eclipse_version %{eclipse_majmin}.%{eclipse_micro} %global installation_loc %{_libdir}/%{pkg_name} -%global _jetty_version 9 +%global _jetty_version 9.1.3 %{?scl:%global _jetty_version 8} %ifarch %{ix86} @@ -55,7 +55,7 @@ fi; Summary: An open, extensible IDE Name: %{?scl_prefix}eclipse Version: %{eclipse_version} -Release: 24%{?dist} +Release: 24.1%{?dist} License: EPL Group: Development/Tools URL: http://www.eclipse.org/ @@ -128,6 +128,7 @@ Patch20: %{pkg_name}-bug-408505.patch Patch21: %{pkg_name}-bug-386377.patch Patch22: %{pkg_name}-servlet-3.1.patch +Patch23: %{pkg_name}-lucene-4.patch BuildRequires: ant >= 1.8.3 BuildRequires: rsync @@ -166,8 +167,7 @@ BuildRequires: osgi(org.eclipse.jetty.continuation) >= %{_jetty_version} BuildRequires: osgi(org.eclipse.jetty.io) >= %{_jetty_version} BuildRequires: osgi(org.eclipse.jetty.security) >= %{_jetty_version} BuildRequires: osgi(org.eclipse.jetty.servlet) >= %{_jetty_version} -BuildRequires: lucene >= 2.9.4-8 -BuildRequires: lucene-contrib >= 2.9.4-8 +BuildRequires: lucene >= 4.0.0-3 BuildRequires: junit >= 4.10-5 BuildRequires: hamcrest >= 0:1.1-11 BuildRequires: %{?scl_prefix}sat4j >= 2.3.5-1 @@ -243,8 +243,7 @@ Requires: osgi(org.eclipse.jetty.io) >= %{_jetty_version} Requires: osgi(org.eclipse.jetty.security) >= %{_jetty_version} Requires: osgi(org.eclipse.jetty.servlet) >= %{_jetty_version} Requires: jsch >= 0.1.46-2 -Requires: lucene >= 2.9.4-8 -Requires: lucene-contrib >= 2.9.4-8 +Requires: lucene >= 4.0.0-3 Requires: %{?scl_prefix}sat4j >= 2.3.5-1 Requires: sac >= 1.3-12 Requires: xml-commons-apis >= 1.4.01-12 @@ -312,7 +311,7 @@ Eclipse Tests. tar --strip-components=1 -xf %{SOURCE1} -%patch0 +%patch0 -p1 %patch1 %patch2 %patch3 @@ -337,6 +336,7 @@ pushd rt.equinox.framework %patch21 -p1 popd %patch22 +%patch23 -p1 #Disable as many things as possible to make the build faster. We care only for Eclipse. %pom_disable_module platform.sdk eclipse.platform.releng.tychoeclipsebuilder @@ -1019,6 +1019,10 @@ fi %{_libdir}/%{pkg_name}/plugins/org.eclipse.osgi.util_* %changelog +* Thu Mar 06 2014 Roland Grunberg - 1:4.3.1-24.1 +- Update to Lucene 4. +- Enable bootstrap build to work around broken UA (Help) bundles. + * Thu Mar 6 2014 Alexander Kurtakov 1:4.3.1-24 - New e-b snapshot adapted to lucene changes.