Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 950043) +++ lucene/CHANGES.txt (working copy) @@ -77,6 +77,9 @@ * LUCENE-2480: Though not a change in backwards compatibility policy, pre-3.0 indexes are no longer supported. You should upgrade to 3.x first, then run optimize(), or reindex. (Shai Erera, Earwin Burrfoot) + +* LUCENE-2484: Removed deprecated TermAttribute. Use CharTermAttribute + and TermToBytesRefAttribute instead. Changes in runtime behavior Index: lucene/src/java/org/apache/lucene/analysis/NumericTokenStream.java =================================================================== --- lucene/src/java/org/apache/lucene/analysis/NumericTokenStream.java (revision 950043) +++ lucene/src/java/org/apache/lucene/analysis/NumericTokenStream.java (working copy) @@ -117,15 +117,12 @@ this.delegate = delegate; } - @Override @SuppressWarnings("deprecation") + @Override public AttributeImpl createAttributeInstance(Class attClass) { if (attClass == NumericTermAttribute.class) return new NumericTermAttributeImpl(ts); - if (attClass.isAssignableFrom(CharTermAttribute.class) || - // TODO: remove in 4.0 (deprecated class, also remove the suppress above): - attClass.isAssignableFrom(org.apache.lucene.analysis.tokenattributes.TermAttribute.class) - ) - throw new IllegalArgumentException("NumericTokenStream does not support CharTermAttribute/TermAttribute."); + if (attClass.isAssignableFrom(CharTermAttribute.class)) + throw new IllegalArgumentException("NumericTokenStream does not support CharTermAttribute."); return delegate.createAttributeInstance(attClass); } } Index: lucene/src/java/org/apache/lucene/analysis/Token.java =================================================================== --- lucene/src/java/org/apache/lucene/analysis/Token.java (revision 950043) +++ lucene/src/java/org/apache/lucene/analysis/Token.java (working copy) @@ -17,12 +17,11 @@ * limitations under the License. */ -import org.apache.lucene.analysis.tokenattributes.TermAttributeImpl; +import org.apache.lucene.analysis.tokenattributes.CharTermAttributeImpl; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.FlagsAttribute; import org.apache.lucene.analysis.tokenattributes.PayloadAttribute; import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute; -import org.apache.lucene.analysis.tokenattributes.TermAttribute; import org.apache.lucene.analysis.tokenattributes.TypeAttribute; import org.apache.lucene.index.Payload; import org.apache.lucene.index.TermPositions; // for javadoc @@ -119,8 +118,7 @@

@see org.apache.lucene.index.Payload */ -// TODO: change superclass to CharTermAttribute in 4.0! Maybe deprecate the whole class? -public class Token extends TermAttributeImpl +public class Token extends CharTermAttributeImpl implements TypeAttribute, PositionIncrementAttribute, FlagsAttribute, OffsetAttribute, PayloadAttribute { Index: lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java =================================================================== --- lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java (revision 950043) +++ lucene/src/java/org/apache/lucene/analysis/tokenattributes/CharTermAttributeImpl.java (working copy) @@ -29,17 +29,11 @@ /** * The term text of a Token. */ -public class CharTermAttributeImpl extends AttributeImpl implements CharTermAttribute, TermAttribute, TermToBytesRefAttribute, Cloneable, Serializable { +public class CharTermAttributeImpl extends AttributeImpl implements CharTermAttribute, TermToBytesRefAttribute, Cloneable, Serializable { private static int MIN_BUFFER_SIZE = 10; private char[] termBuffer = new char[ArrayUtil.oversize(MIN_BUFFER_SIZE, RamUsageEstimator.NUM_BYTES_CHAR)]; private int termLength = 0; - - @Deprecated - public String term() { - // don't delegate to toString() here! - return new String(termBuffer, 0, termLength); - } public final void copyBuffer(char[] buffer, int offset, int length) { growTermBuffer(length); @@ -47,36 +41,9 @@ termLength = length; } - @Deprecated - public void setTermBuffer(char[] buffer, int offset, int length) { - copyBuffer(buffer, offset, length); - } - - @Deprecated - public void setTermBuffer(String buffer) { - int length = buffer.length(); - growTermBuffer(length); - buffer.getChars(0, length, termBuffer, 0); - termLength = length; - } - - @Deprecated - public void setTermBuffer(String buffer, int offset, int length) { - assert offset <= buffer.length(); - assert offset + length <= buffer.length(); - growTermBuffer(length); - buffer.getChars(offset, offset + length, termBuffer, 0); - termLength = length; - } - public final char[] buffer() { return termBuffer; } - - @Deprecated - public char[] termBuffer() { - return termBuffer; - } public final char[] resizeBuffer(int newSize) { if(termBuffer.length < newSize){ @@ -88,11 +55,6 @@ } return termBuffer; } - - @Deprecated - public char[] resizeTermBuffer(int newSize) { - return resizeBuffer(newSize); - } private void growTermBuffer(int newSize) { if(termBuffer.length < newSize){ @@ -101,11 +63,6 @@ termBuffer = new char[ArrayUtil.oversize(newSize, RamUsageEstimator.NUM_BYTES_CHAR)]; } } - - @Deprecated - public int termLength() { - return termLength; - } public final CharTermAttribute setLength(int length) { if (length > termBuffer.length) @@ -119,11 +76,6 @@ return this; } - @Deprecated - public void setTermLength(int length) { - setLength(length); - } - // *** TermToBytesRefAttribute interface *** public final int toBytesRef(BytesRef target) { return UnicodeUtil.UTF16toUTF8WithHash(termBuffer, 0, termLength, target); @@ -292,13 +244,8 @@ @Override public void copyTo(AttributeImpl target) { - if (target instanceof CharTermAttribute) { - CharTermAttribute t = (CharTermAttribute) target; - t.copyBuffer(termBuffer, 0, termLength); - } else { - TermAttribute t = (TermAttribute) target; - t.setTermBuffer(termBuffer, 0, termLength); - } + CharTermAttribute t = (CharTermAttribute) target; + t.copyBuffer(termBuffer, 0, termLength); } } Index: lucene/src/java/org/apache/lucene/analysis/tokenattributes/TermAttribute.java =================================================================== --- lucene/src/java/org/apache/lucene/analysis/tokenattributes/TermAttribute.java (revision 950043) +++ lucene/src/java/org/apache/lucene/analysis/tokenattributes/TermAttribute.java (working copy) @@ -1,93 +0,0 @@ -package org.apache.lucene.analysis.tokenattributes; - -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import org.apache.lucene.util.Attribute; - -/** - * The term text of a Token. - * @deprecated Use {@link CharTermAttribute} instead. - */ -@Deprecated -public interface TermAttribute extends Attribute { - /** Returns the Token's term text. - * - * This method has a performance penalty - * because the text is stored internally in a char[]. If - * possible, use {@link #termBuffer()} and {@link - * #termLength()} directly instead. If you really need a - * String, use this method, which is nothing more than - * a convenience call to new String(token.termBuffer(), 0, token.termLength()) - */ - public String term(); - - /** Copies the contents of buffer, starting at offset for - * length characters, into the termBuffer array. - * @param buffer the buffer to copy - * @param offset the index in the buffer of the first character to copy - * @param length the number of characters to copy - */ - public void setTermBuffer(char[] buffer, int offset, int length); - - /** Copies the contents of buffer into the termBuffer array. - * @param buffer the buffer to copy - */ - public void setTermBuffer(String buffer); - - /** Copies the contents of buffer, starting at offset and continuing - * for length characters, into the termBuffer array. - * @param buffer the buffer to copy - * @param offset the index in the buffer of the first character to copy - * @param length the number of characters to copy - */ - public void setTermBuffer(String buffer, int offset, int length); - - /** Returns the internal termBuffer character array which - * you can then directly alter. If the array is too - * small for your token, use {@link - * #resizeTermBuffer(int)} to increase it. After - * altering the buffer be sure to call {@link - * #setTermLength} to record the number of valid - * characters that were placed into the termBuffer. */ - public char[] termBuffer(); - - /** Grows the termBuffer to at least size newSize, preserving the - * existing content. Note: If the next operation is to change - * the contents of the term buffer use - * {@link #setTermBuffer(char[], int, int)}, - * {@link #setTermBuffer(String)}, or - * {@link #setTermBuffer(String, int, int)} - * to optimally combine the resize with the setting of the termBuffer. - * @param newSize minimum size of the new termBuffer - * @return newly created termBuffer with length >= newSize - */ - public char[] resizeTermBuffer(int newSize); - - /** Return number of valid characters (length of the term) - * in the termBuffer array. */ - public int termLength(); - - /** Set number of valid characters (length of the term) in - * the termBuffer array. Use this to truncate the termBuffer - * or to synchronize with external manipulation of the termBuffer. - * Note: to grow the size of the array, - * use {@link #resizeTermBuffer(int)} first. - * @param length the truncated length - */ - public void setTermLength(int length); -} Index: lucene/src/java/org/apache/lucene/analysis/tokenattributes/TermAttributeImpl.java =================================================================== --- lucene/src/java/org/apache/lucene/analysis/tokenattributes/TermAttributeImpl.java (revision 950043) +++ lucene/src/java/org/apache/lucene/analysis/tokenattributes/TermAttributeImpl.java (working copy) @@ -1,27 +0,0 @@ -package org.apache.lucene.analysis.tokenattributes; - -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The term text of a Token. - * @deprecated This class is only available for AttributeSource - * to be able to load an old TermAttribute implementation class. - */ -@Deprecated -public class TermAttributeImpl extends CharTermAttributeImpl { -} Index: lucene/src/java/org/apache/lucene/index/TermsHashPerField.java =================================================================== --- lucene/src/java/org/apache/lucene/index/TermsHashPerField.java (revision 950043) +++ lucene/src/java/org/apache/lucene/index/TermsHashPerField.java (working copy) @@ -21,7 +21,6 @@ import java.util.Arrays; import java.util.Comparator; -import org.apache.lucene.analysis.tokenattributes.TermAttribute; import org.apache.lucene.analysis.tokenattributes.TermToBytesRefAttribute; import org.apache.lucene.document.Fieldable; import org.apache.lucene.util.BytesRef; @@ -290,14 +289,7 @@ @Override void start(Fieldable f) { - if (fieldState.attributeSource.hasAttribute(TermToBytesRefAttribute.class)) { - termAtt = fieldState.attributeSource.getAttribute(TermToBytesRefAttribute.class); - } else if (fieldState.attributeSource.hasAttribute(TermAttribute.class)) { - perThread.legacyTermAttributeWrapper.setTermAttribute(fieldState.attributeSource.getAttribute(TermAttribute.class)); - termAtt = perThread.legacyTermAttributeWrapper; - } else { - throw new IllegalArgumentException("Could not find a term attribute (that implements TermToBytesRefAttribute) in the TokenStream"); - } + termAtt = fieldState.attributeSource.getAttribute(TermToBytesRefAttribute.class); consumer.start(f); if (nextPerField != null) { nextPerField.start(f); Index: lucene/src/java/org/apache/lucene/index/TermsHashPerThread.java =================================================================== --- lucene/src/java/org/apache/lucene/index/TermsHashPerThread.java (revision 950043) +++ lucene/src/java/org/apache/lucene/index/TermsHashPerThread.java (working copy) @@ -19,8 +19,6 @@ import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.UnicodeUtil; -import org.apache.lucene.analysis.tokenattributes.TermAttribute; -import org.apache.lucene.analysis.tokenattributes.TermToBytesRefAttribute; import java.io.IOException; @@ -42,23 +40,6 @@ // Used by perField: final BytesRef utf8 = new BytesRef(10); - - final LegacyTermAttributeWrapper legacyTermAttributeWrapper = new LegacyTermAttributeWrapper(); - - /** This class is used to wrap a legacy TermAttribute without support for {@link TermToBytesRefAttribute}. */ - @Deprecated - static class LegacyTermAttributeWrapper implements TermToBytesRefAttribute { - private TermAttribute termAtt = null; - - void setTermAttribute(TermAttribute termAtt) { - this.termAtt = termAtt; - } - - public int toBytesRef(BytesRef target) { - assert target.bytes != null : "target byteref must be != null, because utf8 is used here"; - return UnicodeUtil.UTF16toUTF8WithHash(termAtt.termBuffer(), 0, termAtt.termLength(), target); - } - } public TermsHashPerThread(DocInverterPerThread docInverterPerThread, final TermsHash termsHash, final TermsHash nextTermsHash, final TermsHashPerThread primaryPerThread) { docState = docInverterPerThread.docState; Index: lucene/src/test/org/apache/lucene/analysis/TestToken.java =================================================================== --- lucene/src/test/org/apache/lucene/analysis/TestToken.java (revision 950043) +++ lucene/src/test/org/apache/lucene/analysis/TestToken.java (working copy) @@ -34,36 +34,36 @@ public void testCtor() throws Exception { Token t = new Token(); char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, content.length); - assertNotSame(t.termBuffer(), content); + t.copyBuffer(content, 0, content.length); + assertNotSame(t.buffer(), content); assertEquals(0, t.startOffset()); assertEquals(0, t.endOffset()); - assertEquals("hello", t.term()); + assertEquals("hello", t.toString()); assertEquals("word", t.type()); assertEquals(0, t.getFlags()); t = new Token(6, 22); - t.setTermBuffer(content, 0, content.length); - assertEquals("hello", t.term()); + t.copyBuffer(content, 0, content.length); assertEquals("hello", t.toString()); + assertEquals("hello", t.toString()); assertEquals(6, t.startOffset()); assertEquals(22, t.endOffset()); assertEquals("word", t.type()); assertEquals(0, t.getFlags()); t = new Token(6, 22, 7); - t.setTermBuffer(content, 0, content.length); - assertEquals("hello", t.term()); + t.copyBuffer(content, 0, content.length); assertEquals("hello", t.toString()); + assertEquals("hello", t.toString()); assertEquals(6, t.startOffset()); assertEquals(22, t.endOffset()); assertEquals("word", t.type()); assertEquals(7, t.getFlags()); t = new Token(6, 22, "junk"); - t.setTermBuffer(content, 0, content.length); - assertEquals("hello", t.term()); + t.copyBuffer(content, 0, content.length); assertEquals("hello", t.toString()); + assertEquals("hello", t.toString()); assertEquals(6, t.startOffset()); assertEquals(22, t.endOffset()); assertEquals("junk", t.type()); @@ -73,12 +73,12 @@ public void testResize() { Token t = new Token(); char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, content.length); + t.copyBuffer(content, 0, content.length); for (int i = 0; i < 2000; i++) { - t.resizeTermBuffer(i); - assertTrue(i <= t.termBuffer().length); - assertEquals("hello", t.term()); + t.resizeBuffer(i); + assertTrue(i <= t.buffer().length); + assertEquals("hello", t.toString()); } } @@ -88,86 +88,73 @@ for (int i = 0; i < 20; i++) { char[] content = buf.toString().toCharArray(); - t.setTermBuffer(content, 0, content.length); - assertEquals(buf.length(), t.termLength()); - assertEquals(buf.toString(), t.term()); + t.copyBuffer(content, 0, content.length); + assertEquals(buf.length(), t.length()); + assertEquals(buf.toString(), t.toString()); buf.append(buf.toString()); } - assertEquals(1048576, t.termLength()); + assertEquals(1048576, t.length()); - // now as a string, first variant - t = new Token(); - buf = new StringBuilder("ab"); - for (int i = 0; i < 20; i++) - { - String content = buf.toString(); - t.setTermBuffer(content, 0, content.length()); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); - buf.append(content); - } - assertEquals(1048576, t.termLength()); - // now as a string, second variant t = new Token(); buf = new StringBuilder("ab"); for (int i = 0; i < 20; i++) { + t.setEmpty().append(buf); String content = buf.toString(); - t.setTermBuffer(content); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); + assertEquals(content.length(), t.length()); + assertEquals(content, t.toString()); buf.append(content); } - assertEquals(1048576, t.termLength()); + assertEquals(1048576, t.length()); // Test for slow growth to a long term t = new Token(); buf = new StringBuilder("a"); for (int i = 0; i < 20000; i++) { + t.setEmpty().append(buf); String content = buf.toString(); - t.setTermBuffer(content); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); + assertEquals(content.length(), t.length()); + assertEquals(content, t.toString()); buf.append("a"); } - assertEquals(20000, t.termLength()); + assertEquals(20000, t.length()); // Test for slow growth to a long term t = new Token(); buf = new StringBuilder("a"); for (int i = 0; i < 20000; i++) { + t.setEmpty().append(buf); String content = buf.toString(); - t.setTermBuffer(content); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); + assertEquals(content.length(), t.length()); + assertEquals(content, t.toString()); buf.append("a"); } - assertEquals(20000, t.termLength()); + assertEquals(20000, t.length()); } public void testToString() throws Exception { char[] b = {'a', 'l', 'o', 'h', 'a'}; Token t = new Token("", 0, 5); - t.setTermBuffer(b, 0, 5); + t.copyBuffer(b, 0, 5); assertEquals("aloha", t.toString()); - t.setTermBuffer("hi there"); + t.setEmpty().append("hi there"); assertEquals("hi there", t.toString()); } public void testTermBufferEquals() throws Exception { Token t1a = new Token(); char[] content1a = "hello".toCharArray(); - t1a.setTermBuffer(content1a, 0, 5); + t1a.copyBuffer(content1a, 0, 5); Token t1b = new Token(); char[] content1b = "hello".toCharArray(); - t1b.setTermBuffer(content1b, 0, 5); + t1b.copyBuffer(content1b, 0, 5); Token t2 = new Token(); char[] content2 = "hello2".toCharArray(); - t2.setTermBuffer(content2, 0, 6); + t2.copyBuffer(content2, 0, 6); assertTrue(t1a.equals(t1b)); assertFalse(t1a.equals(t2)); assertFalse(t2.equals(t1b)); @@ -175,27 +162,27 @@ public void testMixedStringArray() throws Exception { Token t = new Token("hello", 0, 5); - assertEquals(t.termLength(), 5); - assertEquals(t.term(), "hello"); - t.setTermBuffer("hello2"); - assertEquals(t.termLength(), 6); - assertEquals(t.term(), "hello2"); - t.setTermBuffer("hello3".toCharArray(), 0, 6); - assertEquals(t.term(), "hello3"); + assertEquals(t.length(), 5); + assertEquals(t.toString(), "hello"); + t.setEmpty().append("hello2"); + assertEquals(t.length(), 6); + assertEquals(t.toString(), "hello2"); + t.copyBuffer("hello3".toCharArray(), 0, 6); + assertEquals(t.toString(), "hello3"); - char[] buffer = t.termBuffer(); + char[] buffer = t.buffer(); buffer[1] = 'o'; - assertEquals(t.term(), "hollo3"); + assertEquals(t.toString(), "hollo3"); } public void testClone() throws Exception { Token t = new Token(0, 5); char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, 5); - char[] buf = t.termBuffer(); + t.copyBuffer(content, 0, 5); + char[] buf = t.buffer(); Token copy = (Token) TestSimpleAttributeImpls.assertCloneIsEqual(t); - assertEquals(t.term(), copy.term()); - assertNotSame(buf, copy.termBuffer()); + assertEquals(t.toString(), copy.toString()); + assertNotSame(buf, copy.buffer()); Payload pl = new Payload(new byte[]{1,2,3,4}); t.setPayload(pl); @@ -207,16 +194,16 @@ public void testCopyTo() throws Exception { Token t = new Token(); Token copy = (Token) TestSimpleAttributeImpls.assertCopyIsEqual(t); - assertEquals("", t.term()); - assertEquals("", copy.term()); + assertEquals("", t.toString()); + assertEquals("", copy.toString()); t = new Token(0, 5); char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, 5); - char[] buf = t.termBuffer(); + t.copyBuffer(content, 0, 5); + char[] buf = t.buffer(); copy = (Token) TestSimpleAttributeImpls.assertCopyIsEqual(t); - assertEquals(t.term(), copy.term()); - assertNotSame(buf, copy.termBuffer()); + assertEquals(t.toString(), copy.toString()); + assertNotSame(buf, copy.buffer()); Payload pl = new Payload(new byte[]{1,2,3,4}); t.setPayload(pl); @@ -241,7 +228,7 @@ public void testTokenAttributeFactory() throws Exception { TokenStream ts = new MockTokenizer(Token.TOKEN_ATTRIBUTE_FACTORY, new StringReader("foo bar"), MockTokenizer.WHITESPACE, false); - assertTrue("TypeAttribute is not implemented by SenselessAttributeImpl", + assertTrue("SenselessAttribute is not implemented by SenselessAttributeImpl", ts.addAttribute(SenselessAttribute.class) instanceof SenselessAttributeImpl); assertTrue("CharTermAttribute is not implemented by Token", Index: lucene/src/test/org/apache/lucene/analysis/tokenattributes/TestTermAttributeImpl.java =================================================================== --- lucene/src/test/org/apache/lucene/analysis/tokenattributes/TestTermAttributeImpl.java (revision 950043) +++ lucene/src/test/org/apache/lucene/analysis/tokenattributes/TestTermAttributeImpl.java (working copy) @@ -1,173 +0,0 @@ -package org.apache.lucene.analysis.tokenattributes; - -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import org.apache.lucene.util.LuceneTestCase; - -public class TestTermAttributeImpl extends LuceneTestCase { - - public TestTermAttributeImpl(String name) { - super(name); - } - - public void testResize() { - TermAttributeImpl t = new TermAttributeImpl(); - char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, content.length); - for (int i = 0; i < 2000; i++) - { - t.resizeTermBuffer(i); - assertTrue(i <= t.termBuffer().length); - assertEquals("hello", t.term()); - } - } - - public void testGrow() { - TermAttributeImpl t = new TermAttributeImpl(); - StringBuilder buf = new StringBuilder("ab"); - for (int i = 0; i < 20; i++) - { - char[] content = buf.toString().toCharArray(); - t.setTermBuffer(content, 0, content.length); - assertEquals(buf.length(), t.termLength()); - assertEquals(buf.toString(), t.term()); - buf.append(buf.toString()); - } - assertEquals(1048576, t.termLength()); - - // now as a string, first variant - t = new TermAttributeImpl(); - buf = new StringBuilder("ab"); - for (int i = 0; i < 20; i++) - { - String content = buf.toString(); - t.setTermBuffer(content, 0, content.length()); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); - buf.append(content); - } - assertEquals(1048576, t.termLength()); - - // now as a string, second variant - t = new TermAttributeImpl(); - buf = new StringBuilder("ab"); - for (int i = 0; i < 20; i++) - { - String content = buf.toString(); - t.setTermBuffer(content); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); - buf.append(content); - } - assertEquals(1048576, t.termLength()); - - // Test for slow growth to a long term - t = new TermAttributeImpl(); - buf = new StringBuilder("a"); - for (int i = 0; i < 20000; i++) - { - String content = buf.toString(); - t.setTermBuffer(content); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); - buf.append("a"); - } - assertEquals(20000, t.termLength()); - - // Test for slow growth to a long term - t = new TermAttributeImpl(); - buf = new StringBuilder("a"); - for (int i = 0; i < 20000; i++) - { - String content = buf.toString(); - t.setTermBuffer(content); - assertEquals(content.length(), t.termLength()); - assertEquals(content, t.term()); - buf.append("a"); - } - assertEquals(20000, t.termLength()); - } - - public void testToString() throws Exception { - char[] b = {'a', 'l', 'o', 'h', 'a'}; - TermAttributeImpl t = new TermAttributeImpl(); - t.setTermBuffer(b, 0, 5); - assertEquals("aloha", t.toString()); - - t.setTermBuffer("hi there"); - assertEquals("hi there", t.toString()); - } - - public void testMixedStringArray() throws Exception { - TermAttributeImpl t = new TermAttributeImpl(); - t.setTermBuffer("hello"); - assertEquals(t.termLength(), 5); - assertEquals(t.term(), "hello"); - t.setTermBuffer("hello2"); - assertEquals(t.termLength(), 6); - assertEquals(t.term(), "hello2"); - t.setTermBuffer("hello3".toCharArray(), 0, 6); - assertEquals(t.term(), "hello3"); - - // Make sure if we get the buffer and change a character - // that term() reflects the change - char[] buffer = t.termBuffer(); - buffer[1] = 'o'; - assertEquals(t.term(), "hollo3"); - } - - public void testClone() throws Exception { - TermAttributeImpl t = new TermAttributeImpl(); - char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, 5); - char[] buf = t.termBuffer(); - TermAttributeImpl copy = (TermAttributeImpl) TestSimpleAttributeImpls.assertCloneIsEqual(t); - assertEquals(t.term(), copy.term()); - assertNotSame(buf, copy.termBuffer()); - } - - public void testEquals() throws Exception { - TermAttributeImpl t1a = new TermAttributeImpl(); - char[] content1a = "hello".toCharArray(); - t1a.setTermBuffer(content1a, 0, 5); - TermAttributeImpl t1b = new TermAttributeImpl(); - char[] content1b = "hello".toCharArray(); - t1b.setTermBuffer(content1b, 0, 5); - TermAttributeImpl t2 = new TermAttributeImpl(); - char[] content2 = "hello2".toCharArray(); - t2.setTermBuffer(content2, 0, 6); - assertTrue(t1a.equals(t1b)); - assertFalse(t1a.equals(t2)); - assertFalse(t2.equals(t1b)); - } - - public void testCopyTo() throws Exception { - TermAttributeImpl t = new TermAttributeImpl(); - TermAttributeImpl copy = (TermAttributeImpl) TestSimpleAttributeImpls.assertCopyIsEqual(t); - assertEquals("", t.term()); - assertEquals("", copy.term()); - - t = new TermAttributeImpl(); - char[] content = "hello".toCharArray(); - t.setTermBuffer(content, 0, 5); - char[] buf = t.termBuffer(); - copy = (TermAttributeImpl) TestSimpleAttributeImpls.assertCopyIsEqual(t); - assertEquals(t.term(), copy.term()); - assertNotSame(buf, copy.termBuffer()); - } -}